File tree 3 files changed +23
-2
lines changed
main/java/org/openapitools/openapidiff/core
3 files changed +23
-2
lines changed Original file line number Diff line number Diff line change 27
27
import org .openapitools .openapidiff .core .model .deferred .RecursiveSchemaSet ;
28
28
import org .openapitools .openapidiff .core .utils .RefPointer ;
29
29
import org .openapitools .openapidiff .core .utils .RefType ;
30
+ import org .slf4j .Logger ;
31
+ import org .slf4j .LoggerFactory ;
30
32
31
33
public class SchemaDiff {
34
+ private static final Logger logger = LoggerFactory .getLogger (SchemaDiff .class );
32
35
33
36
private static final RefPointer <Schema <?>> refPointer = new RefPointer <>(RefType .SCHEMAS );
34
37
private static final Map <Class <? extends Schema >, Class <? extends SchemaDiffResult >>
@@ -96,7 +99,14 @@ protected static Schema<?> resolveComposedSchema(
96
99
updatedVisitedRefs .add (composed .get$ref ());
97
100
composed = refPointer .resolveRef (components , composed , composed .get$ref ());
98
101
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
+ }
100
110
}
101
111
}
102
112
composedSchema .setAllOf (null );
Original file line number Diff line number Diff line change @@ -13,6 +13,6 @@ public boolean contains(CacheKey key) {
13
13
14
14
public void put (CacheKey key ) {
15
15
leftKeys .add (key .getLeft ());
16
- leftKeys .add (key .getRight ());
16
+ rightKeys .add (key .getRight ());
17
17
}
18
18
}
Original file line number Diff line number Diff line change @@ -25,6 +25,17 @@ components:
25
25
type : string
26
26
message2 :
27
27
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'
28
39
details :
29
40
type : array
30
41
items :
You can’t perform that action at this time.
0 commit comments