File tree Expand file tree Collapse file tree 3 files changed +23
-2
lines changed
main/java/org/openapitools/openapidiff/core Expand file tree Collapse file tree 3 files changed +23
-2
lines changed Original file line number Diff line number Diff line change 2727import org .openapitools .openapidiff .core .model .deferred .RecursiveSchemaSet ;
2828import org .openapitools .openapidiff .core .utils .RefPointer ;
2929import org .openapitools .openapidiff .core .utils .RefType ;
30+ import org .slf4j .Logger ;
31+ import org .slf4j .LoggerFactory ;
3032
3133public class SchemaDiff {
34+ private static final Logger logger = LoggerFactory .getLogger (SchemaDiff .class );
3235
3336 private static final RefPointer <Schema <?>> refPointer = new RefPointer <>(RefType .SCHEMAS );
3437 private static final Map <Class <? extends Schema >, Class <? extends SchemaDiffResult >>
@@ -96,7 +99,14 @@ protected static Schema<?> resolveComposedSchema(
9699 updatedVisitedRefs .add (composed .get$ref ());
97100 composed = refPointer .resolveRef (components , composed , composed .get$ref ());
98101 composed = resolveComposedSchema (components , composed , updatedVisitedRefs );
99- schema = addSchema (schema , composed );
102+ if (composed .getProperties () != null
103+ && composed .getProperties ().containsValue (composedSchema )) {
104+ logger .warn (
105+ "Circular reference detected in composed (allOf/oneOf/anyOf) schema: {}" ,
106+ composed .get$ref ());
107+ } else {
108+ addSchema (schema , composed );
109+ }
100110 }
101111 }
102112 composedSchema .setAllOf (null );
Original file line number Diff line number Diff line change @@ -13,6 +13,6 @@ public boolean contains(CacheKey key) {
1313
1414 public void put (CacheKey key ) {
1515 leftKeys .add (key .getLeft ());
16- leftKeys .add (key .getRight ());
16+ rightKeys .add (key .getRight ());
1717 }
1818}
Original file line number Diff line number Diff line change @@ -25,6 +25,17 @@ components:
2525 type : string
2626 message2 :
2727 type : string
28+ recursiveDirect :
29+ $ref : ' #/components/schemas/B'
30+ recursiveAllOf :
31+ allOf :
32+ - $ref : ' #/components/schemas/B'
33+ recursiveOneOf :
34+ oneOf :
35+ - $ref : ' #/components/schemas/B'
36+ recursiveAnyOf :
37+ anyOf :
38+ - $ref : ' #/components/schemas/B'
2839 details :
2940 type : array
3041 items :
You can’t perform that action at this time.
0 commit comments