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

Commit 4f3116f

Browse files
committed
Merge branch 'mapping-target-parser2'
2 parents 5c0a152 + ff6096c commit 4f3116f

File tree

23 files changed

+706
-43
lines changed

23 files changed

+706
-43
lines changed

build.gradle

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
plugins {
2+
id 'antlr'
23
id 'jacoco'
34
id 'groovy'
45
id 'java-library'
@@ -18,7 +19,6 @@ java {
1819
targetCompatibility = JavaVersion.VERSION_1_8
1920
}
2021

21-
2222
ext {
2323
processorApiVersion = '1.1.0'
2424
jacksonVersion = '2.11.3'
@@ -27,7 +27,6 @@ ext {
2727
bintrayKey = project.findProperty ('BINTRAY_KEY') ?: System.getenv ("BINTRAY_KEY") ?: 'n/a'
2828
}
2929

30-
3130
repositories {
3231
mavenCentral()
3332
jcenter()
@@ -66,6 +65,19 @@ testSets {
6665

6766
check.dependsOn testInt
6867

68+
sourceSets {
69+
main {
70+
java {
71+
srcDir 'build/antlr'
72+
}
73+
}
74+
}
75+
76+
generateGrammarSource {
77+
arguments += ['-package', 'io.openapiprocessor.core.processor.mapping.v2.parser']
78+
outputDirectory = new File("$buildDir/antlr/io/openapiprocessor/core/processor/mapping/v2/parser".toString())
79+
}
80+
6981
compileTestGroovy {
7082
dependsOn 'compileKotlin'
7183
classpath += files(compileKotlin.destinationDir)
@@ -76,6 +88,8 @@ compileKotlin {
7688
kotlinOptions.jvmTarget = "1.8"
7789
}
7890

91+
compileKotlin.dependsOn generateGrammarSource
92+
7993
compileTestKotlin {
8094
kotlinOptions.jvmTarget = "1.8"
8195
}
@@ -84,6 +98,8 @@ dependencies {
8498
components.all(JacksonPlatformRule)
8599
components.all(KotlinPlatformRule)
86100

101+
antlr 'org.antlr:antlr4:4.8'
102+
87103
compileOnly "io.openapiprocessor:openapi-processor-api:$processorApiVersion"
88104
implementation "com.fasterxml.jackson.module:jackson-module-kotlin:$jacksonVersion"
89105

@@ -108,6 +124,7 @@ dependencies {
108124

109125
testImplementation 'org.codehaus.groovy:groovy:2.5.12'
110126
testImplementation 'org.codehaus.groovy:groovy-nio:2.5.12'
127+
111128
testImplementation "io.openapiprocessor:openapi-processor-api:$processorApiVersion"
112129
testImplementation ('io.openapiprocessor:openapi-processor-test:1.0.1') {
113130
exclude group: 'com.google.guava'

src/main/antlr/To.g4

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
grammar To;
2+
3+
/*
4+
* Parser Rules
5+
*/
6+
7+
to
8+
: annotationType? toType
9+
;
10+
11+
annotationType
12+
: type AnnotationAnyArguments?
13+
;
14+
15+
toType
16+
: type typeArguments?
17+
;
18+
19+
type
20+
: packageName '.' typeName
21+
| typeName
22+
;
23+
24+
packageName
25+
: Identifier
26+
| packageName '.' Identifier
27+
;
28+
29+
typeName
30+
: Identifier
31+
;
32+
33+
typeArguments
34+
: '<' typeArgumentList '>'
35+
;
36+
37+
typeArgumentList
38+
: typeArgument (',' typeArgument)*
39+
;
40+
41+
typeArgument
42+
: type
43+
| '?'
44+
| .*?
45+
;
46+
47+
48+
/*
49+
* Lexer Rules
50+
*/
51+
52+
fragment JavaLetter
53+
: [a-zA-Z$_]
54+
;
55+
56+
fragment JavaLetterOrDigit
57+
: [a-zA-Z0-9$_]
58+
;
59+
60+
AnnotationAnyArguments
61+
: '(' .*? ')'
62+
;
63+
64+
Identifier
65+
: JavaLetter JavaLetterOrDigit*
66+
;
67+
68+
Whitespace
69+
: ' ' -> skip
70+
;
71+

src/main/kotlin/io/openapiprocessor/core/converter/ApiConverter.kt

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,17 @@
1616

1717
package io.openapiprocessor.core.converter
1818

19-
import io.openapiprocessor.core.converter.mapping.MappingFinder
19+
import io.openapiprocessor.core.converter.mapping.*
2020
import io.openapiprocessor.core.converter.wrapper.MultiDataTypeWrapper
2121
import io.openapiprocessor.core.converter.wrapper.ResultDataTypeWrapper
2222
import io.openapiprocessor.core.converter.wrapper.SingleDataTypeWrapper
2323
import io.openapiprocessor.core.framework.Framework
2424
import io.openapiprocessor.core.model.parameters.Parameter as ModelParameter
25-
import io.openapiprocessor.core.converter.mapping.AddParameterTypeMapping
26-
import io.openapiprocessor.core.converter.mapping.TypeMapping
2725
import io.openapiprocessor.core.model.RequestBody as ModelRequestBody
28-
import io.openapiprocessor.core.model.datatypes.MappedDataType
29-
import io.openapiprocessor.core.model.datatypes.NoneDataType
30-
import io.openapiprocessor.core.model.datatypes.ObjectDataType
3126
import io.openapiprocessor.core.model.Response as ModelResponse
32-
import io.openapiprocessor.core.model.datatypes.DataType
3327
import io.openapiprocessor.core.parser.OpenApi
34-
import io.openapiprocessor.core.converter.mapping.UnknownDataTypeException
35-
import io.openapiprocessor.core.converter.mapping.UnknownParameterTypeException
3628
import io.openapiprocessor.core.model.*
29+
import io.openapiprocessor.core.model.datatypes.*
3730
import io.openapiprocessor.core.parser.Operation
3831
import io.openapiprocessor.core.parser.Parameter
3932
import io.openapiprocessor.core.parser.RefResolver
@@ -216,6 +209,17 @@ class ApiConverter(
216209
false
217210
)
218211

212+
var annotationType: AnnotationDataType? = null
213+
if (mapping.annotation != null) {
214+
val at = TargetType(mapping.annotation.type, emptyList())
215+
216+
annotationType = AnnotationDataType(
217+
at.getName(),
218+
at.getPkg(),
219+
mapping.annotation.parameters
220+
)
221+
}
222+
219223
val parameter = object: Parameter {
220224

221225
override fun getIn(): String {
@@ -239,7 +243,7 @@ class ApiConverter(
239243
}
240244
}
241245

242-
return framework.createAdditionalParameter (parameter, addType)
246+
return framework.createAdditionalParameter (parameter, addType, annotationType)
243247
}
244248

245249
private fun createRequestBody(contentType: String, info: SchemaInfo, required: Boolean, dataTypes: DataTypes): ModelRequestBody {

src/main/kotlin/io/openapiprocessor/core/converter/mapping/AddParameterTypeMapping.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@ class AddParameterTypeMapping(
3232
/**
3333
* additional parameter type mapping.
3434
*/
35-
val mapping: TypeMapping
35+
val mapping: TypeMapping,
36+
37+
/**
38+
* additional annotation of parameter.
39+
*/
40+
val annotation: Annotation? = null
3641

3742
): Mapping {
3843

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright © 2020 https://github.com/openapi-processor/openapi-processor-core
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.core.converter.mapping
7+
8+
/**
9+
* (additional) annotation from mapping
10+
*/
11+
class Annotation(
12+
13+
/**
14+
* additional annotation of parameter.
15+
*/
16+
val type: String,
17+
18+
/**
19+
* all parameters of the annotation (pass through).
20+
*/
21+
val parameters: String? = null
22+
23+
)

src/main/kotlin/io/openapiprocessor/core/framework/Framework.kt

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.openapiprocessor.core.framework
1818

1919
import io.openapiprocessor.core.model.RequestBody
20+
import io.openapiprocessor.core.model.datatypes.AnnotationDataType
2021
import io.openapiprocessor.core.model.parameters.Parameter
2122
import io.openapiprocessor.core.model.datatypes.DataType
2223
import io.openapiprocessor.core.parser.Parameter as ParserParameter
@@ -30,7 +31,7 @@ interface Framework {
3031
* create a model query parameter.
3132
*
3233
* @param parameter an OpenAPI query parameter
33-
* @param DataType data type of the parameter
34+
* @param dataType data type of the parameter
3435
* @return a query {@link Parameter}
3536
*/
3637
fun createQueryParameter(parameter: ParserParameter, dataType: DataType): Parameter
@@ -39,7 +40,7 @@ interface Framework {
3940
* create a model header parameter.
4041
*
4142
* @param parameter an OpenAPI header parameter
42-
* @param DataType data type of the parameter
43+
* @param dataType data type of the parameter
4344
* @return a header {@link Parameter}
4445
*/
4546
fun createHeaderParameter(parameter: ParserParameter, dataType: DataType): Parameter
@@ -48,7 +49,7 @@ interface Framework {
4849
* create a model cookie parameter.
4950
*
5051
* @param parameter an OpenAPI cookie parameter
51-
* @param DataType data type of the parameter
52+
* @param dataType data type of the parameter
5253
* @return a cookie {@link Parameter}
5354
*/
5455
fun createCookieParameter(parameter: ParserParameter, dataType: DataType): Parameter
@@ -57,7 +58,7 @@ interface Framework {
5758
* create a model path parameter.
5859
*
5960
* @param parameter an OpenAPI path parameter
60-
* @param DataType data type of the parameter
61+
* @param dataType data type of the parameter
6162
* @return a path {@link Parameter}
6263
*/
6364
fun createPathParameter(parameter: ParserParameter, dataType: DataType): Parameter
@@ -66,7 +67,7 @@ interface Framework {
6667
* create a model multipart parameter.
6768
*
6869
* @param parameter an OpenAPI multipart parameter
69-
* @param DataType data type of the parameter
70+
* @param dataType data type of the parameter
7071
* @return a multipart {@link Parameter}
7172
*/
7273
fun createMultipartParameter(parameter: ParserParameter, dataType: DataType): Parameter
@@ -75,16 +76,19 @@ interface Framework {
7576
* create a model additional parameter.
7677
*
7778
* @param parameter an OpenAPI additional parameter
78-
* @param DataType data type of the parameter
79+
* @param dataType data type of the parameter
80+
* @param annotationDataType additional annotation
7981
* @return an additional {@link Parameter}
8082
*/
81-
fun createAdditionalParameter(parameter: ParserParameter, dataType: DataType): Parameter
83+
fun createAdditionalParameter(parameter: ParserParameter, dataType: DataType,
84+
annotationDataType: AnnotationDataType? = null): Parameter
8285

8386
/**
8487
* create a model request body.
8588
*
86-
* @param parameter an OpenAPI additional parameter
87-
* @param DataType data type of the parameter
89+
* @param contentType an OpenAPI request body content type
90+
* @param required the request body is required
91+
* @param dataType data type of the request body
8892
* @return an additional {@link RequestBody}
8993
*/
9094
fun createRequestBody(contentType: String, required: Boolean, dataType: DataType): RequestBody

src/main/kotlin/io/openapiprocessor/core/framework/FrameworkBase.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.openapiprocessor.core.framework
1818

1919
import io.openapiprocessor.core.model.RequestBody
20+
import io.openapiprocessor.core.model.datatypes.AnnotationDataType
2021
import io.openapiprocessor.core.model.parameters.AdditionalParameter
2122
import io.openapiprocessor.core.model.parameters.CookieParameter
2223
import io.openapiprocessor.core.model.parameters.HeaderParameter
@@ -61,9 +62,11 @@ open class FrameworkBase: Framework {
6162
parameter.isRequired(), parameter.isDeprecated())
6263
}
6364

64-
override fun createAdditionalParameter(parameter: ParserParameter, dataType: DataType): Parameter {
65+
override fun createAdditionalParameter(parameter: ParserParameter, dataType: DataType,
66+
annotationDataType: AnnotationDataType?): Parameter {
67+
6568
return AdditionalParameter(parameter.getName(), dataType,
66-
parameter.isRequired(), false)
69+
annotationDataType, parameter.isRequired(), false)
6770
}
6871

6972
override fun createRequestBody(contentType: String, required: Boolean, dataType: DataType): RequestBody {
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Copyright © 2020 https://github.com/openapi-processor/openapi-processor-core
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.core.model.datatypes
7+
8+
/**
9+
* additional annotation type.
10+
*/
11+
class AnnotationDataType(
12+
private val type: String,
13+
private val pkg: String,
14+
private val parameters: String?
15+
): DataTypeBase() {
16+
17+
override fun getName(): String {
18+
return type
19+
}
20+
21+
override fun getPackageName(): String {
22+
return pkg
23+
}
24+
25+
fun getParameters(): String {
26+
return parameters ?: ""
27+
}
28+
29+
}

src/main/kotlin/io/openapiprocessor/core/model/parameters/AdditionalParameter.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package io.openapiprocessor.core.model.parameters
1818

19+
import io.openapiprocessor.core.model.datatypes.AnnotationDataType
1920
import io.openapiprocessor.core.model.datatypes.DataType
2021

2122
/**
@@ -27,6 +28,7 @@ class AdditionalParameter(
2728

2829
name: String,
2930
dataType: DataType,
31+
val annotationDataType: AnnotationDataType? = null,
3032
required: Boolean = false,
3133
deprecated: Boolean = false
3234

@@ -35,4 +37,7 @@ class AdditionalParameter(
3537
override val withAnnotation: Boolean
3638
get() = false
3739

40+
val additionalAnnotation: Boolean
41+
get() = annotationDataType != null
42+
3843
}

0 commit comments

Comments
 (0)