Skip to content

Commit 2fd1ee6

Browse files
authored
Added ANTLR. Fix Issue #20960 (#21230)
* Added ANTLR. Started work on issue 20960 * Ran generation scripts * Excluded ANTLR generated files from JavaDoc generation * Whitespace fix
1 parent 6344bfa commit 2fd1ee6

File tree

16 files changed

+3374
-46
lines changed

16 files changed

+3374
-46
lines changed

modules/openapi-generator/pom.xml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,43 @@
145145
<artifactId>maven-release-plugin</artifactId>
146146
<version>${maven-release-plugin.version}</version>
147147
</plugin>
148+
<plugin>
149+
<groupId>org.antlr</groupId>
150+
<artifactId>antlr4-maven-plugin</artifactId>
151+
<version>4.13.2</version>
152+
<executions>
153+
<execution>
154+
<phase>generate-test-sources</phase>
155+
<goals>
156+
<goal>antlr4</goal>
157+
</goals>
158+
</execution>
159+
</executions>
160+
<configuration>
161+
<sourceDirectory>${basedir}/src/test/antlr4</sourceDirectory>
162+
<libDirectory>${basedir}/src/test/antlr4/imports</libDirectory>
163+
<outputDirectory>${project.build.directory}/generated-test-sources/antlr4</outputDirectory>
164+
</configuration>
165+
</plugin>
166+
<plugin>
167+
<groupId>org.codehaus.mojo</groupId>
168+
<artifactId>build-helper-maven-plugin</artifactId>
169+
<version>3.6.0</version>
170+
<executions>
171+
<execution>
172+
<id>add-test-source</id>
173+
<phase>generate-test-sources</phase>
174+
<goals>
175+
<goal>add-test-source</goal>
176+
</goals>
177+
<configuration>
178+
<sources>
179+
<source>${project.build.directory}/generated-test-sources/antlr4</source>
180+
</sources>
181+
</configuration>
182+
</execution>
183+
</executions>
184+
</plugin>
148185
</plugins>
149186
</build>
150187
<profiles>
@@ -464,6 +501,12 @@
464501
<artifactId>snakeyaml</artifactId>
465502
<version>${snakeyaml.version}</version>
466503
</dependency>
504+
<dependency>
505+
<groupId>org.antlr</groupId>
506+
<artifactId>antlr4-runtime</artifactId>
507+
<version>4.13.2</version>
508+
<scope>test</scope>
509+
</dependency>
467510
</dependencies>
468511
<repositories>
469512
<repository>

modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -202,14 +202,14 @@ import {{packageName}}.infrastructure.ITransformForStorage
202202
{{#-first}}
203203
// a set of all properties/fields (JSON key names)
204204
{{/-first}}
205-
openapiFields.add("{{baseName}}")
205+
openapiFields.add("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")
206206
{{/allVars}}
207207

208208
{{#requiredVars}}
209209
{{#-first}}
210210
// a set of required properties/fields (JSON key names)
211211
{{/-first}}
212-
openapiRequiredFields.add("{{baseName}}")
212+
openapiRequiredFields.add("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")
213213
{{/requiredVars}}
214214
}
215215

@@ -248,26 +248,26 @@ import {{packageName}}.infrastructure.ITransformForStorage
248248
{{#items.isModel}}
249249
{{#required}}
250250
// ensure the json data is an array
251-
if (!jsonObj.get("{{{baseName}}}").isJsonArray) {
252-
throw IllegalArgumentException(String.format("Expected the field `{{{baseName}}}` to be an array in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString()))
251+
if (!jsonObj.get("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}").isJsonArray) {
252+
throw IllegalArgumentException(String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be an array in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString()))
253253
}
254254

255255
// validate the required field `{{{baseName}}}` (array)
256-
for (i in 0 until jsonObj.getAsJsonArray("{{{baseName}}}").size()) {
257-
{{{items.dataType}}}.validateJsonElement(jsonObj.getAsJsonArray("{{{baseName}}}").get(i))
256+
for (i in 0 until jsonObj.getAsJsonArray("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}").size()) {
257+
{{{items.dataType}}}.validateJsonElement(jsonObj.getAsJsonArray("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}").get(i))
258258
}
259259
{{/required}}
260260
{{^required}}
261-
if (jsonObj["{{{baseName}}}"] != null && !jsonObj["{{{baseName}}}"].isJsonNull) {
262-
if (jsonObj.getAsJsonArray("{{{baseName}}}") != null) {
261+
if (jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"] != null && !jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonNull) {
262+
if (jsonObj.getAsJsonArray("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}") != null) {
263263
// ensure the json data is an array
264-
require(jsonObj["{{{baseName}}}"].isJsonArray) {
265-
String.format("Expected the field `{{{baseName}}}` to be an array in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
264+
require(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonArray) {
265+
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be an array in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
266266
}
267267

268268
// validate the optional field `{{{baseName}}}` (array)
269-
for (i in 0 until jsonObj.getAsJsonArray("{{{baseName}}}").size()) {
270-
{{{items.dataType}}}.validateJsonElement(jsonObj.getAsJsonArray("{{{baseName}}}").get(i))
269+
for (i in 0 until jsonObj.getAsJsonArray("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}").size()) {
270+
{{{items.dataType}}}.validateJsonElement(jsonObj.getAsJsonArray("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}").get(i))
271271
}
272272
}
273273
}
@@ -276,78 +276,78 @@ import {{packageName}}.infrastructure.ITransformForStorage
276276
{{^items.isModel}}
277277
{{^required}}
278278
// ensure the optional json data is an array if present
279-
if (jsonObj["{{{baseName}}}"] != null && !jsonObj["{{{baseName}}}"].isJsonNull) {
280-
require(jsonObj["{{{baseName}}}"].isJsonArray()) {
281-
String.format("Expected the field `{{{baseName}}}` to be an array in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
279+
if (jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"] != null && !jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonNull) {
280+
require(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonArray()) {
281+
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be an array in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
282282
}
283283
}
284284
{{/required}}
285285
{{#required}}
286286
// ensure the required json array is present
287-
requireNotNull(jsonObj["{{{baseName}}}"]) {
288-
"Expected the field `{{{baseName}}}` to be an array in the JSON string but got `null`"
287+
requireNotNull(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"]) {
288+
"Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be an array in the JSON string but got `null`"
289289
}
290-
require(jsonObj["{{{baseName}}}"].isJsonArray()) {
291-
String.format("Expected the field `{{{baseName}}}` to be an array in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
290+
require(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonArray()) {
291+
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be an array in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
292292
}
293293
{{/required}}
294294
{{/items.isModel}}
295295
{{/isArray}}
296296
{{^isContainer}}
297297
{{#isString}}
298298
{{#notRequiredOrIsNullable}}
299-
if (jsonObj["{{{baseName}}}"] != null && !jsonObj["{{{baseName}}}"].isJsonNull) {
300-
require(jsonObj.get("{{{baseName}}}").isJsonPrimitive) {
301-
String.format("Expected the field `{{{baseName}}}` to be a primitive type in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
299+
if (jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"] != null && !jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonNull) {
300+
require(jsonObj.get("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}").isJsonPrimitive) {
301+
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be a primitive type in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
302302
}
303303
}
304304
{{/notRequiredOrIsNullable}}
305305
{{^notRequiredOrIsNullable}}
306-
require(jsonObj["{{{baseName}}}"].isJsonPrimitive) {
307-
String.format("Expected the field `{{{baseName}}}` to be a primitive type in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
306+
require(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonPrimitive) {
307+
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be a primitive type in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
308308
}
309309
{{/notRequiredOrIsNullable}}
310310
{{/isString}}
311311
{{#isModel}}
312312
{{#required}}
313313
// validate the required field `{{{baseName}}}`
314-
{{{dataType}}}.validateJsonElement(jsonObj["{{{baseName}}}"])
314+
{{{dataType}}}.validateJsonElement(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"])
315315
{{/required}}
316316
{{^required}}
317317
// validate the optional field `{{{baseName}}}`
318-
if (jsonObj["{{{baseName}}}"] != null && !jsonObj["{{{baseName}}}"].isJsonNull) {
319-
{{{dataType}}}.validateJsonElement(jsonObj["{{{baseName}}}"])
318+
if (jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"] != null && !jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonNull) {
319+
{{{dataType}}}.validateJsonElement(jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"])
320320
}
321321
{{/required}}
322322
{{/isModel}}
323323
{{#isEnum}}
324324
{{#required}}
325325
// validate the required field `{{{baseName}}}`
326-
require({{{datatypeWithEnum}}}.values().any { it.value == jsonObj["{{{baseName}}}"].asString }) {
327-
String.format("Expected the field `{{{baseName}}}` to be valid `{{{datatypeWithEnum}}}` enum value in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
326+
require({{{datatypeWithEnum}}}.values().any { it.value == jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].asString }) {
327+
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be valid `{{{datatypeWithEnum}}}` enum value in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
328328
}
329329
{{/required}}
330330
{{^required}}
331331
// validate the optional field `{{{baseName}}}`
332-
if (jsonObj["{{{baseName}}}"] != null && !jsonObj["{{{baseName}}}"].isJsonNull) {
333-
require({{{datatypeWithEnum}}}.values().any { it.value == jsonObj["{{{baseName}}}"].asString }) {
334-
String.format("Expected the field `{{{baseName}}}` to be valid `{{{datatypeWithEnum}}}` enum value in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
332+
if (jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"] != null && !jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonNull) {
333+
require({{{datatypeWithEnum}}}.values().any { it.value == jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].asString }) {
334+
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be valid `{{{datatypeWithEnum}}}` enum value in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
335335
}
336336
}
337337
{{/required}}
338338
{{/isEnum}}
339339
{{#isEnumRef}}
340340
{{#required}}
341341
// validate the required field `{{{baseName}}}`
342-
require({{{dataType}}}.values().any { it.value == jsonObj["{{{baseName}}}"].asString }) {
343-
String.format("Expected the field `{{{baseName}}}` to be valid `{{{dataType}}}` enum value in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
342+
require({{{dataType}}}.values().any { it.value == jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].asString }) {
343+
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be valid `{{{dataType}}}` enum value in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
344344
}
345345
{{/required}}
346346
{{^required}}
347347
// validate the optional field `{{{baseName}}}`
348-
if (jsonObj["{{{baseName}}}"] != null && !jsonObj["{{{baseName}}}"].isJsonNull) {
349-
require({{{dataType}}}.values().any { it.value == jsonObj["{{{baseName}}}"].asString }) {
350-
String.format("Expected the field `{{{baseName}}}` to be valid `{{{dataType}}}` enum value in the JSON string but got `%s`", jsonObj["{{{baseName}}}"].toString())
348+
if (jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"] != null && !jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].isJsonNull) {
349+
require({{{dataType}}}.values().any { it.value == jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].asString }) {
350+
String.format("Expected the field `{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}` to be valid `{{{dataType}}}` enum value in the JSON string but got `%s`", jsonObj["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"].toString())
351351
}
352352
}
353353
{{/required}}

modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/data_class_opt_var.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
/* {{{.}}} */
33
{{/description}}
44
{{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}}
5-
@field:com.fasterxml.jackson.annotation.JsonProperty("{{{baseName}}}")
5+
@field:com.fasterxml.jackson.annotation.JsonProperty("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")
66
{{>modelMutable}} {{{name}}}: {{#isEnum}}{{{classname}}}.{{{nameInPascalCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{{defaultValue}}}{{^defaultValue}}null{{/defaultValue}}

modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin5/data_class_req_var.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
/* {{{.}}} */
33
{{/description}}
44
{{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}}
5-
@field:com.fasterxml.jackson.annotation.JsonProperty("{{{baseName}}}")
5+
@field:com.fasterxml.jackson.annotation.JsonProperty("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")
66
{{>modelMutable}} {{{name}}}: {{#isEnum}}{{{classname}}}.{{{nameInPascalCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}}?{{/isNullable}}{{#defaultValue}} = {{^isNumber}}{{{defaultValue}}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}}

modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/data_class_opt_var.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
/* {{{.}}} */
33
{{/description}}
44
{{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}}
5-
@field:com.fasterxml.jackson.annotation.JsonProperty("{{{baseName}}}")
5+
@field:com.fasterxml.jackson.annotation.JsonProperty("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")
66
{{>modelMutable}} {{{name}}}: {{#isEnum}}{{{classname}}}.{{{nameInPascalCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{{defaultValue}}}{{^defaultValue}}null{{/defaultValue}}

modules/openapi-generator/src/main/resources/kotlin-server/libraries/javalin6/data_class_req_var.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
/* {{{.}}} */
33
{{/description}}
44
{{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}}
5-
@field:com.fasterxml.jackson.annotation.JsonProperty("{{{baseName}}}")
5+
@field:com.fasterxml.jackson.annotation.JsonProperty("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")
66
{{>modelMutable}} {{{name}}}: {{#isEnum}}{{{classname}}}.{{{nameInPascalCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}}?{{/isNullable}}{{#defaultValue}} = {{^isNumber}}{{{defaultValue}}}{{/isNumber}}{{#isNumber}}{{{dataType}}}("{{{defaultValue}}}"){{/isNumber}}{{/defaultValue}}

modules/openapi-generator/src/main/resources/kotlin-server/libraries/jaxrs-spec/data_class_opt_var.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
/* {{{.}}} */
33
{{/description}}
44

5-
@JsonProperty("{{{baseName}}}")
5+
@JsonProperty("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")
66
{{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}} {{>modelMutable}} {{{name}}}: {{#isEnum}}{{classname}}.{{nameInPascalCase}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{{defaultValue}}}{{^defaultValue}}null{{/defaultValue}}

modules/openapi-generator/src/main/resources/kotlin-server/libraries/jaxrs-spec/data_class_req_var.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
/* {{{.}}} */
33
{{/description}}
44

5-
@JsonProperty("{{{baseName}}}")
5+
@JsonProperty("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")
66
{{#useBeanValidation}}{{>beanValidation}}{{>beanValidationModel}}{{/useBeanValidation}} {{>modelMutable}} {{{name}}}: {{#isEnum}}{{classname}}.{{nameInPascalCase}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}

0 commit comments

Comments
 (0)