code: @GwtIncompatible("incompatible method")
      private static boolean arrayMemberEquals(final Class<?> componentType, final Object o1, final Object o2) {
          if (componentType.isAnnotation()) {
              return annotationArrayMemberEquals((Annotation[]) o1, (Annotation[]) o2);
          }
          if (componentType.equals(Byte.TYPE)) {
              return Arrays.equals((byte[]) o1, (byte[]) o2);
          }
          if (componentType.equals(Short.TYPE)) {
              return Arrays.equals((short[]) o1, (short[]) o2);
          }
          if (componentType.equals(Integer.TYPE)) {
              return Arrays.equals((int[]) o1, (int[]) o2);
          }
          if (componentType.equals(Character.TYPE)) {
              return Arrays.equals((char[]) o1, (char[]) o2);
          }
          if (componentType.equals(Long.TYPE)) {
              return Arrays.equals((long[]) o1, (long[]) o2);
          }
          if (componentType.equals(Float.TYPE)) {
              return Arrays.equals((float[]) o1, (float[]) o2);
          }
          if (componentType.equals(Double.TYPE)) {
              return Arrays.equals((double[]) o1, (double[]) o2);
          }
          if (componentType.equals(Boolean.TYPE)) {
              return Arrays.equals((boolean[]) o1, (boolean[]) o2);
          }
          return Arrays.equals((Object[]) o1, (Object[]) o2);
      }
docs: Helper method for comparing two objects of an array type.
  
  @param componentType the component type of the array
  @param o1 the first object
  @param o2 the second object
  @return a flag whether these objects are equal