Skip to content

Commit 5743a36

Browse files
committed
Merging with main swagger-codegen-generators repo
2 parents 8d1a2b2 + 06863bf commit 5743a36

File tree

106 files changed

+3145
-328
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+3145
-328
lines changed

pom.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<groupId>io.swagger.codegen.v3</groupId>
1414
<artifactId>swagger-codegen-generators</artifactId>
15-
<version>1.0.25-SNAPSHOT</version>
15+
<version>1.0.28-SNAPSHOT</version>
1616
<packaging>jar</packaging>
1717

1818
<build>
@@ -252,10 +252,10 @@
252252
</dependency>
253253
</dependencies>
254254
<properties>
255-
<swagger-codegen-version>3.0.25-SNAPSHOT</swagger-codegen-version>
256-
<swagger-parser-version>2.0.23</swagger-parser-version>
257-
<swagger-core-version>2.1.4</swagger-core-version>
258-
<jackson-version>2.10.3</jackson-version>
255+
<swagger-codegen-version>3.0.28-SNAPSHOT</swagger-codegen-version>
256+
<swagger-parser-version>2.0.27</swagger-parser-version>
257+
<swagger-core-version>2.1.10</swagger-core-version>
258+
<jackson-version>2.12.1</jackson-version>
259259
<scala-version>2.11.1</scala-version>
260260
<felix-version>3.3.0</felix-version>
261261
<commons-io-version>2.4</commons-io-version>

src/main/java/io/swagger/codegen/v3/generators/DefaultCodegenConfig.java

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -396,21 +396,25 @@ private String findEnumName(int truncateIdx, Object value) {
396396
}
397397

398398
/**
399-
* Returns the common prefix of variables for enum naming
399+
* Returns the common prefix of variables for enum naming if
400+
* two or more variables are present.
400401
*
401402
* @param vars List of variable names
402403
* @return the common prefix for naming
403404
*/
404405
public String findCommonPrefixOfVars(List<Object> vars) {
405-
try {
406-
String[] listStr = vars.toArray(new String[vars.size()]);
407-
String prefix = StringUtils.getCommonPrefix(listStr);
408-
// exclude trailing characters that should be part of a valid variable
409-
// e.g. ["status-on", "status-off"] => "status-" (not "status-o")
410-
return prefix.replaceAll("[a-zA-Z0-9]+\\z", "");
411-
} catch (ArrayStoreException e) {
412-
return "";
406+
if (vars.size() > 1) {
407+
try {
408+
String[] listStr = vars.toArray(new String[vars.size()]);
409+
String prefix = StringUtils.getCommonPrefix(listStr);
410+
// exclude trailing characters that should be part of a valid variable
411+
// e.g. ["status-on", "status-off"] => "status-" (not "status-o")
412+
return prefix.replaceAll("[a-zA-Z0-9]+\\z", "");
413+
} catch (ArrayStoreException e) {
414+
// do nothing, just return default value
415+
}
413416
}
417+
return "";
414418
}
415419

416420
/**
@@ -1354,12 +1358,7 @@ public CodegenModel fromModel(String name, Schema schema, Map<String, Schema> al
13541358
addParentContainer(codegenModel, name, schema);
13551359
}
13561360
else if (schema instanceof MapSchema) {
1357-
codegenModel.getVendorExtensions().put(CodegenConstants.IS_MAP_CONTAINER_EXT_NAME, Boolean.TRUE);
1358-
codegenModel.getVendorExtensions().put(IS_CONTAINER_EXT_NAME, Boolean.TRUE);
1359-
addParentContainer(codegenModel, name, schema);
1360-
if (hasSchemaProperties(schema) || hasTrueAdditionalProperties(schema)) {
1361-
addAdditionPropertiesToCodeGenModel(codegenModel, schema);
1362-
}
1361+
processMapSchema(codegenModel, name, schema);
13631362

13641363
}
13651364
else if (schema instanceof ComposedSchema) {
@@ -1489,6 +1488,15 @@ else if (schema instanceof ComposedSchema) {
14891488
return codegenModel;
14901489
}
14911490

1491+
protected void processMapSchema(CodegenModel codegenModel, String name, Schema schema) {
1492+
codegenModel.getVendorExtensions().put(CodegenConstants.IS_MAP_CONTAINER_EXT_NAME, Boolean.TRUE);
1493+
codegenModel.getVendorExtensions().put(IS_CONTAINER_EXT_NAME, Boolean.TRUE);
1494+
addParentContainer(codegenModel, name, schema);
1495+
if (hasSchemaProperties(schema) || hasTrueAdditionalProperties(schema)) {
1496+
addAdditionPropertiesToCodeGenModel(codegenModel, schema);
1497+
}
1498+
}
1499+
14921500
/**
14931501
* Recursively look for a discriminator in the interface tree
14941502
*/
@@ -2235,11 +2243,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
22352243
}
22362244
}
22372245

2238-
for (String i : imports) {
2239-
if (needToImport(i)) {
2240-
codegenOperation.imports.add(i);
2241-
}
2242-
}
2246+
addOperationImports(codegenOperation, imports);
22432247

22442248
codegenOperation.bodyParam = bodyParam;
22452249
codegenOperation.httpMethod = httpMethod.toUpperCase();
@@ -2293,6 +2297,14 @@ public int compare(CodegenParameter one, CodegenParameter another) {
22932297
return codegenOperation;
22942298
}
22952299

2300+
protected void addOperationImports(CodegenOperation codegenOperation, Set<String> operationImports) {
2301+
for (String operationImport : operationImports) {
2302+
if (needToImport(operationImport)) {
2303+
codegenOperation.imports.add(operationImport);
2304+
}
2305+
}
2306+
}
2307+
22962308
/**
22972309
* Convert Swagger Response object to Codegen Response object
22982310
*

src/main/java/io/swagger/codegen/v3/generators/SchemaHandler.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ protected CodegenModel processArrayItemSchema(String codegenModelName, CodegenPr
140140
return null;
141141
}
142142
this.updatePropertyDataType(codegenProperty, composedModel.name, arraySchema);
143+
this.updatePropertyDataType(codegenProperty.items, composedModel);
143144
return composedModel;
144145
}
145146
return null;
@@ -208,6 +209,7 @@ protected void updatePropertyDataType(CodegenProperty codegenProperty, String sc
208209
arraySchema.setItems(refSchema);
209210
codegenProperty.setDatatype(this.codegenConfig.getTypeDeclaration(arraySchema));
210211
codegenProperty.setDatatypeWithEnum(codegenProperty.getDatatype());
212+
codegenProperty.vendorExtensions.put("x-is-composed", true);
211213

212214
codegenProperty.defaultValue = this.codegenConfig.toDefaultValue(arraySchema);
213215
codegenProperty.defaultValueWithParam = this.codegenConfig.toDefaultValueWithParam(codegenProperty.baseName, arraySchema);
@@ -235,5 +237,6 @@ private void updatePropertyDataType(CodegenProperty codegenProperty, CodegenMode
235237
codegenProperty.datatypeWithEnum = composedModel.getClassname();
236238
codegenProperty.baseType = composedModel.getClassname();
237239
codegenProperty.complexType = composedModel.getClassname();
240+
codegenProperty.vendorExtensions.put("x-is-composed", true);
238241
}
239242
}

src/main/java/io/swagger/codegen/v3/generators/examples/ExampleGenerator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,10 @@ private Object resolveSchemaToExample(String propertyName, String mediaType, Sch
195195
Schema innerType = ((ArraySchema) schema).getItems();
196196
if (innerType != null) {
197197
int arrayLength = schema.getMaxItems() != null ? schema.getMaxItems() : 2;
198+
if (arrayLength > 10) {
199+
logger.warn("value of maxItems of property {} is {}; limiting to 10 examples", schema, arrayLength);
200+
arrayLength = 10;
201+
}
198202
Object[] objectProperties = new Object[arrayLength];
199203
Object objProperty = resolveSchemaToExample(propertyName, mediaType, innerType, processedModels);
200204
for(int i=0; i < arrayLength; i++) {

src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,15 @@ public abstract class AbstractJavaCodegen extends DefaultCodegenConfig {
5454
public static final String DEFAULT_LIBRARY = "<default>";
5555
public static final String DATE_LIBRARY = "dateLibrary";
5656
public static final String JAVA8_MODE = "java8";
57+
public static final String JAVA11_MODE = "java11";
5758
public static final String WITH_XML = "withXml";
5859
public static final String SUPPORT_JAVA6 = "supportJava6";
5960
public static final String ERROR_ON_UNKNOWN_ENUM = "errorOnUnknownEnum";
6061
public static final String CHECK_DUPLICATED_MODEL_NAME = "checkDuplicatedModelName";
6162

6263
protected String dateLibrary = "threetenbp";
6364
protected boolean java8Mode = false;
65+
protected boolean java11Mode = false;
6466
protected boolean withXml = false;
6567
protected String invokerPackage = "io.swagger";
6668
protected String groupId = "io.swagger";
@@ -165,6 +167,7 @@ public AbstractJavaCodegen() {
165167
CliOption dateLibrary = new CliOption(DATE_LIBRARY, "Option. Date library to use");
166168
Map<String, String> dateOptions = new HashMap<String, String>();
167169
dateOptions.put("java8", "Java 8 native JSR310 (preferred for jdk 1.8+) - note: this also sets \"" + JAVA8_MODE + "\" to true");
170+
dateOptions.put("java11", "Java 11 native JSR384 (preferred for jdk 11+) - note: this also sets \"" + JAVA11_MODE + "\" to true");
168171
dateOptions.put("threetenbp", "Backport of JSR310 (preferred for jdk < 1.8)");
169172
dateOptions.put("java8-localdatetime", "Java 8 using LocalDateTime (for legacy app only)");
170173
dateOptions.put("joda", "Joda (for legacy app only)");
@@ -187,16 +190,16 @@ public void processOpts() {
187190
this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE));
188191
} else if (additionalProperties.containsKey(CodegenConstants.API_PACKAGE)) {
189192
// guess from api package
190-
String derviedInvokerPackage = deriveInvokerPackageName((String)additionalProperties.get(CodegenConstants.API_PACKAGE));
191-
this.additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, derviedInvokerPackage);
193+
String derivedInvokerPackage = deriveInvokerPackageName((String)additionalProperties.get(CodegenConstants.API_PACKAGE));
194+
this.additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, derivedInvokerPackage);
192195
this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE));
193-
LOGGER.info("Invoker Package Name, originally not set, is now dervied from api package name: " + derviedInvokerPackage);
196+
LOGGER.info("Invoker Package Name, originally not set, is now derived from api package name: " + derivedInvokerPackage);
194197
} else if (additionalProperties.containsKey(CodegenConstants.MODEL_PACKAGE)) {
195198
// guess from model package
196-
String derviedInvokerPackage = deriveInvokerPackageName((String)additionalProperties.get(CodegenConstants.MODEL_PACKAGE));
197-
this.additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, derviedInvokerPackage);
199+
String derivedInvokerPackage = deriveInvokerPackageName((String)additionalProperties.get(CodegenConstants.MODEL_PACKAGE));
200+
this.additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, derivedInvokerPackage);
198201
this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE));
199-
LOGGER.info("Invoker Package Name, originally not set, is now dervied from model package name: " + derviedInvokerPackage);
202+
LOGGER.info("Invoker Package Name, originally not set, is now derived from model package name: " + derivedInvokerPackage);
200203
} else if (StringUtils.isNotEmpty(invokerPackage)) {
201204
// not set in additionalProperties, add value from CodegenConfig in order to use it in templates
202205
additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, invokerPackage);
@@ -211,7 +214,7 @@ public void processOpts() {
211214
apiDocTemplateFiles.put("api_doc.mustache", ".md");
212215

213216
if (additionalProperties.containsKey(SUPPORT_JAVA6)) {
214-
this.setSupportJava6(Boolean.valueOf(additionalProperties.get(SUPPORT_JAVA6).toString()));
217+
this.setSupportJava6(false); // JAVA 6 not supported
215218
}
216219
additionalProperties.put(SUPPORT_JAVA6, supportJava6);
217220

@@ -424,12 +427,10 @@ public void processOpts() {
424427
// used later in recursive import in postProcessingModels
425428
importMapping.put("com.fasterxml.jackson.annotation.JsonProperty", "com.fasterxml.jackson.annotation.JsonCreator");
426429

427-
if(additionalProperties.containsKey(JAVA8_MODE)) {
428-
setJava8Mode(Boolean.parseBoolean(additionalProperties.get(JAVA8_MODE).toString()));
429-
if ( java8Mode ) {
430-
additionalProperties.put("java8", true);
431-
}
432-
}
430+
setJava8Mode(Boolean.parseBoolean(String.valueOf(additionalProperties.get(JAVA8_MODE))));
431+
additionalProperties.put(JAVA8_MODE, java8Mode);
432+
setJava11Mode(Boolean.parseBoolean(String.valueOf(additionalProperties.get(JAVA11_MODE))));
433+
additionalProperties.put(JAVA11_MODE, java11Mode);
433434

434435
if(additionalProperties.containsKey(WITH_XML)) {
435436
setWithXml(Boolean.parseBoolean(additionalProperties.get(WITH_XML).toString()));
@@ -492,6 +493,15 @@ private void sanitizeConfig() {
492493
}
493494
}
494495

496+
protected String escapeUnderscore(String name) {
497+
// Java 8 discourages naming things _, but Java 9 does not allow it.
498+
if("_".equals(name)) {
499+
return "_u";
500+
} else {
501+
return name;
502+
}
503+
}
504+
495505
@Override
496506
public String escapeReservedWord(String name) {
497507
if(this.reservedWordsMappings().containsKey(name)) {
@@ -562,11 +572,9 @@ public String toVarName(String name) {
562572
return "propertyClass";
563573
}
564574

565-
if("_".equals(name)) {
566-
name = "_u";
567-
}
575+
name = escapeUnderscore(name);
568576

569-
// if it's all uppper case, do nothing
577+
// if it's all upper case, do nothing
570578
if (name.matches("^[A-Z_]*$")) {
571579
return name;
572580
}
@@ -1015,11 +1023,15 @@ protected void fixUpParentAndInterfaces(CodegenModel codegenModel, Map<String, C
10151023
continue;
10161024
}
10171025
boolean hasConflict = parentModel.vars.stream()
1018-
.anyMatch(parentProperty -> parentProperty.name.equals(codegenProperty.name) && !parentProperty.datatype.equals(codegenProperty.datatype));
1026+
.anyMatch(parentProperty ->
1027+
(parentProperty.name.equals(codegenProperty.name) ||
1028+
parentProperty.getGetter().equals(codegenProperty.getGetter()) ||
1029+
parentProperty.getSetter().equals(codegenProperty.getSetter()) &&
1030+
!parentProperty.datatype.equals(codegenProperty.datatype)));
10191031
if (hasConflict) {
10201032
codegenProperty.name = toVarName(codegenModel.name + "_" + codegenProperty.name);
10211033
codegenProperty.getter = toGetter(codegenProperty.name);
1022-
codegenProperty.setter = toGetter(codegenProperty.name);
1034+
codegenProperty.setter = toSetter(codegenProperty.name);
10231035
break;
10241036
}
10251037
parentModel = parentModel.parentModel;
@@ -1233,15 +1245,6 @@ protected void replaceDuplicatedInModelProperties(Map<String, Schema> definition
12331245
schema.set$ref(schema.get$ref().replace(modelName, newModelName));
12341246
});
12351247
}
1236-
/*
1237-
@Override
1238-
public String findCommonPrefixOfVars(List<String> vars) {
1239-
String prefix = StringUtils.getCommonPrefix(vars.toArray(new String[vars.size()]));
1240-
// exclude trailing characters that should be part of a valid variable
1241-
// e.g. ["status-on", "status-off"] => "status-" (not "status-o")
1242-
return prefix.replaceAll("[a-zA-Z0-9]+\\z", "");
1243-
}
1244-
*/
12451248

12461249
@Override
12471250
public String toEnumName(CodegenProperty property) {
@@ -1273,7 +1276,7 @@ public String toEnumVarName(String value, String datatype) {
12731276
if (var.matches("\\d.*")) {
12741277
return "_" + var;
12751278
} else {
1276-
return var;
1279+
return escapeUnderscore(var).toUpperCase();
12771280
}
12781281
}
12791282

@@ -1536,6 +1539,10 @@ public void setJava8Mode(boolean enabled) {
15361539
this.java8Mode = enabled;
15371540
}
15381541

1542+
public void setJava11Mode(boolean java11Mode) {
1543+
this.java11Mode = java11Mode;
1544+
}
1545+
15391546
@Override
15401547
public String escapeQuotationMark(String input) {
15411548
// remove " to avoid code injection

src/main/java/io/swagger/codegen/v3/generators/java/JavaClientCodegen.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,12 @@ public JavaClientCodegen() {
8282
cliOptions.add(CliOption.newBoolean(PARCELABLE_MODEL, "Whether to generate models for Android that implement Parcelable with the okhttp-gson library."));
8383
cliOptions.add(CliOption.newBoolean(USE_PLAY_WS, "Use Play! Async HTTP client (Play WS API)"));
8484
cliOptions.add(CliOption.newString(PLAY_VERSION, "Version of Play! Framework (possible values \"play24\", \"play25\")"));
85-
cliOptions.add(CliOption.newBoolean(SUPPORT_JAVA6, "Whether to support Java6 with the Jersey1 library."));
8685
cliOptions.add(CliOption.newBoolean(USE_BEANVALIDATION, "Use BeanValidation API annotations"));
8786
cliOptions.add(CliOption.newBoolean(PERFORM_BEANVALIDATION, "Perform BeanValidation"));
8887
cliOptions.add(CliOption.newBoolean(USE_GZIP_FEATURE, "Send gzip-encoded requests"));
8988
cliOptions.add(CliOption.newBoolean(USE_RUNTIME_EXCEPTION, "Use RuntimeException instead of Exception"));
9089

91-
supportedLibraries.put("jersey1", "HTTP client: Jersey client 1.19.4. JSON processing: Jackson 2.10.1. Enable Java6 support using '-DsupportJava6=true'. Enable gzip request encoding using '-DuseGzipFeature=true'.");
90+
supportedLibraries.put("jersey1", "HTTP client: Jersey client 1.19.4. JSON processing: Jackson 2.10.1. Enable gzip request encoding using '-DuseGzipFeature=true'.");
9291
supportedLibraries.put("feign", "HTTP client: OpenFeign 9.4.0. JSON processing: Jackson 2.10.1");
9392
supportedLibraries.put("jersey2", "HTTP client: Jersey client 2.26. JSON processing: Jackson 2.10.1");
9493
supportedLibraries.put("okhttp-gson", "HTTP client: OkHttp 2.7.5. JSON processing: Gson 2.8.1. Enable Parcelable models on Android using '-DparcelableModel=true'. Enable gzip request encoding using '-DuseGzipFeature=true'.");

src/main/java/io/swagger/codegen/v3/generators/java/JavaJerseyServerCodegen.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ public JavaJerseyServerCodegen() {
4545
library.setDefault(DEFAULT_JERSEY_LIBRARY);
4646

4747
cliOptions.add(library);
48-
cliOptions.add(CliOption.newBoolean(SUPPORT_JAVA6, "Whether to support Java6 with the Jersey1/2 library."));
4948
cliOptions.add(CliOption.newBoolean(USE_TAGS, "use tags for creating interface and controller classnames"));
5049
}
5150

0 commit comments

Comments
 (0)