@@ -248,7 +248,7 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
248248
249249 Map <String , CodegenModel > allModels = collectAllModels (modelsMap );
250250 synthesizeOneOfFromDiscriminator (allModels );
251- Map <String , Integer > refCounts = countOneOfReferences (allModels );
251+ Map <String , Integer > refCounts = countModelReferences (allModels );
252252 markOneOfTraits (modelsMap , allModels , refCounts );
253253 removeInlinedModels (modelsMap );
254254
@@ -298,13 +298,26 @@ private void synthesizeOneOfFromDiscriminator(Map<String, CodegenModel> allModel
298298 }
299299
300300 /**
301- * Count how many oneOf parents reference each child, used to determine
302- * whether a child can be inlined (only if referenced by exactly one parent).
301+ * Count how many times each model is referenced - both as a oneOf member and as a
302+ * property type. A child can only be inlined if it's referenced exactly once (by its
303+ * oneOf parent) and not used as a property type elsewhere.
303304 */
304- private Map <String , Integer > countOneOfReferences (Map <String , CodegenModel > allModels ) {
305- return allModels .values ().stream ()
305+ private Map <String , Integer > countModelReferences (Map <String , CodegenModel > allModels ) {
306+ Map <String , Integer > counts = new HashMap <>();
307+
308+ // Count oneOf parent references
309+ allModels .values ().stream ()
306310 .flatMap (m -> m .oneOf .stream ())
307- .collect (java .util .stream .Collectors .toMap (name -> name , name -> 1 , Integer ::sum ));
311+ .forEach (name -> counts .merge (name , 1 , Integer ::sum ));
312+
313+ // Count property-type references (prevents inlining models used as field types)
314+ allModels .values ().stream ()
315+ .flatMap (m -> m .vars .stream ())
316+ .map (prop -> prop .dataType )
317+ .filter (allModels ::containsKey )
318+ .forEach (name -> counts .merge (name , 1 , Integer ::sum ));
319+
320+ return counts ;
308321 }
309322
310323 /**
0 commit comments