@@ -12,6 +12,18 @@ private OneOf() {
12
12
}
13
13
14
14
public static void updateModelsOneOf (Map <String , ModelsMap > models , String modelPackage ) {
15
+ // first, propagate the discriminator of allOf to the parent
16
+ for (ModelsMap modelContainer : models .values ()) {
17
+ var model = modelContainer .getModels ().get (0 ).getModel ();
18
+ if (model .getComposedSchemas () != null && model .getComposedSchemas ().getAllOf () != null ) {
19
+ for (CodegenProperty prop : model .getComposedSchemas ().getAllOf ()) {
20
+ if (prop .vendorExtensions .containsKey ("x-discriminator-fields" )) {
21
+ model .vendorExtensions .put ("x-discriminator-fields" , prop .vendorExtensions .get ("x-discriminator-fields" ));
22
+ }
23
+ }
24
+ }
25
+ }
26
+
15
27
for (ModelsMap modelContainer : models .values ()) {
16
28
// modelContainers always have 1 and only 1 model in our specs
17
29
var model = modelContainer .getModels ().get (0 ).getModel ();
@@ -86,8 +98,13 @@ public static void markCompounds(Map<String, ModelsMap> models, String oneOf, Ma
86
98
//noinspection unchecked
87
99
var values = (List <String >) compoundModel .vendorExtensions .get ("x-discriminator-fields" );
88
100
if (values != null ) {
89
- List <Map <String , String >> newValues = values .stream ().map (value -> Collections .singletonMap ("field" , value )).toList ();
90
- oneOfModel .put ("discriminators" , newValues );
101
+ oneOfModel .put ("x-discriminator-fields" , values );
102
+ // find the matching composed schema and assign the discriminator
103
+ for (var m : model .getComposedSchemas ().getOneOf ()) {
104
+ if (m .openApiType .equals (compoundModel .name )) {
105
+ m .vendorExtensions .put ("x-discriminator-fields" , values );
106
+ }
107
+ }
91
108
}
92
109
}
93
110
0 commit comments