@@ -75,7 +75,6 @@ private static void markOneOfChildren(Map<String, ModelsMap> models, CodegenMode
75
75
markCompounds (models , oneOf , oneOfModel , model );
76
76
oneOfList .add (oneOfModel );
77
77
}
78
- oneOfList .sort (comparator ); // have fields with "discriminators" in the start of the list
79
78
model .vendorExtensions .put ("x-one-of-list" , oneOfList );
80
79
}
81
80
@@ -121,29 +120,6 @@ private static boolean isNumberType(String typeName) {
121
120
return typeName .equals ("Int" ) || typeName .equals ("Double" ) || typeName .equals ("Long" );
122
121
}
123
122
124
- public static final Comparator <Map <String , Object >> comparator = (mapA , mapB ) -> {
125
- boolean hasDiscriminatorA = mapA .containsKey ("discriminators" );
126
- boolean hasDiscriminatorB = mapB .containsKey ("discriminators" );
127
- // Maps with "discriminators" come first
128
- if (hasDiscriminatorA && !hasDiscriminatorB ) {
129
- return -1 ;
130
- } else if (!hasDiscriminatorA && hasDiscriminatorB ) {
131
- return 1 ;
132
- } else {
133
- // If both maps have or don't have "discriminators," compare their list lengths
134
- if (hasDiscriminatorA && hasDiscriminatorB ) {
135
- List <?> discriminatorsA = (List <?>) mapA .get ("discriminators" );
136
- List <?> discriminatorsB = (List <?>) mapB .get ("discriminators" );
137
-
138
- // Compare the lengths of the lists
139
- return discriminatorsB .size () - discriminatorsA .size ();
140
- }
141
-
142
- // If the lengths are the same or both maps don't have "discriminators," return 0
143
- return 0 ;
144
- }
145
- };
146
-
147
123
/**
148
124
* Add metadata about oneOfs models (e.g., if it has at least one model, if it has more than one
149
125
* array-subtype, etc.)
@@ -156,6 +132,7 @@ public static void addOneOfMetadata(Map<String, ModelsMap> models) {
156
132
if (isMultiArrayOneOfs (oneOfs )) model .vendorExtensions .put ("x-is-multi-array" , true );
157
133
if (isMultiMapOneOfs (oneOfs )) model .vendorExtensions .put ("x-is-multi-map" , true );
158
134
if (hasAtModelOrEnum (oneOfs )) model .vendorExtensions .put ("x-has-model" , true );
135
+ if (hasDiscriminators (oneOfs )) model .vendorExtensions .put ("x-has-discriminator" , true );
159
136
markOneOfModels (oneOfs );
160
137
sortOneOfs (oneOfs );
161
138
}
@@ -195,6 +172,14 @@ private static boolean hasAtModelOrEnum(List<CodegenProperty> oneOfs) {
195
172
return false ;
196
173
}
197
174
175
+ /** Return true if at least one oneOf has discriminators */
176
+ private static boolean hasDiscriminators (List <CodegenProperty > oneOfs ) {
177
+ for (var prop : oneOfs ) {
178
+ if (prop .vendorExtensions .containsKey ("x-discriminator-fields" )) return true ;
179
+ }
180
+ return false ;
181
+ }
182
+
198
183
/** Mark oneOf models */
199
184
private static void markOneOfModels (List <CodegenProperty > oneOfs ) {
200
185
for (var prop : oneOfs ) {
@@ -218,7 +203,7 @@ private static void sortOneOfs(List<CodegenProperty> oneOfs) {
218
203
return 1 ;
219
204
} else if (hasDiscriminatorA && hasDiscriminatorB ) {
220
205
List <?> discriminatorsA = (List <?>) propA .vendorExtensions .get ("x-discriminator-fields" );
221
- List <?> discriminatorsB = (List <?>) propA .vendorExtensions .get ("x-discriminator-fields" );
206
+ List <?> discriminatorsB = (List <?>) propB .vendorExtensions .get ("x-discriminator-fields" );
222
207
return discriminatorsB .size () - discriminatorsA .size ();
223
208
} else {
224
209
return 0 ;
0 commit comments