diff --git a/core/src/main/java/org/openapitools/openapidiff/core/compare/SchemaDiff.java b/core/src/main/java/org/openapitools/openapidiff/core/compare/SchemaDiff.java index 1b410818b..295cd9c6c 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/compare/SchemaDiff.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/compare/SchemaDiff.java @@ -96,7 +96,7 @@ protected static Schema resolveComposedSchema( updatedVisitedRefs.add(composed.get$ref()); composed = refPointer.resolveRef(components, composed, composed.get$ref()); composed = resolveComposedSchema(components, composed, updatedVisitedRefs); - schema = addSchema(schema, composed); + addSchema(schema, composed); } } composedSchema.setAllOf(null); @@ -340,8 +340,8 @@ public DeferredChanged computeDiffForReal( left = refPointer.resolveRef(this.leftComponents, left, getSchemaRef(left)); right = refPointer.resolveRef(this.rightComponents, right, getSchemaRef(right)); - left = resolveComposedSchema(leftComponents, left, new HashSet<>()); - right = resolveComposedSchema(rightComponents, right, new HashSet<>()); + left = resolveComposedSchema(leftComponents, left, refSet.getLeftKeys()); + right = resolveComposedSchema(rightComponents, right, refSet.getRightKeys()); // If type of schemas are different, just set old & new schema, set changedType to true in // SchemaDiffResult and diff --git a/core/src/main/java/org/openapitools/openapidiff/core/model/deferred/RecursiveSchemaSet.java b/core/src/main/java/org/openapitools/openapidiff/core/model/deferred/RecursiveSchemaSet.java index 079139db2..890d2e6c0 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/model/deferred/RecursiveSchemaSet.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/model/deferred/RecursiveSchemaSet.java @@ -7,12 +7,20 @@ public class RecursiveSchemaSet { HashSet leftKeys = new HashSet<>(); HashSet rightKeys = new HashSet<>(); + public HashSet getLeftKeys() { + return leftKeys; + } + + public HashSet getRightKeys() { + return rightKeys; + } + public boolean contains(CacheKey key) { return leftKeys.contains(key.getLeft()) || rightKeys.contains(key.getRight()); } public void put(CacheKey key) { leftKeys.add(key.getLeft()); - leftKeys.add(key.getRight()); + rightKeys.add(key.getRight()); } } diff --git a/core/src/test/resources/recursive_model_1.yaml b/core/src/test/resources/recursive_model_1.yaml index 24f545186..88742b135 100644 --- a/core/src/test/resources/recursive_model_1.yaml +++ b/core/src/test/resources/recursive_model_1.yaml @@ -25,6 +25,17 @@ components: type: string message2: type: string + recursiveDirect: + $ref: '#/components/schemas/B' + recursiveAllOf: + allOf: + - $ref: '#/components/schemas/B' + recursiveOneOf: + oneOf: + - $ref: '#/components/schemas/B' + recursiveAnyOf: + anyOf: + - $ref: '#/components/schemas/B' details: type: array items: