Skip to content

Commit a09bdc4

Browse files
committed
Fix bug
1 parent 435db41 commit a09bdc4

1 file changed

Lines changed: 19 additions & 6 deletions

File tree

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)