Skip to content

Commit cd86ae6

Browse files
committed
openapi-processor/openapi-processor-spring#150, parse multi level generics of response
1 parent 035a9f7 commit cd86ae6

File tree

2 files changed

+50
-18
lines changed

2 files changed

+50
-18
lines changed

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

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,20 @@ class MappingConverter(val mapping: MappingV2) {
170170
return AddParameterTypeMapping(mapping.sourceType!!, typeMapping, annotation)
171171
}
172172

173+
private fun convertResponse(source: Response): Mapping {
174+
val (mapping, genericTypes, genericTypeNames) = parseMapping(source.content, source.generics)
175+
176+
val typeMapping = TypeMapping(
177+
null,
178+
null,
179+
resolvePackageVariable(mapping.targetType!!),
180+
resolvePackageVariable(genericTypeNames),
181+
genericTypes
182+
)
183+
184+
return ResponseTypeMapping (mapping.sourceType!!, typeMapping)
185+
}
186+
173187
data class ParsedMapping(
174188
val mapping: ParserMapping,
175189
val genericTypes: List<TargetType>,
@@ -218,24 +232,6 @@ class MappingConverter(val mapping: MappingV2) {
218232
.collect(Collectors.toList())
219233
}
220234

221-
private fun convertResponse(source: Response): Mapping {
222-
val mapping = parseMapping(source.content)
223-
224-
val targetGenericTypes = mapping.targetGenericTypes.toMutableList()
225-
if (targetGenericTypes.isEmpty() && source.generics != null) {
226-
targetGenericTypes.addAll(source.generics)
227-
}
228-
229-
val typeMapping = TypeMapping(
230-
null,
231-
null,
232-
resolvePackageVariable(mapping.targetType!!),
233-
resolvePackageVariable(targetGenericTypes)
234-
)
235-
236-
return ResponseTypeMapping (mapping.sourceType!!, typeMapping)
237-
}
238-
239235
private fun convertPath(path: String, source: Path): Mapping {
240236
val result = ArrayList<Mapping>()
241237

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ package io.openapiprocessor.core.processor.mapping.v2
77

88
import io.kotest.core.spec.IsolationMode
99
import io.kotest.core.spec.style.StringSpec
10+
import io.kotest.matchers.nulls.shouldBeNull
1011
import io.kotest.matchers.shouldBe
1112
import io.openapiprocessor.core.converter.mapping.AddParameterTypeMapping
1213
import io.openapiprocessor.core.converter.mapping.ParameterTypeMapping
14+
import io.openapiprocessor.core.converter.mapping.ResponseTypeMapping
1315
import io.openapiprocessor.core.converter.mapping.TypeMapping
1416
import io.openapiprocessor.core.processor.MappingConverter
1517
import io.openapiprocessor.core.processor.MappingReader
@@ -241,4 +243,38 @@ class MappingConverterGenericsSpec: StringSpec({
241243
coll.typeName shouldBe "java.util.Collection"
242244
coll.genericTypes[0].typeName shouldBe "generated.String"
243245
}
246+
247+
"read response with nested generic parameters & package ref" {
248+
val yaml = """
249+
|openapi-processor-mapping: v2
250+
|
251+
|options:
252+
| package-name: generated
253+
|
254+
|map:
255+
| responses:
256+
| - content: foo/bar => java.util.Map
257+
| generics:
258+
| - java.lang.String
259+
| - java.util.Collection<{package-name}.String>
260+
""".trimMargin()
261+
262+
// when:
263+
val mapping = reader.read (yaml)
264+
val mappings = converter.convert (mapping)
265+
266+
// then:
267+
val type = mappings.first() as ResponseTypeMapping
268+
type.contentType shouldBe "foo/bar"
269+
val tm = type.mapping
270+
tm.sourceTypeName.shouldBeNull()
271+
tm.sourceTypeFormat.shouldBeNull()
272+
tm.targetTypeName shouldBe "java.util.Map"
273+
tm.genericTypes.size shouldBe 2
274+
tm.genericTypes[0].typeName shouldBe "java.lang.String"
275+
276+
val coll = tm.genericTypes[1]
277+
coll.typeName shouldBe "java.util.Collection"
278+
coll.genericTypes[0].typeName shouldBe "generated.String"
279+
}
244280
})

0 commit comments

Comments
 (0)