Skip to content
This repository was archived by the owner on Mar 16, 2025. It is now read-only.

Commit 37bbd0c

Browse files
committed
write additional annotation
1 parent 4f3fc9e commit 37bbd0c

File tree

6 files changed

+72
-7
lines changed

6 files changed

+72
-7
lines changed

src/main/groovy/com/github/hauner/openapi/core/converter/ApiConverter.groovy

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.github.hauner.openapi.core.converter.wrapper.MultiDataTypeWrapper
2121
import com.github.hauner.openapi.core.converter.wrapper.ResultDataTypeWrapper
2222
import com.github.hauner.openapi.core.converter.wrapper.SingleDataTypeWrapper
2323
import com.github.hauner.openapi.core.framework.Framework
24+
import com.github.hauner.openapi.core.model.datatypes.AnnotationDataType
2425
import com.github.hauner.openapi.core.model.parameters.Parameter as ModelParameter
2526
import com.github.hauner.openapi.core.converter.mapping.AddParameterTypeMapping
2627
import com.github.hauner.openapi.core.converter.mapping.Mapping
@@ -240,6 +241,17 @@ class ApiConverter {
240241
genericTypes: tt.genericNames
241242
)
242243

244+
def annotationType = null
245+
if (mapping.annotation) {
246+
def at = new TargetType(mapping.annotation.type, [])
247+
248+
annotationType = new AnnotationDataType(
249+
type: at.name,
250+
pkg: at.pkg,
251+
parameters: mapping.annotation.parameters
252+
)
253+
}
254+
243255
def parameter = new Parameter () {
244256

245257
String getIn () {
@@ -263,7 +275,7 @@ class ApiConverter {
263275
}
264276
}
265277

266-
framework.createAdditionalParameter (parameter, addType)
278+
framework.createAdditionalParameter (parameter, addType, annotationType)
267279
}
268280

269281
private ModelRequestBody createRequestBody (String contentType, SchemaInfo info, boolean required, DataTypes dataTypes) {

src/main/groovy/com/github/hauner/openapi/core/framework/Framework.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.github.hauner.openapi.core.framework
1818

1919
import com.github.hauner.openapi.core.model.RequestBody
20+
import com.github.hauner.openapi.core.model.datatypes.AnnotationDataType
2021
import com.github.hauner.openapi.core.model.parameters.Parameter
2122
import com.github.hauner.openapi.core.model.datatypes.DataType
2223
import com.github.hauner.openapi.core.parser.Parameter as ParserParameter
@@ -78,7 +79,8 @@ interface Framework {
7879
* @param dataType data type of the parameter
7980
* @return an additional {@link Parameter}
8081
*/
81-
Parameter createAdditionalParameter(ParserParameter parameter, DataType dataType)
82+
Parameter createAdditionalParameter(ParserParameter parameter, DataType dataType,
83+
AnnotationDataType annotationDataType)
8284

8385
/**
8486
* create a model request body.

src/main/groovy/com/github/hauner/openapi/core/framework/FrameworkBase.groovy

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.github.hauner.openapi.core.framework
1818

1919
import com.github.hauner.openapi.core.model.RequestBody
20+
import com.github.hauner.openapi.core.model.datatypes.AnnotationDataType
2021
import com.github.hauner.openapi.core.model.parameters.AdditionalParameter
2122
import com.github.hauner.openapi.core.model.parameters.CookieParameter
2223
import com.github.hauner.openapi.core.model.parameters.HeaderParameter
@@ -82,11 +83,14 @@ class FrameworkBase implements Framework {
8283
}
8384

8485
@Override
85-
Parameter createAdditionalParameter (ParserParameter parameter, DataType dataType) {
86+
Parameter createAdditionalParameter (ParserParameter parameter, DataType dataType,
87+
AnnotationDataType annotationDataType = null) {
88+
8689
new AdditionalParameter (
8790
name: parameter.name,
8891
required: parameter.required,
89-
dataType: dataType)
92+
dataType: dataType,
93+
annotationDataType: annotationDataType)
9094
}
9195

9296
@Override

src/main/groovy/com/github/hauner/openapi/core/model/datatypes/AnnotationDataType.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class AnnotationDataType implements DataType {
2929

3030
@Override
3131
String getName () {
32-
"@$type"
32+
type
3333
}
3434

3535
@Override

src/main/groovy/com/github/hauner/openapi/core/writer/java/MethodWriter.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ class MethodWriter {
113113
parameterAnnotationWriter.write (annotation, parameter)
114114

115115
if (parameter instanceof AdditionalParameter && parameter.hasAdditionalAnnotation ()) {
116-
annotation.write (" ${parameter.annotationDataType.name}${parameter.annotationDataType.parameters}")
116+
annotation.write (" @${parameter.annotationDataType.name}${parameter.annotationDataType.parameters}")
117117
}
118118

119119
annotation.toString ()

src/test/groovy/com/github/hauner/openapi/core/converter/ApiConverterParameterSpec.groovy

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import com.github.hauner.openapi.core.converter.mapping.AddParameterTypeMapping
2020
import com.github.hauner.openapi.core.converter.mapping.EndpointTypeMapping
2121
import com.github.hauner.openapi.core.converter.mapping.TypeMapping
2222
import com.github.hauner.openapi.core.framework.FrameworkBase
23+
import com.github.hauner.openapi.core.model.parameters.AdditionalParameter
24+
import io.openapiprocessor.core.converter.mapping.Annotation
2325
import io.openapiprocessor.core.converter.mapping.UnknownParameterTypeException
2426
import spock.lang.Ignore
2527
import spock.lang.Specification
@@ -236,6 +238,50 @@ paths:
236238
!request.withAnnotation ()
237239
}
238240

241+
void "adds additional request parameter with annotation from endpoint mapping" () {
242+
def openApi = parse (
243+
"""\
244+
openapi: 3.0.2
245+
info:
246+
title: test additional parameter annotation
247+
version: 1.0.0
248+
249+
paths:
250+
/foo:
251+
get:
252+
responses:
253+
'204':
254+
description: empty
255+
"""
256+
)
257+
258+
def options = new ApiOptions(packageName: 'pkg', typeMappings: [
259+
new EndpointTypeMapping('/foo', [
260+
new AddParameterTypeMapping (
261+
'foo', new TypeMapping (
262+
null,
263+
'java.lang.String'),
264+
new Annotation("bar.Bar", "(anything)"))
265+
])
266+
])
267+
268+
when:
269+
def api = new ApiConverter (options, new FrameworkBase ())
270+
.convert (openApi)
271+
272+
then:
273+
def itf = api.interfaces.first ()
274+
def ep = itf.endpoints.first ()
275+
def foo = ep.parameters[0] as AdditionalParameter
276+
277+
foo.name == 'foo'
278+
foo.dataType.name == 'String'
279+
foo.dataType.packageName == 'java.lang'
280+
foo.annotationDataType?.name == 'Bar'
281+
foo.annotationDataType?.packageName == 'bar'
282+
foo.annotationDataType?.parameters == '(anything)'
283+
}
284+
239285
@Ignore("the openapi parser ignores parameters with unknown types")
240286
void "throws on unknown parameter"() {
241287
def openApi = parse (
@@ -263,7 +309,8 @@ paths:
263309
""")
264310

265311
when:
266-
new ApiConverter ().convert (openApi)
312+
new ApiConverter (new ApiOptions(), new FrameworkBase ())
313+
.convert (openApi)
267314

268315
then:
269316
def e = thrown (UnknownParameterTypeException)

0 commit comments

Comments
 (0)