private Supplier<JsonNode> mergeObjectProperties(List<JsonNode> objectNodesToMerge) {
        if (!objectNodesToMerge.stream().allMatch(JsonNode::isObject)) {
            // at least one value is not an object as expected, abort merge
            return null;
        }
        ObjectNode mergedObjectNode = this.config.createObjectNode();
        for (JsonNode singleObjectNode : objectNodesToMerge) {
            Iterator<Map.Entry<String, JsonNode>> it = singleObjectNode.fields();
            while (it.hasNext()) {
                Map.Entry<String, JsonNode> singleField = it.next();
                if (!mergedObjectNode.has(singleField.getKey())) {
                    mergedObjectNode.set(singleField.getKey(), singleField.getValue());
                } else if (!mergedObjectNode.get(singleField.getKey()).equals(singleField.getValue())) {
                    // cannot consolidate two occurrences of the same property; abort merge (in the future: may want to be smarter here)
                    return null;
                }
            }
        }
        return () -> mergedObjectNode;
    }
Check whether the given schema node and its {@link SchemaKeyword#TAG_ALLOF} elements (if there are any) are distinct. If yes, remove the
{@link SchemaKeyword#TAG_ALLOF} node and merge all its elements with the given schema node instead.
<br>
This makes for more readable schemas being generated but has the side-effect that manually added {@link SchemaKeyword#TAG_ALLOF} (e.g. from a
custom definition or attribute overrides) may be removed as well if it isn't strictly speaking necessary.

@param schemaNode single node representing a sub-schema to consolidate contained {@link SchemaKeyword#TAG_ALLOF} for (if present)
@param allOfTagName name of the {@link SchemaKeyword#TAG_ALLOF} in the designated JSON Schema version
@param reverseKeywordMap mapping from actual tag name in generated schema to underlying {@link SchemaKeyword}
jsonschema-generator/src/main/java/com/github/victools/jsonschema/generator/impl/SchemaCleanUpUtils.java