Skip to content

Commit 2d1b3d9

Browse files
naokiwakatawakata_sansan
authored andcommitted
add x-duplicated-data-type guard to kotlinx_serialization oneOf/anyOf templates
The Gson path already uses {{^vendorExtensions.x-duplicated-data-type}} to skip duplicate data types, but the new kotlinx_serialization path was missing this guard. Without it, duplicate value class names would be generated if multiple schemas resolve to the same Kotlin dataType, causing compilation errors.
1 parent d199ab1 commit 2d1b3d9

3 files changed

Lines changed: 12 additions & 10 deletions

File tree

modules/openapi-generator/src/main/resources/kotlin-client/anyof_class.mustache

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,11 @@ import java.io.IOException
105105
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}sealed interface {{classname}} {
106106
{{#composedSchemas}}
107107
{{#anyOf}}
108+
{{^vendorExtensions.x-duplicated-data-type}}
108109
@JvmInline
109110
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}value class {{#fnToValueClassName}}{{{dataType}}}{{/fnToValueClassName}}(val value: {{{dataType}}}) : {{classname}}
110111

112+
{{/vendorExtensions.x-duplicated-data-type}}
111113
{{/anyOf}}
112114
{{/composedSchemas}}
113115
}
@@ -121,6 +123,7 @@ import java.io.IOException
121123
when (value) {
122124
{{#composedSchemas}}
123125
{{#anyOf}}
126+
{{^vendorExtensions.x-duplicated-data-type}}
124127
{{#isArray}}
125128
is {{classname}}.{{#fnToValueClassName}}{{{dataType}}}{{/fnToValueClassName}} -> jsonEncoder.encodeJsonElement(jsonEncoder.json.encodeToJsonElement(value.value))
126129
{{/isArray}}
@@ -153,6 +156,7 @@ import java.io.IOException
153156
is {{classname}}.{{#fnToValueClassName}}{{{dataType}}}{{/fnToValueClassName}} -> jsonEncoder.encodeSerializableValue({{{dataType}}}.serializer(), value.value)
154157
{{/isPrimitiveType}}
155158
{{/isArray}}
159+
{{/vendorExtensions.x-duplicated-data-type}}
156160
{{/anyOf}}
157161
{{/composedSchemas}}
158162
}
@@ -166,6 +170,7 @@ import java.io.IOException
166170
167171
{{#composedSchemas}}
168172
{{#anyOf}}
173+
{{^vendorExtensions.x-duplicated-data-type}}
169174
{{#isArray}}
170175
if (jsonElement is JsonArray) {
171176
try {
@@ -210,6 +215,7 @@ import java.io.IOException
210215
}
211216
{{/isPrimitiveType}}
212217
{{/isArray}}
218+
{{/vendorExtensions.x-duplicated-data-type}}
213219
{{/anyOf}}
214220
{{/composedSchemas}}
215221

modules/openapi-generator/src/main/resources/kotlin-client/oneof_class.mustache

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,11 @@ import java.io.IOException
167167
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}sealed interface {{classname}} {
168168
{{#composedSchemas}}
169169
{{#oneOf}}
170+
{{^vendorExtensions.x-duplicated-data-type}}
170171
@JvmInline
171172
{{#nonPublicApi}}internal {{/nonPublicApi}}{{^nonPublicApi}}{{#explicitApi}}public {{/explicitApi}}{{/nonPublicApi}}value class {{#fnToValueClassName}}{{{dataType}}}{{/fnToValueClassName}}(val value: {{{dataType}}}) : {{classname}}
172173

174+
{{/vendorExtensions.x-duplicated-data-type}}
173175
{{/oneOf}}
174176
{{/composedSchemas}}
175177
}
@@ -183,6 +185,7 @@ import java.io.IOException
183185
when (value) {
184186
{{#composedSchemas}}
185187
{{#oneOf}}
188+
{{^vendorExtensions.x-duplicated-data-type}}
186189
{{#isArray}}
187190
is {{classname}}.{{#fnToValueClassName}}{{{dataType}}}{{/fnToValueClassName}} -> jsonEncoder.encodeJsonElement(jsonEncoder.json.encodeToJsonElement(value.value))
188191
{{/isArray}}
@@ -215,6 +218,7 @@ import java.io.IOException
215218
is {{classname}}.{{#fnToValueClassName}}{{{dataType}}}{{/fnToValueClassName}} -> jsonEncoder.encodeSerializableValue({{{dataType}}}.serializer(), value.value)
216219
{{/isPrimitiveType}}
217220
{{/isArray}}
221+
{{/vendorExtensions.x-duplicated-data-type}}
218222
{{/oneOf}}
219223
{{/composedSchemas}}
220224
}
@@ -228,6 +232,7 @@ import java.io.IOException
228232
229233
{{#composedSchemas}}
230234
{{#oneOf}}
235+
{{^vendorExtensions.x-duplicated-data-type}}
231236
{{#isArray}}
232237
if (jsonElement is JsonArray) {
233238
try {
@@ -272,6 +277,7 @@ import java.io.IOException
272277
}
273278
{{/isPrimitiveType}}
274279
{{/isArray}}
280+
{{/vendorExtensions.x-duplicated-data-type}}
275281
{{/oneOf}}
276282
{{/composedSchemas}}
277283

samples/client/others/kotlin-oneOf-anyOf-kotlinx-serialization/.openapi-generator/FILES

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
.openapi-generator-ignore
21
README.md
32
build.gradle
43
docs/AnyOfUserOrPet.md
@@ -41,12 +40,3 @@ src/main/kotlin/org/openapitools/client/models/StringOrLong.kt
4140
src/main/kotlin/org/openapitools/client/models/User.kt
4241
src/main/kotlin/org/openapitools/client/models/UserOrPet.kt
4342
src/main/kotlin/org/openapitools/client/models/UserOrPetOrArrayString.kt
44-
src/test/kotlin/org/openapitools/client/apis/TestApiTest.kt
45-
src/test/kotlin/org/openapitools/client/models/AnyOfUserOrPetOrArrayStringTest.kt
46-
src/test/kotlin/org/openapitools/client/models/AnyOfUserOrPetTest.kt
47-
src/test/kotlin/org/openapitools/client/models/BooleanOrLongTest.kt
48-
src/test/kotlin/org/openapitools/client/models/PetTest.kt
49-
src/test/kotlin/org/openapitools/client/models/StringOrLongTest.kt
50-
src/test/kotlin/org/openapitools/client/models/UserOrPetOrArrayStringTest.kt
51-
src/test/kotlin/org/openapitools/client/models/UserOrPetTest.kt
52-
src/test/kotlin/org/openapitools/client/models/UserTest.kt

0 commit comments

Comments
 (0)