boolean (@NotNull Object object, @NotNull JsonLikePsiWalker walker, @Nullable JsonValueAdapter adapter, @NotNull String text, @NotNull BiFunction<String, String, Boolean> stringEq) { if (adapter != null && !adapter.shouldCheckAsValue()) return true; if (object instanceof EnumArrayValueWrapper) { if (adapter instanceof JsonArrayValueAdapter) { List<JsonValueAdapter> elements = ((JsonArrayValueAdapter)adapter).getElements(); Object[] values = ((EnumArrayValueWrapper)object).getValues(); if (elements.size() == values.length) { for (int i = 0; i < values.length; i++) { if (!checkEnumValue(values[i], walker, elements.get(i), walker.getNodeTextForValidation(elements.get(i).getDelegate()), stringEq)) return false; } return true; } } } else if (object instanceof EnumObjectValueWrapper) { if (adapter instanceof JsonObjectValueAdapter) { List<JsonPropertyAdapter> props = ((JsonObjectValueAdapter)adapter).getPropertyList(); Map<String, Object> values = ((EnumObjectValueWrapper)object).getValues(); if (props.size() == values.size()) { for (JsonPropertyAdapter prop : props) { if (!values.containsKey(prop.getName())) return false; for (JsonValueAdapter value : prop.getValues()) { if (!checkEnumValue(values.get(prop.getName()), walker, value, walker.getNodeTextForValidation(value.getDelegate()), stringEq)) return false; } } return true; } } } else { if (!walker.allowsSingleQuotes()) { if (stringEq.apply(object.toString(), text)) return true; } else { if (equalsIgnoreQuotes(object.toString(), text, walker.requiresValueQuotes(), stringEq)) return true; } } return false; }