boolean (Object o1, Object o2, String key, int depth, @NotNull Class<?> pluginClass) { if (depth > 100) { complain("Too deep function delegation inside CachedValueProvider. If you have cyclic dependencies, please remove them.", key, pluginClass); return false; } for (Field field : ourFieldCache.get(o1.getClass())) { Object v1; Object v2; try { field.setAccessible(true); v1 = field.get(o1); v2 = field.get(o2); } catch (Exception e) { throw new UnsupportedOperationException("Please allow full reflective access"); } if (areEqual(v1, v2)) continue; if (v1 != null && v2 != null && seemConcurrentlyCreatedLambdas(v1.getClass(), v2.getClass())) { continue; } if (v1 != null && v2 != null && v1.getClass() == v2.getClass() && shouldGoDeeper(v1)) { if (!checkFieldEquivalence(v1, v2, key, depth + 1, v1.getClass())) { return false; } } else { complain(nonEquivalence(o1.getClass(), field, v1, v2), key, pluginClass); return false; } } return true; }