@@ -310,12 +310,18 @@ private Map<String, Integer> countModelReferences(Map<String, CodegenModel> allM
310310 .flatMap (m -> m .oneOf .stream ())
311311 .forEach (name -> counts .merge (name , 1 , Integer ::sum ));
312312
313- // Count property-type references (prevents inlining models used as field types)
313+ // Count property-type references (prevents inlining models used as field types).
314+ // Check both dataType and complexType
314315 allModels .values ().stream ()
315316 .flatMap (m -> m .vars .stream ())
316- .map (prop -> prop .dataType )
317- .filter (allModels ::containsKey )
318- .forEach (name -> counts .merge (name , 1 , Integer ::sum ));
317+ .forEach (prop -> {
318+ if (prop .dataType != null && allModels .containsKey (prop .dataType )) {
319+ counts .merge (prop .dataType , 1 , Integer ::sum );
320+ }
321+ if (prop .complexType != null && allModels .containsKey (prop .complexType )) {
322+ counts .merge (prop .complexType , 1 , Integer ::sum );
323+ }
324+ });
319325
320326 return counts ;
321327 }
@@ -324,9 +330,10 @@ private Map<String, Integer> countModelReferences(Map<String, CodegenModel> allM
324330 * Mark oneOf parents as sealed/regular traits with discriminator vendor extensions,
325331 * and configure child models for inlining.
326332 */
327- private void markOneOfTraits (Map <String , ModelsMap > modelsMap ,
328- Map <String , CodegenModel > allModels ,
329- Map <String , Integer > refCounts ) {
333+ private void markOneOfTraits (
334+ Map <String , ModelsMap > modelsMap ,
335+ Map <String , CodegenModel > allModels ,
336+ Map <String , Integer > refCounts ) {
330337 for (ModelsMap mm : modelsMap .values ()) {
331338 for (ModelMap modelMap : mm .getModels ()) {
332339 CodegenModel model = modelMap .getModel ();
@@ -345,16 +352,26 @@ private void markOneOfTraits(Map<String, ModelsMap> modelsMap,
345352 }
346353 }
347354
348- private void configureOneOfModel (CodegenModel parent ,
349- Map <String , CodegenModel > allModels ,
350- Map <String , Integer > refCounts ) {
355+ private void configureOneOfModel (
356+ CodegenModel parent ,
357+ Map <String , CodegenModel > allModels ,
358+ Map <String , Integer > refCounts ) {
351359 List <CodegenModel > inlineableMembers = new ArrayList <>();
352360 Set <String > childImports = new HashSet <>();
353361
354362 for (String childName : parent .oneOf ) {
355363 CodegenModel child = allModels .get (childName );
356- if (child != null && isInlineable (child , refCounts )) {
357- markChildForInlining (child , parent );
364+ if (child == null ) continue ;
365+
366+ // All children extend the parent trait
367+ child .getVendorExtensions ().put ("x-oneOfParent" , parent .classname );
368+ if (parent .discriminator != null ) {
369+ child .getVendorExtensions ().put ("x-parentDiscriminatorName" ,
370+ parent .discriminator .getPropertyName ());
371+ }
372+
373+ if (isInlineable (child , refCounts )) {
374+ child .getVendorExtensions ().put ("x-isOneOfMember" , true );
358375 inlineableMembers .add (child );
359376 if (child .imports != null ) {
360377 childImports .addAll (child .imports );
@@ -376,15 +393,6 @@ private boolean isInlineable(CodegenModel child, Map<String, Integer> refCounts)
376393 && refCounts .getOrDefault (child .classname , 0 ) == 1 ;
377394 }
378395
379- private void markChildForInlining (CodegenModel child , CodegenModel parent ) {
380- child .getVendorExtensions ().put ("x-isOneOfMember" , true );
381- child .getVendorExtensions ().put ("x-oneOfParent" , parent .classname );
382- if (parent .discriminator != null ) {
383- child .getVendorExtensions ().put ("x-parentDiscriminatorName" ,
384- parent .discriminator .getPropertyName ());
385- }
386- }
387-
388396 private void buildDiscriminatorEntries (CodegenModel parent , Map <String , CodegenModel > allModels ) {
389397 List <Map <String , String >> entries = parent .oneOf .stream ()
390398 .map (allModels ::get )
@@ -394,8 +402,10 @@ private void buildDiscriminatorEntries(CodegenModel parent, Map<String, CodegenM
394402 parent .getVendorExtensions ().put ("x-discriminator-entries" , entries );
395403 }
396404
397- private void markAsSealedTrait (CodegenModel parent , List <CodegenModel > members ,
398- Set <String > childImports ) {
405+ private void markAsSealedTrait (
406+ CodegenModel parent ,
407+ List <CodegenModel > members ,
408+ Set <String > childImports ) {
399409 parent .getVendorExtensions ().put ("x-isSealedTrait" , true );
400410 parent .getVendorExtensions ().put ("x-oneOfMembers" , members );
401411
@@ -411,8 +421,6 @@ private void markAsRegularTrait(CodegenModel parent, List<CodegenModel> partialM
411421 parent .getVendorExtensions ().put ("x-isRegularTrait" , true );
412422 for (CodegenModel member : partialMembers ) {
413423 member .getVendorExtensions ().remove ("x-isOneOfMember" );
414- member .getVendorExtensions ().remove ("x-oneOfParent" );
415- member .getVendorExtensions ().remove ("x-parentDiscriminatorName" );
416424 }
417425 }
418426
0 commit comments