private Map<SchemaKeyword, Supplier<? extends JsonNode>> collectSupportedTagValueSuppliers(Map<String, List<JsonNode>> fieldsFromAllParts,
            Map<String, SchemaKeyword> reverseKeywordMap, ObjectNode mainNodeIncludingAllOf) {
        Map<SchemaKeyword, List<JsonNode>> supportedTagValues = fieldsFromAllParts.entrySet().stream()
                .filter(entry -> reverseKeywordMap.containsKey(entry.getKey()))
                .collect(Collectors.toMap(entry -> reverseKeywordMap.get(entry.getKey()), Map.Entry::getValue,
                        SchemaCleanUpUtils::throwingMerger, LinkedHashMap::new));
        if (supportedTagValues.containsKey(SchemaKeyword.TAG_IF)) {
            // "if"/"then"/"else" tags should remain isolated in their sub-schemas
            return null;
        }
        Map<SchemaKeyword, Supplier<? extends JsonNode>> supportedTagValueSuppliers = new LinkedHashMap<>();
        for (Map.Entry<SchemaKeyword, List<JsonNode>> fieldEntries : supportedTagValues.entrySet()) {
            SchemaKeyword keyword = fieldEntries.getKey();
            List<JsonNode> valuesToMerge = fieldEntries.getValue();
            if (keyword == SchemaKeyword.TAG_ALLOF && mainNodeIncludingAllOf != null) {
                if (valuesToMerge.size() == 1) {
                    // no other "allOf" part left to merge
                    continue;
                }
                // we can ignore the "allOf" tag in the target node (the one we are trying to remove here)
                valuesToMerge = valuesToMerge.subList(1, valuesToMerge.size());
            }
            Supplier<? extends JsonNode> mergeResultSupplier = this.getAllOfMergeFunctionFor(keyword, valuesToMerge, reverseKeywordMap);
            if (mergeResultSupplier == null) {
                // unable to merge given values for the specified keyword; abort merge
                return null;
            }
            supportedTagValueSuppliers.put(keyword, mergeResultSupplier);
        }
        return supportedTagValueSuppliers;
    }
Check whether the merging of the given node and it's allOf entries should be skipped due to a {@link SchemaKeyword#TAG_REF} being present.
Drafts 6 and 7 would ignore any other attributes besides the {@link SchemaKeyword#TAG_REF}.

@param mainNode the main node containing an {@link SchemaKeyword#TAG_ALLOF} array (maybe {@code null})
@param parts entries of the {@link SchemaKeyword#TAG_ALLOF} array to consider
@param fieldsFromAllParts flattened collection of all attributes in the given parts
@return whether to block merging of the given {@link SchemaKeyword#TAG_ALLOF} candidate
jsonschema-generator/src/main/java/com/github/victools/jsonschema/generator/impl/SchemaCleanUpUtils.java