Skip to content

Commit 775ab3c

Browse files
authored
Merge branch 'master' into patch-1
2 parents 826dc2a + b4f1c3d commit 775ab3c

File tree

825 files changed

+4267
-47774
lines changed

Some content is hidden

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

825 files changed

+4267
-47774
lines changed

pom.xml

Lines changed: 4 additions & 4 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.19-SNAPSHOT</version>
15+
<version>1.0.21-SNAPSHOT</version>
1616
<packaging>jar</packaging>
1717

1818
<build>
@@ -252,9 +252,9 @@
252252
</dependency>
253253
</dependencies>
254254
<properties>
255-
<swagger-codegen-version>3.0.19-SNAPSHOT</swagger-codegen-version>
256-
<swagger-parser-version>2.0.19-SNAPSHOT</swagger-parser-version>
257-
<swagger-core-version>2.1.2-SNAPSHOT</swagger-core-version>
255+
<swagger-codegen-version>3.0.21-SNAPSHOT</swagger-codegen-version>
256+
<swagger-parser-version>2.0.20</swagger-parser-version>
257+
<swagger-core-version>2.1.2</swagger-core-version>
258258
<jackson-version>2.10.3</jackson-version>
259259
<scala-version>2.11.1</scala-version>
260260
<felix-version>3.3.0</felix-version>

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

Lines changed: 71 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@
7878
import java.io.File;
7979
import java.io.IOException;
8080
import java.io.InputStream;
81+
import java.io.UnsupportedEncodingException;
82+
import java.net.URLDecoder;
83+
import java.nio.charset.StandardCharsets;
8184
import java.util.ArrayList;
8285
import java.util.Arrays;
8386
import java.util.Collections;
@@ -106,7 +109,6 @@
106109
import static io.swagger.codegen.v3.generators.CodegenHelper.getTypeMappings;
107110
import static io.swagger.codegen.v3.generators.CodegenHelper.initalizeSpecialCharacterMapping;
108111
import static io.swagger.codegen.v3.generators.handlebars.ExtensionHelper.getBooleanValue;
109-
import static io.swagger.codegen.v3.utils.ModelUtils.processCodegenModels;
110112

111113
public abstract class DefaultCodegenConfig implements CodegenConfig {
112114
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultCodegenConfig.class);
@@ -265,11 +267,47 @@ public Map<String, Object> postProcessAllModels(Map<String, Object> processedMod
265267
}
266268
}
267269
if (supportsInheritance) {
268-
processCodegenModels(allModels);
270+
for (String name : allModels.keySet()) {
271+
final CodegenModel codegenModel = allModels.get(name);
272+
fixUpParentAndInterfaces(codegenModel, allModels);
273+
}
269274
}
270275
return processedModels;
271276
}
272277

278+
/**
279+
* Fix up all parent and interface CodegenModel references.
280+
* @param allModels
281+
*/
282+
protected void fixUpParentAndInterfaces(CodegenModel codegenModel, Map<String, CodegenModel> allModels) {
283+
if (codegenModel.parent != null) {
284+
codegenModel.parentModel = allModels.get(codegenModel.parent);
285+
}
286+
if (codegenModel.interfaces != null && !codegenModel.interfaces.isEmpty()) {
287+
codegenModel.interfaceModels = new ArrayList<CodegenModel>(codegenModel.interfaces.size());
288+
for (String intf : codegenModel.interfaces) {
289+
CodegenModel intfModel = allModels.get(intf);
290+
if (intfModel != null) {
291+
codegenModel.interfaceModels.add(intfModel);
292+
}
293+
}
294+
}
295+
CodegenModel parent = codegenModel.parentModel;
296+
// if a discriminator exists on the parent, don't add this child to the inheritance hierarchy
297+
// TODO Determine what to do if the parent discriminator name == the grandparent discriminator name
298+
while (parent != null) {
299+
if (parent.children == null) {
300+
parent.children = new ArrayList<CodegenModel>();
301+
}
302+
parent.children.add(codegenModel);
303+
if (parent.discriminator == null) {
304+
parent = allModels.get(parent.parent);
305+
} else {
306+
parent = null;
307+
}
308+
}
309+
}
310+
273311
// override with any special post-processing
274312
@SuppressWarnings("static-method")
275313
public Map<String, Object> postProcessModels(Map<String, Object> objs) {
@@ -1241,6 +1279,9 @@ public String toModelName(final String name) {
12411279
* @return Codegen Model object
12421280
*/
12431281
public CodegenModel fromModel(String name, Schema schema) {
1282+
if (openAPI != null && openAPI.getComponents() != null && openAPI.getComponents().getSchemas() != null) {
1283+
return fromModel(name, schema, openAPI.getComponents().getSchemas());
1284+
}
12441285
return fromModel(name, schema, null);
12451286
}
12461287

@@ -2059,6 +2100,11 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
20592100
Schema schema = body.getContent().get(contentType).getSchema();
20602101
if (schema != null && StringUtils.isNotBlank(schema.get$ref())) {
20612102
schemaName = OpenAPIUtil.getSimpleRef(schema.get$ref());
2103+
try {
2104+
schemaName = URLDecoder.decode(schemaName, StandardCharsets.UTF_8.name());
2105+
} catch (UnsupportedEncodingException e) {
2106+
LOGGER.error("Could not decoded string: " + schemaName, e);
2107+
}
20622108
schema = schemas.get(schemaName);
20632109
}
20642110
final CodegenContent codegenContent = new CodegenContent(contentType);
@@ -2133,31 +2179,6 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
21332179
param = getParameterFromRef(param.get$ref(), openAPI);
21342180
}
21352181
CodegenParameter codegenParameter = fromParameter(param, imports);
2136-
// rename parameters to make sure all of them have unique names
2137-
if (ensureUniqueParams) {
2138-
while (true) {
2139-
boolean exists = false;
2140-
for (CodegenParameter cp : allParams) {
2141-
if (codegenParameter.paramName != null && codegenParameter.paramName.equals(cp.paramName)) {
2142-
exists = true;
2143-
break;
2144-
}
2145-
}
2146-
if (exists) {
2147-
codegenParameter.paramName = generateNextName(codegenParameter.paramName);
2148-
} else {
2149-
break;
2150-
}
2151-
}
2152-
}
2153-
2154-
// set isPrimitiveType and baseType for allParams
2155-
/*if (languageSpecificPrimitives.contains(p.baseType)) {
2156-
p.isPrimitiveType = true;
2157-
p.baseType = getSwaggerType(p);
2158-
}*/
2159-
2160-
21612182
allParams.add(codegenParameter);
21622183
// Issue #2561 (neilotoole) : Moved setting of is<Type>Param flags
21632184
// from here to fromParameter().
@@ -2170,9 +2191,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
21702191
} else if (param instanceof CookieParameter || "cookie".equalsIgnoreCase(param.getIn())) {
21712192
cookieParams.add(codegenParameter.copy());
21722193
}
2173-
if (!codegenParameter.required) {
2174-
codegenOperation.getVendorExtensions().put(CodegenConstants.HAS_OPTIONAL_PARAMS_EXT_NAME, Boolean.TRUE);
2175-
} else {
2194+
if (codegenParameter.required) {
21762195
requiredParams.add(codegenParameter.copy());
21772196
}
21782197
}
@@ -2219,6 +2238,10 @@ public int compare(CodegenParameter one, CodegenParameter another) {
22192238
boolean hasRequiredParams = codegenOperation.requiredParams.size() > 0;
22202239
codegenOperation.getVendorExtensions().put(CodegenConstants.HAS_REQUIRED_PARAMS_EXT_NAME, hasRequiredParams);
22212240

2241+
boolean hasOptionalParams = codegenOperation.allParams.stream()
2242+
.anyMatch(codegenParameter -> !codegenParameter.required);
2243+
codegenOperation.getVendorExtensions().put(CodegenConstants.HAS_OPTIONAL_PARAMS_EXT_NAME, hasOptionalParams);
2244+
22222245
// set Restful Flag
22232246
codegenOperation.getVendorExtensions().put(CodegenConstants.IS_RESTFUL_SHOW_EXT_NAME, codegenOperation.getIsRestfulShow());
22242247
codegenOperation.getVendorExtensions().put(CodegenConstants.IS_RESTFUL_INDEX_EXT_NAME, codegenOperation.getIsRestfulIndex());
@@ -4216,6 +4239,10 @@ protected void configuresParameterForMediaType(CodegenOperation codegenOperation
42164239
}
42174240
this.addCodegenContentParemeters(codegenOperation, codegenContents);
42184241
for (CodegenContent content : codegenContents) {
4242+
if (ensureUniqueParams) {
4243+
ensureUniqueParameters(content.getParameters());
4244+
}
4245+
42194246
Collections.sort(content.getParameters(), (CodegenParameter one, CodegenParameter another) -> {
42204247
if (one.required == another.required){
42214248
return 0;
@@ -4250,6 +4277,20 @@ protected void addCodegenContentParemeters(CodegenOperation codegenOperation, Li
42504277
}
42514278
}
42524279

4280+
protected void ensureUniqueParameters(List<CodegenParameter> codegenParameters) {
4281+
if (codegenParameters == null || codegenParameters.isEmpty()) {
4282+
return;
4283+
}
4284+
for (CodegenParameter codegenParameter : codegenParameters) {
4285+
long count = codegenParameters.stream()
4286+
.filter(codegenParam -> codegenParam.paramName.equals(codegenParameter.paramName))
4287+
.count();
4288+
if (count > 1l) {
4289+
codegenParameter.paramName = generateNextName(codegenParameter.paramName);
4290+
}
4291+
}
4292+
}
4293+
42534294
protected void setParameterNullable(CodegenParameter parameter, CodegenProperty property) {
42544295
parameter.nullable = property.nullable;
42554296
}

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

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
public class SchemaHandler implements ISchemaHandler {
1919

20+
public static final String ALL_OF_PREFFIX = "AllOf";
2021
public static final String ONE_OF_PREFFIX = "OneOf";
2122
public static final String ANY_OF_PREFFIX = "AnyOf";
2223
public static final String ARRAY_ITEMS_SUFFIX = "Items";
@@ -99,7 +100,13 @@ protected CodegenModel processComposedSchema(String name, ComposedSchema compose
99100
}
100101

101102
protected CodegenModel processComposedSchema(String codegenModelName, CodegenProperty codegenProperty, ComposedSchema composedSchema, Map<String, CodegenModel> allModels) {
102-
List<Schema> schemas = composedSchema.getOneOf();
103+
List<Schema> schemas = composedSchema.getAllOf();
104+
if (schemas != null && !schemas.isEmpty()) {
105+
final CodegenModel composedModel = codegenConfig.fromModel(ALL_OF_PREFFIX + codegenModelName, composedSchema);
106+
this.updatePropertyDataType(codegenProperty, composedModel);
107+
return composedModel;
108+
}
109+
schemas = composedSchema.getOneOf();
103110
CodegenModel composedModel = this.createComposedModel(ONE_OF_PREFFIX + codegenModelName, schemas);
104111
if (composedModel == null) {
105112
schemas = composedSchema.getAnyOf();
@@ -109,17 +116,17 @@ protected CodegenModel processComposedSchema(String codegenModelName, CodegenPro
109116
}
110117
}
111118
this.addInterfaces(schemas, composedModel, allModels);
112-
codegenProperty.datatype = composedModel.getClassname();
113-
codegenProperty.datatypeWithEnum = composedModel.getClassname();
114-
codegenProperty.baseType = composedModel.getClassname();
115-
codegenProperty.complexType = composedModel.getClassname();
119+
this.updatePropertyDataType(codegenProperty, composedModel);
116120
return composedModel;
117121
}
118122

119123
protected CodegenModel processArrayItemSchema(CodegenModel codegenModel, ArraySchema arraySchema, Map<String, CodegenModel> allModels) {
120124
final Schema itemsSchema = arraySchema.getItems();
121125
if (itemsSchema instanceof ComposedSchema) {
122126
final CodegenModel composedModel = this.processComposedSchema(codegenModel.name + ARRAY_ITEMS_SUFFIX, (ComposedSchema) itemsSchema, allModels);
127+
if (composedModel == null) {
128+
return null;
129+
}
123130
this.updateArrayModel(codegenModel, composedModel.name, arraySchema);
124131
return composedModel;
125132
}
@@ -221,4 +228,11 @@ protected void updateArrayModel(CodegenModel codegenModel, String schemaName, Ar
221228

222229
arraySchema.setItems(items);
223230
}
231+
232+
private void updatePropertyDataType(CodegenProperty codegenProperty, CodegenModel composedModel) {
233+
codegenProperty.datatype = composedModel.getClassname();
234+
codegenProperty.datatypeWithEnum = composedModel.getClassname();
235+
codegenProperty.baseType = composedModel.getClassname();
236+
codegenProperty.complexType = composedModel.getClassname();
237+
}
224238
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import io.swagger.codegen.v3.CodegenModel;
99
import io.swagger.codegen.v3.CodegenOperation;
1010
import io.swagger.codegen.v3.CodegenProperty;
11-
import io.swagger.codegen.v3.ISchemaHandler;
1211
import io.swagger.codegen.v3.generators.DefaultCodegenConfig;
1312
import io.swagger.codegen.v3.generators.handlebars.csharp.CsharpHelper;
1413
import io.swagger.codegen.v3.generators.handlebars.lambda.CamelCaseLambda;
@@ -536,6 +535,7 @@ public void updateCodegenPropertyEnum(CodegenProperty var) {
536535
public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
537536
super.postProcessOperations(objs);
538537
if (objs != null) {
538+
boolean hasAuthMethods = false;
539539
Map<String, Object> operations = (Map<String, Object>) objs.get("operations");
540540
if (operations != null) {
541541
List<CodegenOperation> ops = (List<CodegenOperation>) operations.get("operation");
@@ -584,8 +584,12 @@ public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
584584
}
585585

586586
processOperation(operation);
587+
if (getBooleanValue(operation, CodegenConstants.HAS_AUTH_METHODS_EXT_NAME)) {
588+
hasAuthMethods = true;
589+
}
587590
}
588591
}
592+
objs.put("hasAuthMethods", hasAuthMethods);
589593
}
590594

591595
return objs;

0 commit comments

Comments
 (0)