Skip to content

Commit 035a9f7

Browse files
committed
openapi-processor/openapi-processor-spring#150, parse multi level generics of additional parameter
1 parent 5c0bd13 commit 035a9f7

File tree

2 files changed

+67
-38
lines changed

2 files changed

+67
-38
lines changed

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

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -110,20 +110,6 @@ class MappingConverter(val mapping: MappingV2) {
110110
}
111111
}
112112

113-
private fun createParameterTypeMapping(source: RequestParameter): ParameterTypeMapping {
114-
val (mapping, genericTypes, genericTypeNames) = parseMapping(source.name, source.generics)
115-
116-
val typeMapping = TypeMapping(
117-
null,
118-
null,
119-
resolvePackageVariable(mapping.targetType!!),
120-
resolvePackageVariable(genericTypeNames),
121-
genericTypes
122-
)
123-
124-
return ParameterTypeMapping(mapping.sourceType!!, typeMapping)
125-
}
126-
127113
private fun convertParameter(source: Parameter): Mapping {
128114
// parameters:
129115
return when (source) {
@@ -150,6 +136,40 @@ class MappingConverter(val mapping: MappingV2) {
150136
}
151137
}
152138

139+
private fun createParameterTypeMapping(source: RequestParameter): ParameterTypeMapping {
140+
val (mapping, genericTypes, genericTypeNames) = parseMapping(source.name, source.generics)
141+
142+
val typeMapping = TypeMapping(
143+
null,
144+
null,
145+
resolvePackageVariable(mapping.targetType!!),
146+
resolvePackageVariable(genericTypeNames),
147+
genericTypes
148+
)
149+
150+
return ParameterTypeMapping(mapping.sourceType!!, typeMapping)
151+
}
152+
153+
private fun createAddParameterTypeMapping(source: AdditionalParameter): AddParameterTypeMapping {
154+
val (mapping, genericTypes, genericTypeNames) = parseMapping(source.add, source.generics)
155+
156+
val typeMapping = TypeMapping(
157+
null,
158+
null,
159+
resolvePackageVariable(mapping.targetType!!),
160+
resolvePackageVariable(genericTypeNames),
161+
genericTypes
162+
)
163+
164+
var annotation: io.openapiprocessor.core.converter.mapping.Annotation? = null
165+
if(mapping.annotationType != null) {
166+
annotation = Annotation(
167+
mapping.annotationType!!, mapping.annotationParameters)
168+
}
169+
170+
return AddParameterTypeMapping(mapping.sourceType!!, typeMapping, annotation)
171+
}
172+
153173
data class ParsedMapping(
154174
val mapping: ParserMapping,
155175
val genericTypes: List<TargetType>,
@@ -198,30 +218,6 @@ class MappingConverter(val mapping: MappingV2) {
198218
.collect(Collectors.toList())
199219
}
200220

201-
private fun createAddParameterTypeMapping(source: AdditionalParameter): AddParameterTypeMapping {
202-
val mapping = parseMapping(source.add)
203-
204-
val targetGenericTypes = mapping.targetGenericTypes.toMutableList()
205-
if (targetGenericTypes.isEmpty() && source.generics != null) {
206-
targetGenericTypes.addAll(source.generics)
207-
}
208-
209-
val typeMapping = TypeMapping(
210-
null,
211-
null,
212-
resolvePackageVariable(mapping.targetType!!),
213-
resolvePackageVariable(targetGenericTypes)
214-
)
215-
216-
var annotation: io.openapiprocessor.core.converter.mapping.Annotation? = null
217-
if(mapping.annotationType != null) {
218-
annotation = Annotation(
219-
mapping.annotationType!!, mapping.annotationParameters)
220-
}
221-
222-
return AddParameterTypeMapping(mapping.sourceType!!, typeMapping, annotation)
223-
}
224-
225221
private fun convertResponse(source: Response): Mapping {
226222
val mapping = parseMapping(source.content)
227223

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

Lines changed: 33 additions & 0 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.AddParameterTypeMapping
1112
import io.openapiprocessor.core.converter.mapping.ParameterTypeMapping
1213
import io.openapiprocessor.core.converter.mapping.TypeMapping
1314
import io.openapiprocessor.core.processor.MappingConverter
@@ -208,4 +209,36 @@ class MappingConverterGenericsSpec: StringSpec({
208209
coll.typeName shouldBe "java.util.Collection"
209210
coll.genericTypes[0].typeName shouldBe "generated.String"
210211
}
212+
213+
"read additional parameter with nested generic parameters & package ref" {
214+
val yaml = """
215+
|openapi-processor-mapping: v2
216+
|
217+
|options:
218+
| package-name: generated
219+
|
220+
|map:
221+
| parameters:
222+
| - add: foo => java.util.Map
223+
| generics:
224+
| - java.lang.String
225+
| - java.util.Collection<{package-name}.String>
226+
""".trimMargin()
227+
228+
// when:
229+
val mapping = reader.read (yaml)
230+
val mappings = converter.convert (mapping)
231+
232+
// then:
233+
val type = mappings.first() as AddParameterTypeMapping
234+
type.parameterName shouldBe "foo"
235+
val tm = type.mapping
236+
tm.targetTypeName shouldBe "java.util.Map"
237+
tm.genericTypes.size shouldBe 2
238+
tm.genericTypes[0].typeName shouldBe "java.lang.String"
239+
240+
val coll = tm.genericTypes[1]
241+
coll.typeName shouldBe "java.util.Collection"
242+
coll.genericTypes[0].typeName shouldBe "generated.String"
243+
}
211244
})

0 commit comments

Comments
 (0)