private static boolean objectCommonFieldsEquals()

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;
  }