in java/fury-core/src/main/java/org/apache/fury/reflect/ReflectionUtils.java [743:806]
private static boolean objectCommonFieldsEquals(
Tuple3<Set<String>, Map<String, Field>, Map<String, Field>> commonFieldsInfo,
Object o1,
Object o2) {
for (String commonField : commonFieldsInfo.f0) {
Field field1 = Objects.requireNonNull(commonFieldsInfo.f1.get(commonField));
Field field2 = Objects.requireNonNull(commonFieldsInfo.f2.get(commonField));
FieldAccessor accessor1 = FieldAccessor.createAccessor(field1);
FieldAccessor accessor2 = FieldAccessor.createAccessor(field2);
Object f1 = accessor1.get(o1);
Object f2 = accessor2.get(o2);
if (f1 == null) {
if (f2 != null) {
return false;
}
} else {
if (field1.getType().isArray()) {
if (field1.getType() == boolean[].class) {
if (!Arrays.equals((boolean[]) f1, (boolean[]) f2)) {
return false;
}
} else if (field1.getType() == byte[].class) {
if (!Arrays.equals((byte[]) f1, (byte[]) f2)) {
return false;
}
} else if (field1.getType() == short[].class) {
if (!Arrays.equals((short[]) f1, (short[]) f2)) {
return false;
}
} else if (field1.getType() == char[].class) {
if (!Arrays.equals((char[]) f1, (char[]) f2)) {
return false;
}
} else if (field1.getType() == int[].class) {
if (!Arrays.equals((int[]) f1, (int[]) f2)) {
return false;
}
} else if (field1.getType() == long[].class) {
if (!Arrays.equals((long[]) f1, (long[]) f2)) {
return false;
}
} else if (field1.getType() == float[].class) {
if (!Arrays.equals((float[]) f1, (float[]) f2)) {
return false;
}
} else if (field1.getType() == double[].class) {
if (!Arrays.equals((double[]) f1, (double[]) f2)) {
return false;
}
} else {
if (!Arrays.deepEquals((Object[]) f1, (Object[]) f2)) {
return false;
}
}
} else {
if (!f1.equals(f2)) {
return false;
}
}
}
}
return true;
}