修复了Convert在忽略子类某些字段时因为Method导致无法忽略父类的getter方法的bug

This commit is contained in:
Redkale
2019-03-06 09:31:18 +08:00
parent 294543c46e
commit 8ad919f952
3 changed files with 11 additions and 16 deletions

View File

@@ -220,15 +220,10 @@ public abstract class ConvertFactory<R extends Reader, W extends Writer> {
return false;
}
public ConvertColumnEntry findRef(AccessibleObject element) {
public ConvertColumnEntry findRef(Class clazz, AccessibleObject element) {
if (element == null) return null;
ConvertColumnEntry en = this.columnEntrys.get(element);
Set<String> onlyColumns = null;
if (element instanceof Method) {
onlyColumns = ignoreAlls.get(((Method) element).getDeclaringClass());
} else if (element instanceof Field) {
onlyColumns = ignoreAlls.get(((Field) element).getDeclaringClass());
}
Set<String> onlyColumns = ignoreAlls.get(clazz);
if (en != null && onlyColumns == null) return en;
final ConvertType ct = this.getConvertType();
ConvertColumn[] ccs = element.getAnnotationsByType(ConvertColumn.class);

View File

@@ -94,7 +94,7 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
for (final Field field : clazz.getFields()) {
if (Modifier.isStatic(field.getModifiers())) continue;
if (factory.isConvertDisabled(field)) continue;
ref = factory.findRef(field);
ref = factory.findRef(clazz, field);
if (ref != null && ref.ignore()) continue;
Decodeable<R, ?> fieldCoder = factory.findFieldCoder(clazz, field.getName());
if (fieldCoder == null) {
@@ -123,7 +123,7 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
continue;
}
}
ref = factory.findRef(method);
ref = factory.findRef(clazz, method);
if (ref != null && ref.ignore()) continue;
Decodeable<R, ?> fieldCoder = factory.findFieldCoder(clazz, ConvertFactory.readGetSetFieldName(method));

View File

@@ -75,7 +75,7 @@ public class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T> {
for (final Field field : clazz.getFields()) {
if (Modifier.isStatic(field.getModifiers())) continue;
if (factory.isConvertDisabled(field)) continue;
ref = factory.findRef(field);
ref = factory.findRef(clazz, field);
if (ref != null && ref.ignore()) continue;
Encodeable<W, ?> fieldCoder = factory.findFieldCoder(clazz, field.getName());
if (fieldCoder == null) {
@@ -104,7 +104,7 @@ public class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T> {
continue;
}
}
ref = factory.findRef(method);
ref = factory.findRef(clazz, method);
if (ref != null && ref.ignore()) continue;
Encodeable<W, ?> fieldCoder = factory.findFieldCoder(clazz, ConvertFactory.readGetSetFieldName(method));
if (fieldCoder == null) {
@@ -253,24 +253,24 @@ public class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T> {
static Attribute createAttribute(final ConvertFactory factory, Class clazz, final Field field, final Method getter, final Method setter) {
String fieldalias;
if (field != null) { // public field
ConvertColumnEntry ref = factory.findRef(field);
ConvertColumnEntry ref = factory.findRef(clazz, field);
fieldalias = ref == null || ref.name().isEmpty() ? field.getName() : ref.name();
} else if (getter != null) {
ConvertColumnEntry ref = factory.findRef(getter);
ConvertColumnEntry ref = factory.findRef(clazz, getter);
String mfieldname = ConvertFactory.readGetSetFieldName(getter);
if (ref == null) {
try {
ref = factory.findRef(clazz.getDeclaredField(mfieldname));
ref = factory.findRef(clazz, clazz.getDeclaredField(mfieldname));
} catch (Exception e) {
}
}
fieldalias = ref == null || ref.name().isEmpty() ? mfieldname : ref.name();
} else { // setter != null
ConvertColumnEntry ref = factory.findRef(setter);
ConvertColumnEntry ref = factory.findRef(clazz, setter);
String mfieldname = ConvertFactory.readGetSetFieldName(setter);
if (ref == null) {
try {
ref = factory.findRef(clazz.getDeclaredField(mfieldname));
ref = factory.findRef(clazz, clazz.getDeclaredField(mfieldname));
} catch (Exception e) {
}
}