Skip to content

Commit 6428dde

Browse files
committed
fix behavior for nullable with null and non-null default
1 parent 1019573 commit 6428dde

11 files changed

Lines changed: 483 additions & 176 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
}}{{#isEnum}}{{#isArray}}{{baseType}}<{{/isArray}}{{classname}}.{{{nameInPascalCase}}}{{#isArray}}>{{/isArray}}{{/isEnum}}{{!
1919
}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{!
2020
}}{{^defaultValue}}? = null{{/defaultValue}}{{!
21-
}}{{#defaultValue}} = {{!
21+
}}{{#defaultValue}}{{#isNullable}}?{{/isNullable}} = {{!
2222
}}{{^isNumber}}{{{defaultValue}}}{{/isNumber}}{{!
2323
}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{!
2424
}}{{/defaultValue}}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@
1717
{{#isInherited}}override {{/isInherited}}{{>modelMutable}} {{{name}}}: {{!
1818
}}{{#isEnum}}{{classname}}.{{nameInPascalCase}}{{/isEnum}}{{!
1919
}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{!
20-
}}{{^defaultValue}}?{{/defaultValue}}{{!
20+
}}{{#isNullable}}?{{/isNullable}}{{!
21+
}}{{^isNullable}}{{^defaultValue}}?{{/defaultValue}}{{/isNullable}}{{!
2122
}}{{^discriminator}} = {{{defaultValue}}}{{^defaultValue}}null{{/defaultValue}}{{/discriminator}}

modules/openapi-generator/src/test/java/org/openapitools/codegen/kotlin/spring/KotlinSpringServerCodegenTest.java

Lines changed: 149 additions & 83 deletions
Large diffs are not rendered by default.

modules/openapi-generator/src/test/resources/3_0/kotlin/petstore-with-x-kotlin-implements.yaml

Lines changed: 71 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -566,62 +566,111 @@ components:
566566
items:
567567
$ref: '#/components/schemas/SomeEnum'
568568
default: [ ENUMVALUE3, ENUMVALUE1 ]
569-
nonRequiredWithDefaultNullList:
569+
nonRequiredNullableWithDefaultNullList:
570570
type: array
571571
items:
572572
type: string
573573
nullable: true
574574
default: null
575-
nonRequiredWithDefaultNullSet:
575+
nonRequiredNullableWithDefaultNullSet:
576576
type: array
577577
items:
578578
type: string
579579
uniqueItems: true
580580
nullable: true
581581
default: null
582-
nonRequiredWithDefaultNullString:
582+
nonRequiredNullableWithDefaultNullString:
583583
type: string
584584
nullable: true
585585
default: null
586-
nonRequiredWithDefaultNullInt:
586+
nonRequiredNullableWithDefaultNullInt:
587587
type: number
588588
format: int32
589589
nullable: true
590590
default: null
591-
nonRequiredWithDefaultNullLong:
591+
nonRequiredNullableWithDefaultNullLong:
592592
type: number
593593
format: int64
594594
nullable: true
595595
default: null
596-
nonRequiredWithDefaultNullFloat:
596+
nonRequiredNullableWithDefaultNullFloat:
597597
type: number
598598
format: float
599599
nullable: true
600600
default: null
601-
nonRequiredWithDefaultNullDouble:
601+
nonRequiredNullableWithDefaultNullDouble:
602602
type: number
603603
format: double
604604
nullable: true
605605
default: null
606-
nonRequiredWithDefaultNullEnum:
607-
$ref: '#/components/schemas/SomeNullableEnum'
608-
nonRequiredWithDefaultNullEnumList:
606+
nonRequiredNullableWithDefaultNullEnum:
607+
$ref: '#/components/schemas/SomeNullableEnumWithNullDefault'
608+
nonRequiredNullableWithDefaultNullEnumList:
609609
type: array
610610
items:
611611
$ref: '#/components/schemas/SomeEnum'
612612
nullable: true
613613
default: null
614-
nonRequiredWithDefaultNullEnumSet:
614+
nonRequiredNullableWithDefaultNullEnumSet:
615615
type: array
616616
uniqueItems: true
617617
items:
618618
$ref: '#/components/schemas/SomeEnum'
619619
nullable: true
620620
default: null
621-
nonRequiredNullableWithDefaultString:
621+
###---####
622+
nonRequiredNullableWithDefaultNonNullList:
623+
type: array
624+
items:
625+
type: string
626+
nullable: true
627+
default: ["some string", "another string"]
628+
nonRequiredNullableWithDefaultNonNullSet:
629+
type: array
630+
items:
631+
type: string
632+
uniqueItems: true
633+
nullable: true
634+
default: ["some string", "another string"]
635+
nonRequiredNullableWithDefaultNonNullString:
622636
type: string
623637
nullable: true
624-
default: "someString"
638+
default: "some string"
639+
nonRequiredNullableWithDefaultNonNullInt:
640+
type: number
641+
format: int32
642+
nullable: true
643+
default: 42
644+
nonRequiredNullableWithDefaultNonNullLong:
645+
type: number
646+
format: int64
647+
nullable: true
648+
default: 42
649+
nonRequiredNullableWithDefaultNonNullFloat:
650+
type: number
651+
format: float
652+
nullable: true
653+
default: 15.45
654+
nonRequiredNullableWithDefaultNonNullDouble:
655+
type: number
656+
format: double
657+
nullable: true
658+
default: 15.45
659+
nonRequiredNullableWithDefaultNonNullEnum:
660+
$ref: '#/components/schemas/SomeNullableEnumWithNonNullDefault'
661+
nonRequiredNullableWithDefaultNonNullEnumList:
662+
type: array
663+
items:
664+
$ref: '#/components/schemas/SomeEnum'
665+
nullable: true
666+
default: [ ENUMVALUE1 ]
667+
nonRequiredNullableWithDefaultNonNullEnumSet:
668+
type: array
669+
uniqueItems: true
670+
items:
671+
$ref: '#/components/schemas/SomeEnum'
672+
nullable: true
673+
default: [ ENUMVALUE1 ]
625674
photoUrls:
626675
type: array
627676
items:
@@ -686,14 +735,22 @@ components:
686735
- ENUMVALUE2
687736
- ENUMVALUE3
688737
default: ENUMVALUE1
689-
SomeNullableEnum:
738+
SomeNullableEnumWithNullDefault:
690739
type: string
691740
enum:
692741
- ENUMVALUE1
693742
- ENUMVALUE2
694743
- ENUMVALUE3
695744
nullable: true
696745
default: null
746+
SomeNullableEnumWithNonNullDefault:
747+
type: string
748+
enum:
749+
- ENUMVALUE1
750+
- ENUMVALUE2
751+
- ENUMVALUE3
752+
nullable: true
753+
default: ENUMVALUE1
697754
Color:
698755
x-kotlin-implements: [ com.some.pack.WithDefaultMethods ]
699756
type: string

samples/server/petstore/kotlin-springboot-x-kotlin-implements/.openapi-generator/FILES

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ src/main/kotlin/org/openapitools/model/ModelApiResponse.kt
2020
src/main/kotlin/org/openapitools/model/Order.kt
2121
src/main/kotlin/org/openapitools/model/Pet.kt
2222
src/main/kotlin/org/openapitools/model/SomeEnum.kt
23-
src/main/kotlin/org/openapitools/model/SomeNullableEnum.kt
23+
src/main/kotlin/org/openapitools/model/SomeNullableEnumWithNonNullDefault.kt
24+
src/main/kotlin/org/openapitools/model/SomeNullableEnumWithNullDefault.kt
2425
src/main/kotlin/org/openapitools/model/Tag.kt
2526
src/main/kotlin/org/openapitools/model/User.kt

samples/server/petstore/kotlin-springboot-x-kotlin-implements/src/main/kotlin/org/openapitools/configuration/EnumConverterConfiguration.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ package org.openapitools.configuration
22

33
import org.openapitools.model.Color
44
import org.openapitools.model.SomeEnum
5-
import org.openapitools.model.SomeNullableEnum
5+
import org.openapitools.model.SomeNullableEnumWithNonNullDefault
6+
import org.openapitools.model.SomeNullableEnumWithNullDefault
67

78
import org.springframework.context.annotation.Bean
89
import org.springframework.context.annotation.Configuration
@@ -30,10 +31,16 @@ class EnumConverterConfiguration {
3031
override fun convert(source: kotlin.String): SomeEnum = SomeEnum.forValue(source)
3132
}
3233
}
33-
@Bean(name = ["org.openapitools.configuration.EnumConverterConfiguration.someNullableEnumConverter"])
34-
fun someNullableEnumConverter(): Converter<kotlin.String, SomeNullableEnum> {
35-
return object: Converter<kotlin.String, SomeNullableEnum> {
36-
override fun convert(source: kotlin.String): SomeNullableEnum = SomeNullableEnum.forValue(source)
34+
@Bean(name = ["org.openapitools.configuration.EnumConverterConfiguration.someNullableEnumWithNonNullDefaultConverter"])
35+
fun someNullableEnumWithNonNullDefaultConverter(): Converter<kotlin.String, SomeNullableEnumWithNonNullDefault> {
36+
return object: Converter<kotlin.String, SomeNullableEnumWithNonNullDefault> {
37+
override fun convert(source: kotlin.String): SomeNullableEnumWithNonNullDefault = SomeNullableEnumWithNonNullDefault.forValue(source)
38+
}
39+
}
40+
@Bean(name = ["org.openapitools.configuration.EnumConverterConfiguration.someNullableEnumWithNullDefaultConverter"])
41+
fun someNullableEnumWithNullDefaultConverter(): Converter<kotlin.String, SomeNullableEnumWithNullDefault> {
42+
return object: Converter<kotlin.String, SomeNullableEnumWithNullDefault> {
43+
override fun convert(source: kotlin.String): SomeNullableEnumWithNullDefault = SomeNullableEnumWithNullDefault.forValue(source)
3744
}
3845
}
3946

samples/server/petstore/kotlin-springboot-x-kotlin-implements/src/main/kotlin/org/openapitools/model/Cat.kt

Lines changed: 54 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import org.openapitools.model.Category
99
import org.openapitools.model.Color
1010
import org.openapitools.model.Pet
1111
import org.openapitools.model.SomeEnum
12-
import org.openapitools.model.SomeNullableEnum
12+
import org.openapitools.model.SomeNullableEnumWithNonNullDefault
13+
import org.openapitools.model.SomeNullableEnumWithNullDefault
1314
import org.openapitools.model.Tag
1415
import java.io.Serializable
1516
import javax.validation.constraints.DecimalMax
@@ -83,42 +84,72 @@ data class Cat(
8384
@field:Valid
8485
@get:JsonProperty("nonRequiredWithDefaultEnumSet", required = false)
8586
override val nonRequiredWithDefaultEnumSet: kotlin.collections.Set<SomeEnum> = setOf(SomeEnum.ENUMVALUE3,SomeEnum.ENUMVALUE1),
87+
@get:JsonProperty("nonRequiredNullableWithDefaultNullList", required = false)
88+
override val nonRequiredNullableWithDefaultNullList: kotlin.collections.List<kotlin.String>? = null,
89+
@get:JsonProperty("nonRequiredNullableWithDefaultNullSet", required = false)
90+
override val nonRequiredNullableWithDefaultNullSet: kotlin.collections.Set<kotlin.String>? = null,
91+
@get:JsonProperty("nonRequiredNullableWithDefaultNullString", required = false)
92+
override val nonRequiredNullableWithDefaultNullString: kotlin.String? = null,
93+
@get:JsonProperty("nonRequiredNullableWithDefaultNullInt", required = false)
94+
override val nonRequiredNullableWithDefaultNullInt: java.math.BigDecimal? = null,
95+
@get:JsonProperty("nonRequiredNullableWithDefaultNullLong", required = false)
96+
override val nonRequiredNullableWithDefaultNullLong: java.math.BigDecimal? = null,
97+
@get:JsonProperty("nonRequiredNullableWithDefaultNullFloat", required = false)
98+
override val nonRequiredNullableWithDefaultNullFloat: kotlin.Float? = null,
99+
@get:JsonProperty("nonRequiredNullableWithDefaultNullDouble", required = false)
100+
override val nonRequiredNullableWithDefaultNullDouble: kotlin.Double? = null,
101+
@get:JsonProperty("nonRequiredNullableWithDefaultNullEnum", required = false)
102+
override val nonRequiredNullableWithDefaultNullEnum: SomeNullableEnumWithNullDefault? = null,
103+
@get:JsonProperty("nonRequiredNullableWithDefaultNullEnumList", required = false)
104+
override val nonRequiredNullableWithDefaultNullEnumList: kotlin.collections.List<SomeEnum>? = null,
105+
@get:JsonProperty("nonRequiredNullableWithDefaultNullEnumSet", required = false)
106+
override val nonRequiredNullableWithDefaultNullEnumSet: kotlin.collections.Set<SomeEnum>? = null,
107+
@get:JsonProperty("nonRequiredNullableWithDefaultNonNullList", required = false)
108+
override val nonRequiredNullableWithDefaultNonNullList: kotlin.collections.List<kotlin.String>? = arrayListOf("some string","another string"),
109+
@get:JsonProperty("nonRequiredNullableWithDefaultNonNullSet", required = false)
110+
override val nonRequiredNullableWithDefaultNonNullSet: kotlin.collections.Set<kotlin.String>? = setOf("some string","another string"),
111+
@get:JsonProperty("nonRequiredNullableWithDefaultNonNullString", required = false)
112+
override val nonRequiredNullableWithDefaultNonNullString: kotlin.String? = "some string",
113+
@get:JsonProperty("nonRequiredNullableWithDefaultNonNullInt", required = false)
114+
override val nonRequiredNullableWithDefaultNonNullInt: java.math.BigDecimal? = java.math.BigDecimal("42"),
115+
@get:JsonProperty("nonRequiredNullableWithDefaultNonNullLong", required = false)
116+
override val nonRequiredNullableWithDefaultNonNullLong: java.math.BigDecimal? = java.math.BigDecimal("42"),
117+
@get:JsonProperty("nonRequiredNullableWithDefaultNonNullFloat", required = false)
118+
override val nonRequiredNullableWithDefaultNonNullFloat: kotlin.Float? = 15.45f,
119+
@get:JsonProperty("nonRequiredNullableWithDefaultNonNullDouble", required = false)
120+
override val nonRequiredNullableWithDefaultNonNullDouble: kotlin.Double? = 15.45,
121+
@get:JsonProperty("nonRequiredNullableWithDefaultNonNullEnum", required = false)
122+
override val nonRequiredNullableWithDefaultNonNullEnum: SomeNullableEnumWithNonNullDefault? = SomeNullableEnumWithNonNullDefault.ENUMVALUE1,
123+
@get:JsonProperty("nonRequiredNullableWithDefaultNonNullEnumList", required = false)
124+
override val nonRequiredNullableWithDefaultNonNullEnumList: kotlin.collections.List<SomeEnum>? = arrayListOf(SomeEnum.ENUMVALUE1),
125+
@get:JsonProperty("nonRequiredNullableWithDefaultNonNullEnumSet", required = false)
126+
override val nonRequiredNullableWithDefaultNonNullEnumSet: kotlin.collections.Set<SomeEnum>? = setOf(SomeEnum.ENUMVALUE1),
86127

87-
@get:JsonProperty("nonRequiredWithDefaultNullList", required = false)
88-
override val nonRequiredWithDefaultNullList: kotlin.collections.List<kotlin.String>? = null,
89128

90-
@get:JsonProperty("nonRequiredWithDefaultNullSet", required = false)
91-
override val nonRequiredWithDefaultNullSet: kotlin.collections.Set<kotlin.String>? = null,
92129

93-
@get:JsonProperty("nonRequiredWithDefaultNullString", required = false)
94-
override val nonRequiredWithDefaultNullString: kotlin.String? = null,
95130

96-
@get:JsonProperty("nonRequiredWithDefaultNullInt", required = false)
97-
override val nonRequiredWithDefaultNullInt: java.math.BigDecimal? = null,
98131

99-
@get:JsonProperty("nonRequiredWithDefaultNullLong", required = false)
100-
override val nonRequiredWithDefaultNullLong: java.math.BigDecimal? = null,
101132

102-
@get:JsonProperty("nonRequiredWithDefaultNullFloat", required = false)
103-
override val nonRequiredWithDefaultNullFloat: kotlin.Float? = null,
104133

105-
@get:JsonProperty("nonRequiredWithDefaultNullDouble", required = false)
106-
override val nonRequiredWithDefaultNullDouble: kotlin.Double? = null,
107134

108135
@field:Valid
109-
@get:JsonProperty("nonRequiredWithDefaultNullEnum", required = false)
110-
override val nonRequiredWithDefaultNullEnum: SomeNullableEnum? = null,
111136

112137
@field:Valid
113-
@get:JsonProperty("nonRequiredWithDefaultNullEnumList", required = false)
114-
override val nonRequiredWithDefaultNullEnumList: kotlin.collections.List<SomeEnum>? = null,
115138

116139
@field:Valid
117-
@get:JsonProperty("nonRequiredWithDefaultNullEnumSet", required = false)
118-
override val nonRequiredWithDefaultNullEnumSet: kotlin.collections.Set<SomeEnum>? = null,
119140

120-
@get:JsonProperty("nonRequiredNullableWithDefaultString", required = false)
121-
override val nonRequiredNullableWithDefaultString: kotlin.String = "someString",
141+
142+
143+
144+
145+
146+
147+
148+
@field:Valid
149+
150+
@field:Valid
151+
152+
@field:Valid
122153

123154
@field:Valid
124155
@get:JsonProperty("tags", required = false)

0 commit comments

Comments
 (0)