Skip to content

Commit d06b229

Browse files
committed
openapi-processor/openapi-processor-spring#150, parse multi level generics of parameter
1 parent 3f718e8 commit d06b229

File tree

2 files changed

+80
-9
lines changed

2 files changed

+80
-9
lines changed

openapi-processor-core/src/main/kotlin/io/openapiprocessor/core/processor/mapping/v2/MappingConverter.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ class MappingConverter(val mapping: MappingV2) {
104104
targetGenericTypes = convertExplicitGenerics(source.generics)
105105
}
106106

107+
// obsolete
107108
val targetGenericTypeNames = mapping.targetGenericTypes.toMutableList()
108109
if (targetGenericTypeNames.isEmpty() && source.generics != null) {
109110
targetGenericTypeNames.addAll(source.generics)
@@ -146,13 +147,17 @@ class MappingConverter(val mapping: MappingV2) {
146147
}
147148

148149
private fun convertParameter(source: Parameter): Mapping {
150+
// parameters:
149151
return when (source) {
152+
// - name: parameter name => target type
150153
is RequestParameter -> {
151154
createParameterTypeMapping(source)
152155
}
156+
// - add: parameter name => target type
153157
is AdditionalParameter -> {
154158
createAddParameterTypeMapping(source)
155159
}
160+
// - type: OpenAPI type => target type
156161
is Type -> {
157162
when (val mapping = convertType(source)) {
158163
is AnnotationTypeMapping -> ParameterAnnotationTypeMapping(mapping)
@@ -170,16 +175,23 @@ class MappingConverter(val mapping: MappingV2) {
170175
private fun createParameterTypeMapping(source: RequestParameter): ParameterTypeMapping {
171176
val mapping = parseMapping(source.name)
172177

173-
val targetGenericTypes = mapping.targetGenericTypes.toMutableList()
178+
var targetGenericTypes = convertInlineGenerics(mapping.targetGenericTypes2)
174179
if (targetGenericTypes.isEmpty() && source.generics != null) {
175-
targetGenericTypes.addAll(source.generics)
180+
targetGenericTypes = convertExplicitGenerics(source.generics)
181+
}
182+
183+
// obsolete
184+
val targetGenericTypeNames = mapping.targetGenericTypes.toMutableList()
185+
if (targetGenericTypeNames.isEmpty() && source.generics != null) {
186+
targetGenericTypeNames.addAll(source.generics)
176187
}
177188

178189
val typeMapping = TypeMapping(
179-
null,
180-
null,
190+
null, // mapping.sourceType
191+
null, // mapping.sourceFormat
181192
resolvePackageVariable(mapping.targetType!!),
182-
resolvePackageVariable(targetGenericTypes)
193+
resolvePackageVariable(targetGenericTypeNames),
194+
targetGenericTypes
183195
)
184196

185197
return ParameterTypeMapping(mapping.sourceType!!, typeMapping)

openapi-processor-core/src/test/kotlin/io/openapiprocessor/core/processor/mapping/v2/MappingConverterGenericsSpec.kt

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package io.openapiprocessor.core.processor.mapping.v2
88
import io.kotest.core.spec.IsolationMode
99
import io.kotest.core.spec.style.StringSpec
1010
import io.kotest.matchers.shouldBe
11+
import io.openapiprocessor.core.converter.mapping.ParameterTypeMapping
1112
import io.openapiprocessor.core.converter.mapping.TypeMapping
1213
import io.openapiprocessor.core.processor.MappingConverter
1314
import io.openapiprocessor.core.processor.MappingReader
@@ -24,7 +25,7 @@ class MappingConverterGenericsSpec: StringSpec({
2425
|
2526
|options:
2627
| package-name: generated
27-
|
28+
|
2829
|map:
2930
| types:
3031
| - type: Foo => java.util.Map<java.lang.String, java.lang.String>
@@ -48,7 +49,7 @@ class MappingConverterGenericsSpec: StringSpec({
4849
|
4950
|options:
5051
| package-name: generated
51-
|
52+
|
5253
|map:
5354
| types:
5455
| - type: Foo => java.util.Map
@@ -99,7 +100,7 @@ class MappingConverterGenericsSpec: StringSpec({
99100
|
100101
|options:
101102
| package-name: generated
102-
|
103+
|
103104
|map:
104105
| types:
105106
| - type: Foo => java.util.Map<java.lang.String, java.util.Collection<java.lang.String>>
@@ -126,7 +127,7 @@ class MappingConverterGenericsSpec: StringSpec({
126127
|
127128
|options:
128129
| package-name: generated
129-
|
130+
|
130131
|map:
131132
| types:
132133
| - type: Foo => java.util.Map
@@ -149,4 +150,62 @@ class MappingConverterGenericsSpec: StringSpec({
149150
coll.typeName shouldBe "java.util.Collection"
150151
coll.genericTypes[0].typeName shouldBe "generated.String"
151152
}
153+
154+
"read parameter with generic parameters" {
155+
val yaml = """
156+
|openapi-processor-mapping: v2
157+
|
158+
|options:
159+
| package-name: generated
160+
|
161+
|map:
162+
| parameters:
163+
| - name: foo => java.util.Map<java.lang.String, java.lang.String>
164+
""".trimMargin()
165+
166+
// when:
167+
val mapping = reader.read (yaml)
168+
val mappings = converter.convert (mapping)
169+
170+
// then:
171+
val type = mappings.first() as ParameterTypeMapping
172+
type.parameterName shouldBe "foo"
173+
val tm = type.mapping
174+
tm.targetTypeName shouldBe "java.util.Map"
175+
tm.genericTypes.size shouldBe 2
176+
tm.genericTypes[0].typeName shouldBe "java.lang.String"
177+
tm.genericTypes[1].typeName shouldBe "java.lang.String"
178+
}
179+
180+
"read parameter with nested generic parameters & package ref" {
181+
val yaml = """
182+
|openapi-processor-mapping: v2
183+
|
184+
|options:
185+
| package-name: generated
186+
|
187+
|map:
188+
| parameters:
189+
| - name: foo => java.util.Map
190+
| generics:
191+
| - java.lang.String
192+
| - java.util.Collection<{package-name}.String>
193+
""".trimMargin()
194+
195+
// when:
196+
val mapping = reader.read (yaml)
197+
val mappings = converter.convert (mapping)
198+
199+
// then:
200+
val type = mappings.first() as ParameterTypeMapping
201+
type.parameterName shouldBe "foo"
202+
val tm = type.mapping
203+
tm.targetTypeName shouldBe "java.util.Map"
204+
tm.genericTypes.size shouldBe 2
205+
tm.genericTypes[0].typeName shouldBe "java.lang.String"
206+
207+
val coll = tm.genericTypes[1]
208+
coll.typeName shouldBe "java.util.Collection"
209+
coll.genericTypes[0].typeName shouldBe "generated.String"
210+
}
152211
})

0 commit comments

Comments
 (0)