This commit is contained in:
@@ -129,12 +129,23 @@ public abstract class Factory<R extends Reader, W extends Writer> {
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConvertColumnEntry findRef(AccessibleObject field) {
|
||||
if (field == null) return null;
|
||||
ConvertColumnEntry en = this.columnEntrys.get(field);
|
||||
public ConvertColumnEntry findRef(AccessibleObject element) {
|
||||
if (element == null) return null;
|
||||
ConvertColumnEntry en = this.columnEntrys.get(element);
|
||||
if (en != null) return en;
|
||||
final ConvertType ct = this.getConvertType();
|
||||
for (ConvertColumn ref : field.getAnnotationsByType(ConvertColumn.class)) {
|
||||
ConvertColumn[] ccs = element.getAnnotationsByType(ConvertColumn.class);
|
||||
if (ccs.length == 0 && element instanceof Method) {
|
||||
final Method method = (Method) element;
|
||||
String fieldName = readGetSetFieldName(method);
|
||||
if (fieldName != null) {
|
||||
try {
|
||||
ccs = method.getDeclaringClass().getDeclaredField(fieldName).getAnnotationsByType(ConvertColumn.class);
|
||||
} catch (Exception e) { //说明没有该字段,忽略异常
|
||||
}
|
||||
}
|
||||
}
|
||||
for (ConvertColumn ref : ccs) {
|
||||
if (ref.type().contains(ct)) {
|
||||
ConvertColumnEntry entry = new ConvertColumnEntry(ref);
|
||||
if (skipAllIgnore) {
|
||||
@@ -142,13 +153,26 @@ public abstract class Factory<R extends Reader, W extends Writer> {
|
||||
return entry;
|
||||
}
|
||||
if (skipIgnores.isEmpty()) return entry;
|
||||
if (skipIgnores.contains(((Member) field).getDeclaringClass())) entry.setIgnore(false);
|
||||
if (skipIgnores.contains(((Member) element).getDeclaringClass())) entry.setIgnore(false);
|
||||
return entry;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
static String readGetSetFieldName(Method method) {
|
||||
if (method == null) return null;
|
||||
String fname = method.getName();
|
||||
if (!fname.startsWith("is") && !fname.startsWith("get") && !fname.startsWith("set")) return fname;
|
||||
fname = fname.substring(fname.startsWith("is") ? 2 : 3);
|
||||
if (fname.length() > 1 && !(fname.charAt(1) >= 'A' && fname.charAt(1) <= 'Z')) {
|
||||
fname = Character.toLowerCase(fname.charAt(0)) + fname.substring(1);
|
||||
} else if (fname.length() == 1) {
|
||||
fname = "" + Character.toLowerCase(fname.charAt(0));
|
||||
}
|
||||
return fname;
|
||||
}
|
||||
|
||||
final String getEntity(Class clazz) {
|
||||
ConvertEntity ce = (ConvertEntity) clazz.getAnnotation(ConvertEntity.class);
|
||||
if (ce != null && findEntity(ce.value()) == null) entitys.put(ce.value(), clazz);
|
||||
|
||||
@@ -87,7 +87,7 @@ public final class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T
|
||||
if (!method.getName().startsWith("set")) continue;
|
||||
if (method.getParameterTypes().length != 1) continue;
|
||||
if (method.getReturnType() != void.class) continue;
|
||||
if (reversible && (cps == null || !ObjectEncoder.contains(cps, ObjectEncoder.readGetSetFieldName(method)))) {
|
||||
if (reversible && (cps == null || !ObjectEncoder.contains(cps, Factory.readGetSetFieldName(method)))) {
|
||||
boolean is = method.getParameterTypes()[0] == boolean.class || method.getParameterTypes()[0] == Boolean.class;
|
||||
try {
|
||||
clazz.getMethod(method.getName().replaceFirst("set", is ? "is" : "get"));
|
||||
|
||||
@@ -80,7 +80,7 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
|
||||
if (!method.getName().startsWith("is") && !method.getName().startsWith("get")) continue;
|
||||
if (method.getParameterTypes().length != 0) continue;
|
||||
if (method.getReturnType() == void.class) continue;
|
||||
if (reversible && (cps == null || !contains(cps, readGetSetFieldName(method)))) {
|
||||
if (reversible && (cps == null || !contains(cps, Factory.readGetSetFieldName(method)))) {
|
||||
boolean is = method.getName().startsWith("is");
|
||||
try {
|
||||
clazz.getMethod(method.getName().replaceFirst(is ? "is" : "get", "set"), method.getReturnType());
|
||||
@@ -237,19 +237,6 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
|
||||
return false;
|
||||
}
|
||||
|
||||
static String readGetSetFieldName(Method method) {
|
||||
if (method == null) return null;
|
||||
String fname = method.getName();
|
||||
if (!fname.startsWith("is") && !fname.startsWith("get") && !fname.startsWith("set")) return fname;
|
||||
fname = fname.substring(fname.startsWith("is") ? 2 : 3);
|
||||
if (fname.length() > 1 && !(fname.charAt(1) >= 'A' && fname.charAt(1) <= 'Z')) {
|
||||
fname = Character.toLowerCase(fname.charAt(0)) + fname.substring(1);
|
||||
} else if (fname.length() == 1) {
|
||||
fname = "" + Character.toLowerCase(fname.charAt(0));
|
||||
}
|
||||
return fname;
|
||||
}
|
||||
|
||||
static String[] findConstructorProperties(Creator creator) {
|
||||
try {
|
||||
Creator.ConstructorParameters cps = creator.getClass().getMethod("create", Object[].class).getAnnotation(Creator.ConstructorParameters.class);
|
||||
@@ -266,7 +253,7 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
|
||||
fieldalias = ref == null || ref.name().isEmpty() ? field.getName() : ref.name();
|
||||
} else if (getter != null) {
|
||||
ConvertColumnEntry ref = factory.findRef(getter);
|
||||
String mfieldname = readGetSetFieldName(getter);
|
||||
String mfieldname = Factory.readGetSetFieldName(getter);
|
||||
if (ref == null) {
|
||||
try {
|
||||
ref = factory.findRef(clazz.getDeclaredField(mfieldname));
|
||||
@@ -276,7 +263,7 @@ public final class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T
|
||||
fieldalias = ref == null || ref.name().isEmpty() ? mfieldname : ref.name();
|
||||
} else { // setter != null
|
||||
ConvertColumnEntry ref = factory.findRef(setter);
|
||||
String mfieldname = readGetSetFieldName(setter);
|
||||
String mfieldname = Factory.readGetSetFieldName(setter);
|
||||
if (ref == null) {
|
||||
try {
|
||||
ref = factory.findRef(clazz.getDeclaredField(mfieldname));
|
||||
|
||||
Reference in New Issue
Block a user