Skip to content

Commit 08affa8

Browse files
committed
fix(kotlin): fix double serializable annotation
1 parent 9148db2 commit 08affa8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+2218
-4
lines changed

.github/workflows/samples-kotlin-client.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ jobs:
7171
- samples/client/others/kotlin-jvm-okhttp-path-comments
7272
- samples/client/others/kotlin-integer-enum
7373
- samples/client/petstore/kotlin-allOff-discriminator-kotlinx-serialization
74+
- samples/client/petstore/kotlin-fix-double-serializable-annotation
7475
steps:
7576
- uses: actions/checkout@v5
7677
- uses: actions/setup-java@v5
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
generatorName: kotlin
2+
library: multiplatform
3+
outputDir: samples/client/petstore/kotlin-fix-double-serializable-annotation
4+
inputSpec: modules/openapi-generator/src/test/resources/bugs/issue_18904.yaml
5+
templateDir: modules/openapi-generator/src/main/resources/kotlin-client
6+
additionalProperties:
7+
serializationLibrary: kotlinx_serialization
8+
dateLibrary: kotlinx-datetime
9+
generateOneOfAnyOfWrappers: true
10+

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ import java.io.IOException
6666
{{#parcelizeModels}}
6767
@Parcelize
6868
{{/parcelizeModels}}
69-
{{#multiplatform}}{{^discriminator}}@Serializable{{/discriminator}}{{/multiplatform}}{{#kotlinx_serialization}}{{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}@Serializable{{/serializableModel}}{{/kotlinx_serialization}}{{#moshi}}{{#moshiCodeGen}}@JsonClass(generateAdapter = true){{/moshiCodeGen}}{{/moshi}}{{#jackson}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{/jackson}}
69+
{{#multiplatform}}{{^discriminator}}@Serializable{{/discriminator}}{{/multiplatform}}{{#kotlinx_serialization}}{{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}{{^multiplatform}}@Serializable{{/multiplatform}}{{/serializableModel}}{{/kotlinx_serialization}}{{#moshi}}{{#moshiCodeGen}}@JsonClass(generateAdapter = true){{/moshiCodeGen}}{{/moshi}}{{#jackson}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{/jackson}}
7070
{{#isDeprecated}}
7171
@Deprecated(message = "This schema is deprecated.")
7272
{{/isDeprecated}}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ import {{packageName}}.infrastructure.ITransformForStorage
7777
{{#parcelizeModels}}
7878
@Parcelize
7979
{{/parcelizeModels}}
80-
{{#multiplatform}}@Serializable{{/multiplatform}}{{#kotlinx_serialization}}{{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}@Serializable{{/serializableModel}}{{/kotlinx_serialization}}{{#moshi}}{{#moshiCodeGen}}@JsonClass(generateAdapter = true){{/moshiCodeGen}}{{/moshi}}{{#jackson}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{/jackson}}
80+
{{#multiplatform}}@Serializable{{/multiplatform}}{{#kotlinx_serialization}}{{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}{{^multiplatform}}@Serializable{{/multiplatform}}{{/serializableModel}}{{/kotlinx_serialization}}{{#moshi}}{{#moshiCodeGen}}@JsonClass(generateAdapter = true){{/moshiCodeGen}}{{/moshi}}{{#jackson}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{/jackson}}
8181
{{#isDeprecated}}
8282
@Deprecated(message = "This schema is deprecated.")
8383
{{/isDeprecated}}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import kotlinx.serialization.*
4646
*
4747
* Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}}
4848
*/
49-
{{#multiplatform}}@Serializable{{/multiplatform}}{{#kotlinx_serialization}}@Serializable{{#enumUnknownDefaultCase}}(with = {{classname}}Serializer::class){{/enumUnknownDefaultCase}}{{^enumUnknownDefaultCase}}{{^isString}}(with = {{classname}}Serializer::class){{/isString}}{{/enumUnknownDefaultCase}}{{/kotlinx_serialization}}
49+
{{#multiplatform}}@Serializable{{/multiplatform}}{{#kotlinx_serialization}}{{^multiplatform}}@Serializable{{/multiplatform}}{{#enumUnknownDefaultCase}}(with = {{classname}}Serializer::class){{/enumUnknownDefaultCase}}{{^enumUnknownDefaultCase}}{{^isString}}(with = {{classname}}Serializer::class){{/isString}}{{/enumUnknownDefaultCase}}{{/kotlinx_serialization}}
5050
{{^multiplatform}}
5151
{{#moshi}}
5252
@JsonClass(generateAdapter = false)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ import java.io.IOException
6666
{{#parcelizeModels}}
6767
@Parcelize
6868
{{/parcelizeModels}}
69-
{{#multiplatform}}{{^discriminator}}@Serializable{{/discriminator}}{{/multiplatform}}{{#kotlinx_serialization}}{{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}@Serializable{{/serializableModel}}{{/kotlinx_serialization}}{{#moshi}}{{#moshiCodeGen}}@JsonClass(generateAdapter = true){{/moshiCodeGen}}{{/moshi}}{{#jackson}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{/jackson}}
69+
{{#multiplatform}}{{^discriminator}}@Serializable{{/discriminator}}{{/multiplatform}}{{#kotlinx_serialization}}{{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}{{^multiplatform}}@Serializable{{/multiplatform}}{{/serializableModel}}{{/kotlinx_serialization}}{{#moshi}}{{#moshiCodeGen}}@JsonClass(generateAdapter = true){{/moshiCodeGen}}{{/moshi}}{{#jackson}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}{{/jackson}}
7070
{{#isDeprecated}}
7171
@Deprecated(message = "This schema is deprecated.")
7272
{{/isDeprecated}}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
openapi: 3.0.3
2+
info: { title: demo, version: 1.0.0 }
3+
paths: {}
4+
components:
5+
schemas:
6+
7+
# data_class + enum_class
8+
Pet:
9+
type: object
10+
required: [id, name, kind]
11+
properties:
12+
id: { type: string }
13+
name: { type: string }
14+
kind: { $ref: '#/components/schemas/PetKind' }
15+
16+
PetKind:
17+
type: string
18+
enum: [cat, dog, fish]
19+
20+
# oneOf no discriminator
21+
Animal:
22+
oneOf:
23+
- $ref: '#/components/schemas/Cat'
24+
- $ref: '#/components/schemas/Dog'
25+
26+
Cat:
27+
type: object
28+
required: [kind, meow]
29+
properties:
30+
kind:
31+
type: string
32+
enum: [cat]
33+
meow:
34+
type: string
35+
36+
Dog:
37+
type: object
38+
required: [kind, bark]
39+
properties:
40+
kind:
41+
type: string
42+
enum: [dog]
43+
bark:
44+
type: string
45+
46+
# anyOf no discriminator
47+
Device:
48+
anyOf:
49+
- $ref: '#/components/schemas/Phone'
50+
- $ref: '#/components/schemas/Laptop'
51+
52+
Phone:
53+
type: object
54+
required: [model, number]
55+
properties:
56+
model: { type: string }
57+
number: { type: string }
58+
59+
Laptop:
60+
type: object
61+
required: [model, ramGb]
62+
properties:
63+
model: { type: string }
64+
ramGb: { type: integer, format: int32 }
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# OpenAPI Generator Ignore
2+
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
3+
4+
# Use this file to prevent files from being overwritten by the generator.
5+
# The patterns follow closely to .gitignore or .dockerignore.
6+
7+
# As an example, the C# client generator defines ApiClient.cs.
8+
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
9+
#ApiClient.cs
10+
11+
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
12+
#foo/*/qux
13+
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
14+
15+
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
16+
#foo/**/qux
17+
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
18+
19+
# You can also negate patterns with an exclamation (!).
20+
# For example, you can ignore all files in a docs folder with the file extension .md:
21+
#docs/*.md
22+
# Then explicitly reverse the ignore rule for a single file:
23+
#!docs/README.md
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
.openapi-generator-ignore
2+
README.md
3+
build.gradle.kts
4+
docs/Animal.md
5+
docs/Cat.md
6+
docs/Device.md
7+
docs/Dog.md
8+
docs/Laptop.md
9+
docs/Pet.md
10+
docs/PetKind.md
11+
docs/Phone.md
12+
gradle/wrapper/gradle-wrapper.jar
13+
gradle/wrapper/gradle-wrapper.properties
14+
gradlew
15+
gradlew.bat
16+
settings.gradle.kts
17+
src/commonMain/kotlin/org/openapitools/client/auth/ApiKeyAuth.kt
18+
src/commonMain/kotlin/org/openapitools/client/auth/Authentication.kt
19+
src/commonMain/kotlin/org/openapitools/client/auth/HttpBasicAuth.kt
20+
src/commonMain/kotlin/org/openapitools/client/auth/HttpBearerAuth.kt
21+
src/commonMain/kotlin/org/openapitools/client/auth/OAuth.kt
22+
src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt
23+
src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiClient.kt
24+
src/commonMain/kotlin/org/openapitools/client/infrastructure/Base64ByteArray.kt
25+
src/commonMain/kotlin/org/openapitools/client/infrastructure/Bytes.kt
26+
src/commonMain/kotlin/org/openapitools/client/infrastructure/HttpResponse.kt
27+
src/commonMain/kotlin/org/openapitools/client/infrastructure/OctetByteArray.kt
28+
src/commonMain/kotlin/org/openapitools/client/infrastructure/PartConfig.kt
29+
src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt
30+
src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt
31+
src/commonMain/kotlin/org/openapitools/client/models/Animal.kt
32+
src/commonMain/kotlin/org/openapitools/client/models/Cat.kt
33+
src/commonMain/kotlin/org/openapitools/client/models/Device.kt
34+
src/commonMain/kotlin/org/openapitools/client/models/Dog.kt
35+
src/commonMain/kotlin/org/openapitools/client/models/Laptop.kt
36+
src/commonMain/kotlin/org/openapitools/client/models/Pet.kt
37+
src/commonMain/kotlin/org/openapitools/client/models/PetKind.kt
38+
src/commonMain/kotlin/org/openapitools/client/models/Phone.kt
39+
src/test/kotlin/org/openapitools/client/models/AnimalTest.kt
40+
src/test/kotlin/org/openapitools/client/models/CatTest.kt
41+
src/test/kotlin/org/openapitools/client/models/DeviceTest.kt
42+
src/test/kotlin/org/openapitools/client/models/DogTest.kt
43+
src/test/kotlin/org/openapitools/client/models/LaptopTest.kt
44+
src/test/kotlin/org/openapitools/client/models/PetKindTest.kt
45+
src/test/kotlin/org/openapitools/client/models/PetTest.kt
46+
src/test/kotlin/org/openapitools/client/models/PhoneTest.kt
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
7.16.0-SNAPSHOT

0 commit comments

Comments
 (0)