Skip to content

Commit 84c0e65

Browse files
authored
Merge branch 'master' into whitesource/configure
2 parents 3a6a68e + 42f8d7a commit 84c0e65

File tree

211 files changed

+5044
-925
lines changed

Some content is hidden

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

211 files changed

+5044
-925
lines changed

pom.xml

Lines changed: 12 additions & 10 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.24-SNAPSHOT</version>
15+
<version>1.0.34-SNAPSHOT</version>
1616
<packaging>jar</packaging>
1717

1818
<build>
@@ -66,10 +66,12 @@
6666
</plugin>
6767
<plugin>
6868
<artifactId>maven-surefire-plugin</artifactId>
69-
<version>2.22.0</version>
69+
<version>2.22.2</version>
7070
<configuration>
7171
<argLine>
7272
-javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit-version}/jmockit-${jmockit-version}.jar
73+
-XX:+IgnoreUnrecognizedVMOptions
74+
--add-opens=java.base/java.util=ALL-UNNAMED
7375
</argLine>
7476
</configuration>
7577
</plugin>
@@ -252,18 +254,18 @@
252254
</dependency>
253255
</dependencies>
254256
<properties>
255-
<swagger-codegen-version>3.0.24-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>
257+
<swagger-codegen-version>3.0.34-SNAPSHOT</swagger-codegen-version>
258+
<swagger-parser-version>2.0.30</swagger-parser-version>
259+
<swagger-core-version>2.1.13</swagger-core-version>
260+
<jackson-version>2.12.1</jackson-version>
259261
<scala-version>2.11.1</scala-version>
260262
<felix-version>3.3.0</felix-version>
261-
<commons-io-version>2.4</commons-io-version>
262-
<commons-cli-version>1.2</commons-cli-version>
263+
<commons-io-version>2.11.0</commons-io-version>
264+
<commons-cli-version>1.5.0</commons-cli-version>
263265
<junit-version>4.13.1</junit-version>
264266
<maven-plugin-version>1.0.0</maven-plugin-version>
265-
<commons-lang-version>3.4</commons-lang-version>
266-
<slf4j-version>1.7.12</slf4j-version>
267+
<commons-lang-version>3.12.0</commons-lang-version>
268+
<slf4j-version>1.7.35</slf4j-version>
267269
<scala-maven-plugin-version>3.2.1</scala-maven-plugin-version>
268270
<testng-version>6.9.6</testng-version>
269271
<surefire-version>2.19.1</surefire-version>

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

Lines changed: 152 additions & 132 deletions
Large diffs are not rendered by default.
Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
package io.swagger.codegen.v3.generators;
2+
3+
import io.swagger.codegen.v3.CodegenConstants;
4+
import io.swagger.codegen.v3.CodegenContent;
5+
import io.swagger.codegen.v3.CodegenOperation;
6+
import io.swagger.codegen.v3.CodegenParameter;
7+
import io.swagger.codegen.v3.generators.util.OpenAPIUtil;
8+
import io.swagger.v3.oas.models.OpenAPI;
9+
import io.swagger.v3.oas.models.media.ArraySchema;
10+
import io.swagger.v3.oas.models.media.Schema;
11+
import io.swagger.v3.oas.models.parameters.CookieParameter;
12+
import io.swagger.v3.oas.models.parameters.HeaderParameter;
13+
import io.swagger.v3.oas.models.parameters.Parameter;
14+
import io.swagger.v3.oas.models.parameters.PathParameter;
15+
import io.swagger.v3.oas.models.parameters.QueryParameter;
16+
17+
import java.util.ArrayList;
18+
import java.util.Collections;
19+
import java.util.List;
20+
import java.util.Map;
21+
import java.util.Set;
22+
23+
public class OperationParameters {
24+
25+
private CodegenParameter bodyParam = null;
26+
private List<CodegenParameter> allParams = new ArrayList<>();
27+
private List<CodegenParameter> bodyParams = new ArrayList<>();
28+
private List<CodegenParameter> pathParams = new ArrayList<>();
29+
private List<CodegenParameter> queryParams = new ArrayList<>();
30+
private List<CodegenParameter> headerParams = new ArrayList<>();
31+
private List<CodegenParameter> cookieParams = new ArrayList<>();
32+
private List<CodegenParameter> formParams = new ArrayList<>();
33+
private List<CodegenParameter> requiredParams = new ArrayList<>();
34+
private List<CodegenContent> codegenContents = new ArrayList<>();
35+
36+
public void setBodyParam(CodegenParameter bodyParam) {
37+
this.bodyParam = bodyParam;
38+
}
39+
40+
public CodegenParameter getBodyParam() {
41+
return bodyParam;
42+
}
43+
44+
public List<CodegenParameter> getAllParams() {
45+
return allParams;
46+
}
47+
48+
public List<CodegenParameter> getBodyParams() {
49+
return bodyParams;
50+
}
51+
52+
public List<CodegenParameter> getPathParams() {
53+
return pathParams;
54+
}
55+
56+
public List<CodegenParameter> getQueryParams() {
57+
return queryParams;
58+
}
59+
60+
public List<CodegenParameter> getHeaderParams() {
61+
return headerParams;
62+
}
63+
64+
public List<CodegenParameter> getCookieParams() {
65+
return cookieParams;
66+
}
67+
68+
public List<CodegenParameter> getFormParams() {
69+
return formParams;
70+
}
71+
72+
public List<CodegenParameter> getRequiredParams() {
73+
return requiredParams;
74+
}
75+
76+
public List<CodegenContent> getCodegenContents() {
77+
return codegenContents;
78+
}
79+
80+
public void addAllParams(CodegenParameter codegenParameter) {
81+
allParams.add(codegenParameter);
82+
}
83+
84+
public void addBodyParams(CodegenParameter codegenParameter) {
85+
bodyParams.add(codegenParameter);
86+
}
87+
88+
public void addPathParams(CodegenParameter codegenParameter) {
89+
pathParams.add(codegenParameter);
90+
}
91+
92+
public void addQueryParams(CodegenParameter codegenParameter) {
93+
queryParams.add(codegenParameter);
94+
}
95+
96+
public void addHeaderParams(CodegenParameter codegenParameter) {
97+
headerParams.add(codegenParameter);
98+
}
99+
100+
public void addCookieParams(CodegenParameter codegenParameter) {
101+
cookieParams.add(codegenParameter);
102+
}
103+
104+
public void addFormParam(CodegenParameter codegenParameter) {
105+
formParams.add(codegenParameter);
106+
}
107+
108+
public void addRequiredParam(CodegenParameter codegenParameter) {
109+
requiredParams.add(codegenParameter);
110+
}
111+
112+
public void addCodegenContents(CodegenContent codegenContent) {
113+
codegenContents.add(codegenContent);
114+
}
115+
116+
public void addParameters(Parameter parameter, CodegenParameter codegenParameter) {
117+
allParams.add(codegenParameter);
118+
119+
if (parameter instanceof QueryParameter || "query".equalsIgnoreCase(parameter.getIn())) {
120+
queryParams.add(codegenParameter.copy());
121+
} else if (parameter instanceof PathParameter || "path".equalsIgnoreCase(parameter.getIn())) {
122+
pathParams.add(codegenParameter.copy());
123+
} else if (parameter instanceof HeaderParameter || "header".equalsIgnoreCase(parameter.getIn())) {
124+
headerParams.add(codegenParameter.copy());
125+
} else if (parameter instanceof CookieParameter || "cookie".equalsIgnoreCase(parameter.getIn())) {
126+
cookieParams.add(codegenParameter.copy());
127+
}
128+
if (codegenParameter.required) {
129+
requiredParams.add(codegenParameter.copy());
130+
}
131+
}
132+
133+
public void addHasMore(CodegenOperation codegenOperation) {
134+
codegenOperation.allParams = addHasMore(allParams);
135+
codegenOperation.bodyParams = addHasMore(bodyParams);
136+
codegenOperation.pathParams = addHasMore(pathParams);
137+
codegenOperation.queryParams = addHasMore(queryParams);
138+
codegenOperation.headerParams = addHasMore(headerParams);
139+
codegenOperation.cookieParams = addHasMore(cookieParams);
140+
codegenOperation.formParams = addHasMore(formParams);
141+
codegenOperation.requiredParams = addHasMore(requiredParams);
142+
}
143+
144+
public void sortRequiredAllParams() {
145+
Collections.sort(allParams, (one, another) -> {
146+
if (one.required == another.required) {
147+
return 0;
148+
} else if (one.required) {
149+
return -1;
150+
} else {
151+
return 1;
152+
}
153+
});
154+
}
155+
156+
public void parseNestedObjects(String name, Schema schema, Set<String> imports, DefaultCodegenConfig codegenConfig, OpenAPI openAPI) {
157+
schema = OpenAPIUtil.getRefSchemaIfExists(schema, openAPI);
158+
if (schema == null || !isObjectWithProperties(schema)) {
159+
return;
160+
}
161+
final Map<String, Schema> properties = schema.getProperties();
162+
for (String key : properties.keySet()) {
163+
Schema property = properties.get(key);
164+
property = OpenAPIUtil.getRefSchemaIfExists(property, openAPI);
165+
boolean required;
166+
if (schema.getRequired() == null || schema.getRequired().isEmpty()) {
167+
required = false;
168+
} else {
169+
required = schema.getRequired().stream().anyMatch(propertyName -> key.equalsIgnoreCase(propertyName.toString()));
170+
}
171+
final String parameterName;
172+
if (property instanceof ArraySchema) {
173+
parameterName = String.format("%s[%s][]", name, key);
174+
} else {
175+
parameterName = String.format("%s[%s]", name, key);
176+
}
177+
if (isObjectWithProperties(property)) {
178+
parseNestedObjects(parameterName, property, imports, codegenConfig, openAPI);
179+
continue;
180+
}
181+
final Parameter queryParameter = new QueryParameter()
182+
.name(parameterName)
183+
.required(required)
184+
.schema(property);
185+
final CodegenParameter codegenParameter = codegenConfig.fromParameter(queryParameter, imports);
186+
addParameters(queryParameter, codegenParameter);
187+
}
188+
}
189+
190+
public static List<CodegenParameter> addHasMore(List<CodegenParameter> codegenParameters) {
191+
if (codegenParameters == null || codegenParameters.isEmpty()) {
192+
return codegenParameters;
193+
}
194+
for (int i = 0; i < codegenParameters.size(); i++) {
195+
codegenParameters.get(i).secondaryParam = i > 0;
196+
codegenParameters.get(i).getVendorExtensions().put(CodegenConstants.HAS_MORE_EXT_NAME, i < codegenParameters.size() - 1);
197+
}
198+
return codegenParameters;
199+
}
200+
201+
private boolean isObjectWithProperties(Schema schema) {
202+
return ("object".equalsIgnoreCase(schema.getType()) || schema.getType() == null)
203+
&& schema.getProperties() != null
204+
&& !schema.getProperties().isEmpty();
205+
}
206+
}

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

Lines changed: 16 additions & 1 deletion
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;
@@ -174,7 +175,17 @@ protected void addInterfaces(List<Schema> schemas, CodegenModel codegenModel, Ma
174175
continue;
175176
}
176177
final String schemaName = ref.substring(ref.lastIndexOf("/") + 1);
177-
this.addInterfaceModel(allModels.get(codegenConfig.toModelName(schemaName)), codegenModel);
178+
179+
final CodegenModel model = allModels.get(codegenConfig.toModelName(schemaName));
180+
this.addInterfaceModel(model, codegenModel);
181+
182+
boolean subTypeAdded = false;
183+
if (codegenModel.getSubTypes() != null) {
184+
subTypeAdded = codegenModel.getSubTypes().stream().anyMatch(existingSubType -> existingSubType.classname.equalsIgnoreCase(model.classname));
185+
}
186+
if (!subTypeAdded) {
187+
codegenModel.addSubType(model);
188+
}
178189
}
179190
}
180191

@@ -208,6 +219,7 @@ protected void updatePropertyDataType(CodegenProperty codegenProperty, String sc
208219
arraySchema.setItems(refSchema);
209220
codegenProperty.setDatatype(this.codegenConfig.getTypeDeclaration(arraySchema));
210221
codegenProperty.setDatatypeWithEnum(codegenProperty.getDatatype());
222+
codegenProperty.vendorExtensions.put("x-is-composed", true);
211223

212224
codegenProperty.defaultValue = this.codegenConfig.toDefaultValue(arraySchema);
213225
codegenProperty.defaultValueWithParam = this.codegenConfig.toDefaultValueWithParam(codegenProperty.baseName, arraySchema);
@@ -224,6 +236,8 @@ protected void updateArrayModel(CodegenModel codegenModel, String schemaName, Ar
224236
this.codegenConfig.addParentContainer(codegenModel, codegenModel.name, arraySchema);
225237
codegenModel.defaultValue = this.codegenConfig.toDefaultValue(arraySchema);
226238
codegenModel.arrayModelType = this.codegenConfig.fromProperty(codegenModel.name, arraySchema).complexType;
239+
boolean isInterface = codegenModel.arrayModelType.startsWith(ALL_OF_PREFFIX) || codegenModel.arrayModelType.startsWith(ONE_OF_PREFFIX) || codegenModel.arrayModelType.startsWith(ANY_OF_PREFFIX);
240+
codegenModel.getVendorExtensions().put("x-array-model-type-is-interface", isInterface);
227241

228242
arraySchema.setItems(items);
229243
}
@@ -233,5 +247,6 @@ private void updatePropertyDataType(CodegenProperty codegenProperty, CodegenMode
233247
codegenProperty.datatypeWithEnum = composedModel.getClassname();
234248
codegenProperty.baseType = composedModel.getClassname();
235249
codegenProperty.complexType = composedModel.getClassname();
250+
codegenProperty.vendorExtensions.put("x-is-composed", true);
236251
}
237252
}

src/main/java/io/swagger/codegen/v3/generators/dotnet/AbstractCSharpCodegen.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -106,18 +106,18 @@ public AbstractCSharpCodegen() {
106106
Arrays.asList("IDictionary")
107107
);
108108

109-
setReservedWordsLowerCase(
109+
setReservedWords(
110110
Arrays.asList(
111111
// set "client" as a reserved word to avoid conflicts with IO.Swagger.Client
112112
// this is a workaround and can be removed if c# api client is updated to use
113113
// fully qualified name
114-
"Client", "client", "parameter", "File",
114+
"Client", "client", "parameter", "File", "List", "list",
115115
// local variable names in API methods (endpoints)
116116
"localVarPath", "localVarPathParams", "localVarQueryParams", "localVarHeaderParams",
117117
"localVarFormParams", "localVarFileParams", "localVarStatusCode", "localVarResponse",
118118
"localVarPostBody", "localVarHttpHeaderAccepts", "localVarHttpHeaderAccept",
119119
"localVarHttpContentTypes", "localVarHttpContentType",
120-
"localVarStatusCode",
120+
"localVarStatusCode", "ApiResponse", "apiresponse",
121121
// C# reserved words
122122
"abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked",
123123
"class", "const", "continue", "decimal", "default", "delegate", "do", "double", "else",
@@ -743,19 +743,14 @@ public String toDefaultValue(Schema schema) {
743743
@Override
744744
protected boolean isReservedWord(String word) {
745745
// NOTE: This differs from super's implementation in that C# does _not_ want case insensitive matching.
746-
return reservedWords.contains(word);
746+
return reservedWords.contains(word.toLowerCase());
747747
}
748748

749749
@Override
750750
public String getSchemaType(Schema propertySchema) {
751751
String swaggerType = super.getSchemaType(propertySchema);
752752

753-
if (propertySchema.get$ref() != null) {
754-
final Schema refSchema = OpenAPIUtil.getSchemaFromName(swaggerType, this.openAPI);
755-
if (refSchema != null && !isObjectSchema(refSchema) && !(refSchema instanceof ArraySchema || refSchema instanceof MapSchema) && refSchema.getEnum() == null) {
756-
swaggerType = super.getSchemaType(refSchema);
757-
}
758-
}
753+
swaggerType = getRefSchemaTargetType(propertySchema, swaggerType);
759754

760755
String type;
761756

@@ -775,6 +770,20 @@ public String getSchemaType(Schema propertySchema) {
775770
return toModelName(type);
776771
}
777772

773+
protected String getRefSchemaTargetType(Schema schema, String schemaType) {
774+
if (schemaType == null) {
775+
return null;
776+
}
777+
if (schema != null && schema.get$ref() != null) {
778+
final Schema refSchema = OpenAPIUtil.getSchemaFromName(schemaType, this.openAPI);
779+
if (refSchema != null && !isObjectSchema(refSchema) && !(refSchema instanceof ArraySchema || refSchema instanceof MapSchema) && refSchema.getEnum() == null) {
780+
schemaType = super.getSchemaType(refSchema);
781+
}
782+
}
783+
return schemaType;
784+
785+
}
786+
778787
/**
779788
* Provides C# strongly typed declaration for simple arrays of some type and arrays of arrays of some type.
780789
* @param arr The input array property
@@ -1090,7 +1099,11 @@ public void addHandlebarHelpers(Handlebars handlebars) {
10901099
@Override
10911100
protected void addCodegenContentParameters(CodegenOperation codegenOperation, List<CodegenContent> codegenContents) {
10921101
for (CodegenContent content : codegenContents) {
1093-
addParameters(content, codegenOperation.bodyParams);
1102+
if (content.getIsForm()) {
1103+
addParameters(content, codegenOperation.formParams);
1104+
} else {
1105+
addParameters(content, codegenOperation.bodyParams);
1106+
}
10941107
addParameters(content, codegenOperation.headerParams);
10951108
addParameters(content, codegenOperation.queryParams);
10961109
addParameters(content, codegenOperation.pathParams);

0 commit comments

Comments
 (0)