copier
This commit is contained in:
@@ -820,6 +820,7 @@ public interface Copier<S, D> extends BiFunction<S, D, D> {
|
||||
}
|
||||
|
||||
Predicate<Class> simpler = t -> t.isPrimitive() || t == String.class || Number.class.isAssignableFrom(t);
|
||||
//遍历所有字段
|
||||
for (Map.Entry<String, AccessibleObject> en : elements.entrySet()) {
|
||||
if (!(en.getValue() instanceof java.lang.reflect.Field)) {
|
||||
continue;
|
||||
@@ -933,6 +934,9 @@ public interface Copier<S, D> extends BiFunction<S, D, D> {
|
||||
mv.visitFieldInsn(PUTFIELD, destClassName, dfname, Type.getDescriptor(destFieldType));
|
||||
} else { //src: field, dest: method
|
||||
mv.visitMethodInsn(destClass.isInterface() ? INVOKEINTERFACE : INVOKEVIRTUAL, destClassName, setter.getName(), Type.getMethodDescriptor(setter), destClass.isInterface());
|
||||
if (setter.getReturnType() != void.class) {
|
||||
mv.visitInsn(POP);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
mv.visitVarInsn(ALOAD, 2);
|
||||
@@ -942,6 +946,9 @@ public interface Copier<S, D> extends BiFunction<S, D, D> {
|
||||
mv.visitFieldInsn(PUTFIELD, destClassName, dfname, Type.getDescriptor(destFieldType));
|
||||
} else { //src: field, dest: method
|
||||
mv.visitMethodInsn(destClass.isInterface() ? INVOKEINTERFACE : INVOKEVIRTUAL, destClassName, setter.getName(), Type.getMethodDescriptor(setter), destClass.isInterface());
|
||||
if (setter.getReturnType() != void.class) {
|
||||
mv.visitInsn(POP);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // skipNullValue OR (skipEmptyString && charstr)
|
||||
@@ -968,6 +975,9 @@ public interface Copier<S, D> extends BiFunction<S, D, D> {
|
||||
mv.visitFieldInsn(PUTFIELD, destClassName, dfname, Type.getDescriptor(destFieldType));
|
||||
} else { //src: field, dest: method
|
||||
mv.visitMethodInsn(destClass.isInterface() ? INVOKEINTERFACE : INVOKEVIRTUAL, destClassName, setter.getName(), Type.getMethodDescriptor(setter), destClass.isInterface());
|
||||
if (setter.getReturnType() != void.class) {
|
||||
mv.visitInsn(POP);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
mv.visitVarInsn(ALOAD, 2);
|
||||
@@ -977,6 +987,9 @@ public interface Copier<S, D> extends BiFunction<S, D, D> {
|
||||
mv.visitFieldInsn(PUTFIELD, destClassName, dfname, srcFieldDesc);
|
||||
} else { //src: field, dest: method
|
||||
mv.visitMethodInsn(destClass.isInterface() ? INVOKEINTERFACE : INVOKEVIRTUAL, destClassName, setter.getName(), Type.getMethodDescriptor(setter), destClass.isInterface());
|
||||
if (setter.getReturnType() != void.class) {
|
||||
mv.visitInsn(POP);
|
||||
}
|
||||
}
|
||||
}
|
||||
mv.visitLabel(ifLabel);
|
||||
@@ -984,6 +997,7 @@ public interface Copier<S, D> extends BiFunction<S, D, D> {
|
||||
}
|
||||
}
|
||||
}
|
||||
//遍历所有方法
|
||||
for (Map.Entry<String, AccessibleObject> en : elements.entrySet()) {
|
||||
if (!(en.getValue() instanceof java.lang.reflect.Method)) {
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user