Skip to content

Commit edf2642

Browse files
committed
Support model name like "List" in Java clients
Support generating model files with name like "List", "Map" and "Date" by using full qualified names when using them from the java.util package.
1 parent d95660a commit edf2642

File tree

6 files changed

+46
-66
lines changed

6 files changed

+46
-66
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -311,15 +311,14 @@ public DefaultCodegen() {
311311
);
312312

313313
typeMapping = new HashMap<String, String>();
314-
typeMapping.put("array", "List");
315-
typeMapping.put("map", "Map");
316-
typeMapping.put("List", "List");
314+
typeMapping.put("array", "java.util.List");
315+
typeMapping.put("map", "java.util.Map");
317316
typeMapping.put("boolean", "Boolean");
318317
typeMapping.put("string", "String");
319318
typeMapping.put("int", "Integer");
320319
typeMapping.put("float", "Float");
321320
typeMapping.put("number", "BigDecimal");
322-
typeMapping.put("DateTime", "Date");
321+
typeMapping.put("DateTime", "java.util.Date");
323322
typeMapping.put("long", "Long");
324323
typeMapping.put("short", "Short");
325324
typeMapping.put("char", "String");
@@ -337,15 +336,7 @@ public DefaultCodegen() {
337336
importMapping.put("BigDecimal", "java.math.BigDecimal");
338337
importMapping.put("UUID", "java.util.UUID");
339338
importMapping.put("File", "java.io.File");
340-
importMapping.put("Date", "java.util.Date");
341339
importMapping.put("Timestamp", "java.sql.Timestamp");
342-
importMapping.put("Map", "java.util.Map");
343-
importMapping.put("HashMap", "java.util.HashMap");
344-
importMapping.put("Array", "java.util.List");
345-
importMapping.put("ArrayList", "java.util.ArrayList");
346-
importMapping.put("List", "java.util.*");
347-
importMapping.put("Set", "java.util.*");
348-
importMapping.put("DateTime", "org.joda.time.*");
349340
importMapping.put("LocalDateTime", "org.joda.time.*");
350341
importMapping.put("LocalDate", "org.joda.time.*");
351342
importMapping.put("LocalTime", "org.joda.time.*");
@@ -1038,7 +1029,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
10381029
}
10391030
}
10401031
for (String i : imports) {
1041-
if (!defaultIncludes.contains(i) && !languageSpecificPrimitives.contains(i)) {
1032+
if (needToImport(i)) {
10421033
op.imports.add(i);
10431034
}
10441035
}
@@ -1311,6 +1302,12 @@ public List<CodegenSecurity> fromSecurity(Map<String, SecuritySchemeDefinition>
13111302
return secs;
13121303
}
13131304

1305+
protected boolean needToImport(String type) {
1306+
return !defaultIncludes.contains(type)
1307+
&& !languageSpecificPrimitives.contains(type)
1308+
&& type.indexOf(".") < 0;
1309+
}
1310+
13141311
protected List<Map<String, Object>> toExamples(Map<String, Object> examples) {
13151312
if (examples == null) {
13161313
return null;
@@ -1414,7 +1411,7 @@ public static String underscore(String word) {
14141411
}
14151412

14161413
private void addImport(CodegenModel m, String type) {
1417-
if (type != null && !languageSpecificPrimitives.contains(type) && !defaultIncludes.contains(type)) {
1414+
if (type != null && needToImport(type)) {
14181415
m.imports.add(type);
14191416
}
14201417
}
@@ -1593,8 +1590,8 @@ protected CliOption buildLibraryCliOption(Map<String, String> supportedLibraries
15931590
* @return sanitized string
15941591
*/
15951592
public String sanitizeName(String name) {
1596-
// NOTE: performance wise, we should have written with 2 replaceAll to replace desired
1597-
// character with _ or empty character. Below aims to spell out different cases we've
1593+
// NOTE: performance wise, we should have written with 2 replaceAll to replace desired
1594+
// character with _ or empty character. Below aims to spell out different cases we've
15981595
// encountered so far and hopefully make it easier for others to add more special
15991596
// cases in the future.
16001597

@@ -1617,7 +1614,7 @@ public String sanitizeName(String name) {
16171614

16181615
// input name and age => input_name_and_age
16191616
name = name.replaceAll(" ", "_");
1620-
1617+
16211618
// remove everything else other than word, number and _
16221619
// $php_variable => php_variable
16231620
return name.replaceAll("[^a-zA-Z0-9_]", "");

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ public JavaClientCodegen() {
7171
"Object",
7272
"byte[]")
7373
);
74-
instantiationTypes.put("array", "ArrayList");
75-
instantiationTypes.put("map", "HashMap");
74+
instantiationTypes.put("array", "java.util.ArrayList");
75+
instantiationTypes.put("map", "java.util.HashMap");
7676

7777
cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC));
7878
cliOptions.add(new CliOption(CodegenConstants.GROUP_ID, CodegenConstants.GROUP_ID_DESC));
@@ -107,7 +107,7 @@ public String getHelp() {
107107
@Override
108108
public void processOpts() {
109109
super.processOpts();
110-
110+
111111
if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) {
112112
this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE));
113113
} else {
@@ -158,7 +158,7 @@ public void processOpts() {
158158
supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml"));
159159
supportingFiles.add(new SupportingFile("ApiClient.mustache", invokerFolder, "ApiClient.java"));
160160
supportingFiles.add(new SupportingFile("StringUtil.mustache", invokerFolder, "StringUtil.java"));
161-
161+
162162
final String authFolder = (sourceFolder + File.separator + invokerPackage + ".auth").replace(".", File.separator);
163163
supportingFiles.add(new SupportingFile("auth/HttpBasicAuth.mustache", authFolder, "HttpBasicAuth.java"));
164164
supportingFiles.add(new SupportingFile("auth/ApiKeyAuth.mustache", authFolder, "ApiKeyAuth.java"));
@@ -172,7 +172,7 @@ public void processOpts() {
172172
supportingFiles.add(new SupportingFile("Pair.mustache", invokerFolder, "Pair.java"));
173173
supportingFiles.add(new SupportingFile("auth/Authentication.mustache", authFolder, "Authentication.java"));
174174
}
175-
175+
176176
// library-specific files
177177
if ("okhttp-gson".equals(getLibrary())) {
178178
// the "okhttp-gson" library template requires "ApiCallback.mustache" for async call
@@ -189,25 +189,25 @@ public void processOpts() {
189189
}
190190

191191
private void sanitizeConfig() {
192-
// Sanitize any config options here. We also have to update the additionalProperties because
192+
// Sanitize any config options here. We also have to update the additionalProperties because
193193
// the whole additionalProperties object is injected into the main object passed to the mustache layer
194-
194+
195195
this.setApiPackage(sanitizePackageName(apiPackage));
196196
if (additionalProperties.containsKey(CodegenConstants.API_PACKAGE)) {
197197
this.additionalProperties.put(CodegenConstants.API_PACKAGE, apiPackage);
198198
}
199-
199+
200200
this.setModelPackage(sanitizePackageName(modelPackage));
201201
if (additionalProperties.containsKey(CodegenConstants.MODEL_PACKAGE)) {
202202
this.additionalProperties.put(CodegenConstants.MODEL_PACKAGE, modelPackage);
203203
}
204-
204+
205205
this.setInvokerPackage(sanitizePackageName(invokerPackage));
206206
if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) {
207207
this.additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, invokerPackage);
208208
}
209209
}
210-
210+
211211
@Override
212212
public String escapeReservedWord(String name) {
213213
return "_" + name;
@@ -294,10 +294,10 @@ public String getTypeDeclaration(Property p) {
294294
public String toDefaultValue(Property p) {
295295
if (p instanceof ArrayProperty) {
296296
final ArrayProperty ap = (ArrayProperty) p;
297-
return String.format("new ArrayList<%s>()", getTypeDeclaration(ap.getItems()));
297+
return String.format("new java.util.ArrayList<%s>()", getTypeDeclaration(ap.getItems()));
298298
} else if (p instanceof MapProperty) {
299299
final MapProperty ap = (MapProperty) p;
300-
return String.format("new HashMap<String, %s>()", getTypeDeclaration(ap.getAdditionalProperties()));
300+
return String.format("new java.util.HashMap<String, %s>()", getTypeDeclaration(ap.getAdditionalProperties()));
301301
}
302302
return super.toDefaultValue(p);
303303
}
@@ -308,7 +308,7 @@ public String getSwaggerType(Property p) {
308308
String type = null;
309309
if (typeMapping.containsKey(swaggerType)) {
310310
type = typeMapping.get(swaggerType);
311-
if (languageSpecificPrimitives.contains(type)) {
311+
if (languageSpecificPrimitives.contains(type) || type.indexOf(".") >= 0) {
312312
return type;
313313
}
314314
} else {
@@ -394,7 +394,7 @@ public Map<String, Object> postProcessModels(Map<String, Object> objs) {
394394
}
395395
return objs;
396396
}
397-
397+
398398
public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
399399
if("retrofit".equals(getLibrary())) {
400400
Map<String, Object> operations = (Map<String, Object>) objs.get("operations");
@@ -418,6 +418,10 @@ public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
418418
return objs;
419419
}
420420

421+
protected boolean needToImport(String type) {
422+
return super.needToImport(type) && type.indexOf(".") < 0;
423+
}
424+
421425
private String findCommonPrefixOfVars(List<String> vars) {
422426
String prefix = StringUtils.getCommonPrefix(vars.toArray(new String[vars.size()]));
423427
// exclude trailing characters that should be part of a valid variable

modules/swagger-codegen/src/main/resources/Java/api.mustache

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,9 @@ import {{invokerPackage}}.Configuration;
66
import {{invokerPackage}}.Pair;
77
import {{invokerPackage}}.TypeRef;
88

9-
import {{modelPackage}}.*;
10-
11-
import java.util.*;
12-
139
{{#imports}}import {{import}};
1410
{{/imports}}
1511

16-
import java.io.File;
17-
import java.util.Map;
18-
import java.util.HashMap;
19-
2012
{{>generatedAnnotation}}
2113
{{#operations}}
2214
public class {{classname}} {
@@ -59,9 +51,9 @@ public class {{classname}} {
5951
.replaceAll("\\{" + "{{baseName}}" + "\\}", {{localVariablePrefix}}apiClient.escapeString({{{paramName}}}.toString())){{/pathParams}};
6052

6153
// query params
62-
List<Pair> {{localVariablePrefix}}queryParams = new ArrayList<Pair>();
63-
Map<String, String> {{localVariablePrefix}}headerParams = new HashMap<String, String>();
64-
Map<String, Object> {{localVariablePrefix}}formParams = new HashMap<String, Object>();
54+
java.util.List<Pair> {{localVariablePrefix}}queryParams = new java.util.ArrayList<Pair>();
55+
java.util.Map<String, String> {{localVariablePrefix}}headerParams = new java.util.HashMap<String, String>();
56+
java.util.Map<String, Object> {{localVariablePrefix}}formParams = new java.util.HashMap<String, Object>();
6557

6658
{{#queryParams}}
6759
{{localVariablePrefix}}queryParams.addAll({{localVariablePrefix}}apiClient.parameterToPairs("{{#collectionFormat}}{{{collectionFormat}}}{{/collectionFormat}}", "{{baseName}}", {{paramName}}));

modules/swagger-codegen/src/main/resources/Java/libraries/jersey2/api.mustache

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,9 @@ import {{invokerPackage}}.TypeRef;
88

99
import {{modelPackage}}.*;
1010

11-
import java.util.*;
12-
1311
{{#imports}}import {{import}};
1412
{{/imports}}
1513

16-
import java.io.File;
17-
import java.util.Map;
18-
import java.util.HashMap;
19-
2014
{{>generatedAnnotation}}
2115
{{#operations}}
2216
public class {{classname}} {
@@ -58,9 +52,9 @@ public class {{classname}} {
5852
.replaceAll("\\{" + "{{baseName}}" + "\\}", {{localVariablePrefix}}apiClient.escapeString({{{paramName}}}.toString())){{/pathParams}};
5953

6054
// query params
61-
List<Pair> {{localVariablePrefix}}queryParams = new ArrayList<Pair>();
62-
Map<String, String> {{localVariablePrefix}}headerParams = new HashMap<String, String>();
63-
Map<String, Object> {{localVariablePrefix}}formParams = new HashMap<String, Object>();
55+
java.util.List<Pair> {{localVariablePrefix}}queryParams = new java.util.ArrayList<Pair>();
56+
java.util.Map<String, String> {{localVariablePrefix}}headerParams = new java.util.HashMap<String, String>();
57+
java.util.Map<String, Object> {{localVariablePrefix}}formParams = new java.util.HashMap<String, Object>();
6458

6559
{{#queryParams}}
6660
{{localVariablePrefix}}queryParams.addAll({{localVariablePrefix}}apiClient.parameterToPairs("{{#collectionFormat}}{{{collectionFormat}}}{{/collectionFormat}}", "{{baseName}}", {{paramName}}));

modules/swagger-codegen/src/main/resources/Java/libraries/okhttp-gson/api.mustache

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,9 @@ import com.squareup.okhttp.Call;
1414

1515
import java.lang.reflect.Type;
1616

17-
import java.util.*;
18-
1917
{{#imports}}import {{import}};
2018
{{/imports}}
2119

22-
import java.io.File;
23-
import java.util.Map;
24-
import java.util.HashMap;
25-
2620
{{#operations}}
2721
public class {{classname}} {
2822
private ApiClient {{localVariablePrefix}}apiClient;
@@ -58,15 +52,15 @@ public class {{classname}} {
5852
String {{localVariablePrefix}}path = "{{path}}".replaceAll("\\{format\\}","json"){{#pathParams}}
5953
.replaceAll("\\{" + "{{baseName}}" + "\\}", {{localVariablePrefix}}apiClient.escapeString({{{paramName}}}.toString())){{/pathParams}};
6054

61-
List<Pair> {{localVariablePrefix}}queryParams = new ArrayList<Pair>();{{#queryParams}}
55+
java.util.List<Pair> {{localVariablePrefix}}queryParams = new java.util.ArrayList<Pair>();{{#queryParams}}
6256
if ({{paramName}} != null)
6357
{{localVariablePrefix}}queryParams.addAll({{localVariablePrefix}}apiClient.parameterToPairs("{{#collectionFormat}}{{{collectionFormat}}}{{/collectionFormat}}", "{{baseName}}", {{paramName}}));{{/queryParams}}
6458

65-
Map<String, String> {{localVariablePrefix}}headerParams = new HashMap<String, String>();{{#headerParams}}
59+
java.util.Map<String, String> {{localVariablePrefix}}headerParams = new java.util.HashMap<String, String>();{{#headerParams}}
6660
if ({{paramName}} != null)
6761
{{localVariablePrefix}}headerParams.put("{{baseName}}", {{localVariablePrefix}}apiClient.parameterToString({{paramName}}));{{/headerParams}}
6862

69-
Map<String, Object> {{localVariablePrefix}}formParams = new HashMap<String, Object>();{{#formParams}}
63+
java.util.Map<String, Object> {{localVariablePrefix}}formParams = new java.util.HashMap<String, Object>();{{#formParams}}
7064
if ({{paramName}} != null)
7165
{{localVariablePrefix}}formParams.put("{{baseName}}", {{paramName}});{{/formParams}}
7266

modules/swagger-codegen/src/main/resources/Java/libraries/retrofit/api.mustache

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {{modelPackage}}.*;
55
import retrofit.Callback;
66
import retrofit.http.*;
77
import retrofit.mime.*;
8-
import java.util.*;
98

109
{{#imports}}import {{import}};
1110
{{/imports}}
@@ -22,7 +21,7 @@ public interface {{classname}} {
2221
*/
2322
{{#formParams}}{{#-first}}
2423
{{#isMultipart}}@Multipart{{/isMultipart}}{{^isMultipart}}@FormUrlEncoded{{/isMultipart}}{{/-first}}{{/formParams}}
25-
@{{httpMethod}}("{{path}}")
24+
@{{httpMethod}}("{{path}}")
2625
{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Object{{/returnType}} {{nickname}}({{^allParams}});{{/allParams}}
2726
{{#allParams}}{{>libraries/retrofit/queryParams}}{{>libraries/retrofit/pathParams}}{{>libraries/retrofit/headerParams}}{{>libraries/retrofit/bodyParams}}{{>libraries/retrofit/formParams}}{{#hasMore}}, {{/hasMore}}{{^hasMore}}
2827
);{{/hasMore}}{{/allParams}}
@@ -31,15 +30,15 @@ public interface {{classname}} {
3130
* {{summary}}
3231
* Async method
3332
{{#allParams}} * @param {{paramName}} {{description}}
34-
{{/allParams}} * @param cb callback method
33+
{{/allParams}} * @param cb callback method
3534
* @return void
3635
*/
3736
{{#formParams}}{{#-first}}
3837
{{#isMultipart}}@Multipart{{/isMultipart}}{{^isMultipart}}@FormUrlEncoded{{/isMultipart}}{{/-first}}{{/formParams}}
39-
@{{httpMethod}}("{{path}}")
38+
@{{httpMethod}}("{{path}}")
4039
void {{nickname}}(
4140
{{#allParams}}{{>libraries/retrofit/queryParams}}{{>libraries/retrofit/pathParams}}{{>libraries/retrofit/headerParams}}{{>libraries/retrofit/bodyParams}}{{>libraries/retrofit/formParams}}, {{/allParams}}Callback<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Object{{/returnType}}> cb
42-
);
41+
);
4342
{{/operation}}
4443
}
45-
{{/operations}}
44+
{{/operations}}

0 commit comments

Comments
 (0)