Skip to content

Commit cb7a964

Browse files
rvlasveldclaude
andcommitted
Fix review issues: parent constructor call and hasVars/hasRequired flags
Address two issues identified by cubic code review: 1. Always emit parentheses in parent constructor call when `useSealedDiscriminatorClasses` is enabled, even when `x-parent-ctor-args` is absent. This prevents invalid Kotlin like `: Parent` when the parent is a sealed class (should be `: Parent()`). 2. Update `hasVars` and `hasRequired` flags on child models after adding discriminator properties in the oneOf pattern. Without this, a child with no other properties would generate `class Cat(...)` instead of `data class Cat(...)`. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 1af1d1c commit cb7a964

2 files changed

Lines changed: 5 additions & 1 deletion

File tree

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1394,6 +1394,10 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
13941394
childModel.getAllVars().add(discriminatorProp);
13951395
}
13961396

1397+
// Update model flags after adding discriminator property
1398+
childModel.setHasVars(true);
1399+
childModel.setHasRequired(true);
1400+
13971401
childModel.getVendorExtensions().put("x-parent-ctor-args",
13981402
discriminatorVarName + " = " + discriminatorVarName);
13991403
}

modules/openapi-generator/src/main/resources/kotlin-spring/dataClass.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
{{/hasOptional}}{{/hasRequired}}{{#optionalVars}}{{>dataClassOptVar}}{{^-last}},
2828
{{/-last}}{{/optionalVars}}
2929
){{/discriminator}}{{! no newline
30-
}}{{#parent}} : {{{.}}}{{#isMap}}(){{/isMap}}{{^isMap}}{{#vendorExtensions.x-parent-ctor-args}}({{{vendorExtensions.x-parent-ctor-args}}}){{/vendorExtensions.x-parent-ctor-args}}{{/isMap}}{{! no newline
30+
}}{{#parent}} : {{{.}}}{{#isMap}}(){{/isMap}}{{^isMap}}{{#useSealedDiscriminatorClasses}}({{#vendorExtensions.x-parent-ctor-args}}{{{vendorExtensions.x-parent-ctor-args}}}{{/vendorExtensions.x-parent-ctor-args}}){{/useSealedDiscriminatorClasses}}{{/isMap}}{{! no newline
3131
}}{{#vendorExtensions.x-kotlin-implements}}, {{{.}}}{{/vendorExtensions.x-kotlin-implements}}{{! <- serializableModel is also handled via x-kotlin-implements
3232
}}{{#vendorExtensions.x-implements-sealed-interfaces}}{{#.}}, {{{.}}}{{/.}}{{/vendorExtensions.x-implements-sealed-interfaces}}{{! <- add sealed interface implementations
3333
}}{{/parent}}{{! no newline

0 commit comments

Comments
 (0)