Skip to content

Commit 1002518

Browse files
authored
Merge branch 'master' into issues/429/add-micronaut-template
2 parents c4044bc + a8d6513 commit 1002518

File tree

103 files changed

+3057
-194
lines changed

Some content is hidden

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

103 files changed

+3057
-194
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.11-SNAPSHOT</version>
15+
<version>1.0.12-SNAPSHOT</version>
1616
<packaging>jar</packaging>
1717

1818
<build>
@@ -246,10 +246,10 @@
246246
</dependency>
247247
</dependencies>
248248
<properties>
249-
<swagger-codegen-version>3.0.11-SNAPSHOT</swagger-codegen-version>
250-
<swagger-parser-version>2.0.13</swagger-parser-version>
251-
<swagger-core-version>2.0.8</swagger-core-version>
252-
<jackson-version>2.9.8</jackson-version>
249+
<swagger-codegen-version>3.0.12-SNAPSHOT</swagger-codegen-version>
250+
<swagger-parser-version>2.0.14</swagger-parser-version>
251+
<swagger-core-version>2.0.9</swagger-core-version>
252+
<jackson-version>2.9.9</jackson-version>
253253
<scala-version>2.11.1</scala-version>
254254
<felix-version>3.3.0</felix-version>
255255
<commons-io-version>2.4</commons-io-version>

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

Lines changed: 45 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,6 +1102,9 @@ private static String getTypeOfSchema(Schema schema) {
11021102
return "UUID";
11031103
} else if (schema instanceof StringSchema) {
11041104
return "string";
1105+
} else if (schema instanceof ComposedSchema && schema.getExtensions() != null && schema.getExtensions().containsKey("x-model-name")) {
1106+
return schema.getExtensions().get("x-model-name").toString();
1107+
11051108
} else {
11061109
if (schema != null) {
11071110
if (SchemaTypeUtil.OBJECT_TYPE.equals(schema.getType()) && (hasSchemaProperties(schema) || hasTrueAdditionalProperties(schema))) {
@@ -1282,6 +1285,12 @@ public CodegenModel fromModel(String name, Schema schema, Map<String, Schema> al
12821285
if (schema instanceof ArraySchema) {
12831286
codegenModel.getVendorExtensions().put(IS_ARRAY_MODEL_EXT_NAME, Boolean.TRUE);
12841287
codegenModel.getVendorExtensions().put(IS_CONTAINER_EXT_NAME, Boolean.TRUE);
1288+
1289+
final Schema items = ((ArraySchema) schema).getItems();
1290+
if (items != null && items instanceof ComposedSchema) {
1291+
schemaHandler.configureComposedModelFromSchemaItems(codegenModel, ((ComposedSchema) items));
1292+
}
1293+
12851294
codegenModel.arrayModelType = fromProperty(name, schema).complexType;
12861295
addParentContainer(codegenModel, name, schema);
12871296
}
@@ -1682,7 +1691,6 @@ public CodegenProperty fromProperty(String name, Schema propertySchema) {
16821691
updatePropertyForMap(codegenProperty, cp);
16831692
} else if (propertySchema instanceof ComposedSchema) {
16841693
ComposedSchema composedProperty = (ComposedSchema) propertySchema;
1685-
Map<String, Schema> schemas = this.openAPI.getComponents() != null ? this.openAPI.getComponents().getSchemas() : null;
16861694
this.schemaHandler.createCodegenModel(composedProperty, codegenProperty);
16871695
} else if (propertySchema instanceof MapSchema && hasTrueAdditionalProperties(propertySchema)) {
16881696

@@ -1989,7 +1997,9 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
19891997
codegenOperation.returnBaseType = codegenProperty.baseType;
19901998
}
19911999
}
1992-
codegenOperation.examples = new ExampleGenerator(openAPI).generate(null, null, responseSchema);
2000+
if (!additionalProperties.containsKey(CodegenConstants.DISABLE_EXAMPLES_OPTION)) {
2001+
codegenOperation.examples = new ExampleGenerator(openAPI).generate(null, null, responseSchema);
2002+
}
19932003
codegenOperation.defaultResponse = toDefaultValue(responseSchema);
19942004
codegenOperation.returnType = codegenProperty.datatype;
19952005
boolean hasReference = schemas != null && schemas.containsKey(codegenOperation.returnBaseType);
@@ -2021,7 +2031,11 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
20212031
codegenOperation.returnTypeIsPrimitive = true;
20222032
}
20232033
}
2024-
addHeaders(methodResponse, codegenOperation.responseHeaders);
2034+
Map<String, Header> componentHeaders = null;
2035+
if ((openAPI != null) && (openAPI.getComponents() != null)) {
2036+
componentHeaders = openAPI.getComponents().getHeaders();
2037+
}
2038+
addHeaders(methodResponse, codegenOperation.responseHeaders, componentHeaders);
20252039
}
20262040
}
20272041

@@ -2249,7 +2263,11 @@ public CodegenResponse fromResponse(String responseCode, ApiResponse response) {
22492263
if (response.getExtensions() != null && !response.getExtensions().isEmpty()) {
22502264
codegenResponse.vendorExtensions.putAll(response.getExtensions());
22512265
}
2252-
addHeaders(response, codegenResponse.headers);
2266+
Map<String, Header> componentHeaders = null;
2267+
if ((openAPI != null) && (openAPI.getComponents() != null)) {
2268+
componentHeaders = openAPI.getComponents().getHeaders();
2269+
}
2270+
addHeaders(response, codegenResponse.headers, componentHeaders);
22532271
codegenResponse.getVendorExtensions().put(CodegenConstants.HAS_HEADERS_EXT_NAME, !codegenResponse.headers.isEmpty());
22542272

22552273
if (responseSchema != null) {
@@ -2710,6 +2728,13 @@ public List<CodegenSecurity> fromSecurity(Map<String, SecurityScheme> securitySc
27102728
} else if (SecurityScheme.Type.HTTP.equals(schemeDefinition.getType())) {
27112729
if ("bearer".equalsIgnoreCase(schemeDefinition.getScheme())) {
27122730
codegenSecurity.getVendorExtensions().put(CodegenConstants.IS_BEARER_EXT_NAME, Boolean.TRUE);
2731+
final Map<String, Object> extensions = schemeDefinition.getExtensions();
2732+
if (extensions != null && extensions.get("x-token-example") != null) {
2733+
final String tokenExample = extensions.get("x-token-example").toString();
2734+
if (StringUtils.isNotBlank(tokenExample)) {
2735+
codegenSecurity.getVendorExtensions().put("x-token-example", tokenExample);
2736+
}
2737+
}
27132738
} else {
27142739
codegenSecurity.getVendorExtensions().put(CodegenConstants.IS_BASIC_EXT_NAME, Boolean.TRUE);
27152740
}
@@ -2838,10 +2863,18 @@ protected List<Map<String, Object>> toExamples(Map<String, Object> examples) {
28382863
return output;
28392864
}
28402865

2841-
private void addHeaders(ApiResponse response, List<CodegenProperty> target) {
2866+
private void addHeaders(ApiResponse response, List<CodegenProperty> target, Map<String, Header> componentHeaders) {
28422867
if (response.getHeaders() != null) {
28432868
for (Map.Entry<String, Header> headers : response.getHeaders().entrySet()) {
2844-
target.add(fromProperty(headers.getKey(), headers.getValue().getSchema()));
2869+
Header header = headers.getValue();
2870+
Schema schema;
2871+
if ((header.get$ref() != null) && (componentHeaders != null)) {
2872+
String ref = OpenAPIUtil.getSimpleRef(header.get$ref());
2873+
schema = componentHeaders.get(ref).getSchema();
2874+
} else {
2875+
schema = header.getSchema();
2876+
}
2877+
target.add(fromProperty(headers.getKey(), schema));
28452878
}
28462879
}
28472880
}
@@ -2907,10 +2940,10 @@ public void addOperationToGroup(String tag, String resourcePath, Operation opera
29072940
co.baseName = tag;
29082941
}
29092942

2910-
private void addParentContainer(CodegenModel codegenModel, String name, Schema property) {
2911-
final CodegenProperty codegenProperty = fromProperty(name, property);
2943+
private void addParentContainer(CodegenModel codegenModel, String name, Schema schema) {
2944+
final CodegenProperty codegenProperty = fromProperty(name, schema);
29122945
addImport(codegenModel, codegenProperty.complexType);
2913-
codegenModel.parent = toInstantiationType(property);
2946+
codegenModel.parent = toInstantiationType(schema);
29142947
final String containerType = codegenProperty.containerType;
29152948
final String instantiationType = instantiationTypes.get(containerType);
29162949
if (instantiationType != null) {
@@ -3934,11 +3967,11 @@ protected void addConsumesInfo(Operation operation, CodegenOperation codegenOper
39343967
String bodyName = OpenAPIUtil.getSimpleRef(body.get$ref());
39353968
body = openAPI.getComponents().getRequestBodies().get(bodyName);
39363969
}
3937-
3970+
39383971
if (body.getContent() == null || body.getContent().isEmpty()) {
39393972
return;
39403973
}
3941-
3974+
39423975
Set<String> consumes = body.getContent().keySet();
39433976
List<Map<String, String>> mediaTypeList = new ArrayList<>();
39443977
int count = 0;
@@ -4084,7 +4117,7 @@ protected String getCollectionFormat(Parameter parameter) {
40844117
if (parameter.getExplode() == null || parameter.getExplode()) {
40854118
return "multi";
40864119
}
4087-
4120+
40884121
// Form is the default, if no style is specified.
40894122
if (parameter.getStyle() == null || Parameter.StyleEnum.FORM.equals(parameter.getStyle())) {
40904123
return "csv";

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

Lines changed: 83 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package io.swagger.codegen.v3.generators;
22

3-
import io.swagger.codegen.v3.*;
3+
import io.swagger.codegen.v3.CodegenModel;
4+
import io.swagger.codegen.v3.CodegenModelFactory;
5+
import io.swagger.codegen.v3.CodegenModelType;
6+
import io.swagger.codegen.v3.CodegenProperty;
47
import io.swagger.codegen.v3.generators.util.OpenAPIUtil;
58
import io.swagger.v3.oas.models.media.ComposedSchema;
9+
import io.swagger.v3.oas.models.media.ObjectSchema;
610
import io.swagger.v3.oas.models.media.Schema;
711
import org.apache.commons.lang3.StringUtils;
812

@@ -28,27 +32,63 @@ public void createCodegenModel(ComposedSchema composedProperty, CodegenProperty
2832
final List<Schema> anyOf = composedProperty.getAnyOf();
2933

3034
if (oneOf != null && !oneOf.isEmpty()) {
31-
final CodegenModel oneOfModel = createFromOneOfSchemas(oneOf);
32-
codegenProperty.vendorExtensions.put("oneOf-model", oneOfModel);
35+
if (!hasNonObjectSchema(oneOf)) {
36+
final CodegenModel oneOfModel = createFromOneOfSchemas(oneOf);
37+
codegenProperty.vendorExtensions.put("oneOf-model", oneOfModel);
38+
}
3339
}
3440
if (anyOf != null && !anyOf.isEmpty()) {
35-
final CodegenModel anyOfModel = createFromOneOfSchemas(anyOf);
36-
codegenProperty.vendorExtensions.put("anyOf-model", anyOfModel);
41+
if (!hasNonObjectSchema(anyOf)) {
42+
final CodegenModel anyOfModel = createFromOneOfSchemas(anyOf);
43+
codegenProperty.vendorExtensions.put("anyOf-model", anyOfModel);
44+
}
3745
}
3846

3947
}
4048

41-
public void configureOneOfModel(CodegenModel codegenModel, List<Schema> oneOf) {
42-
String oneOfModelName = "OneOf" + codegenModel.name;
43-
final CodegenModel oneOfModel = CodegenModelFactory.newInstance(CodegenModelType.MODEL);
44-
oneOfModel.name = oneOfModelName;
45-
oneOfModel.classname = codegenConfig.toModelName(oneOfModelName);
46-
oneOfModel.classVarName = codegenConfig.toVarName(oneOfModelName);
47-
oneOfModel.classFilename = codegenConfig.toModelFilename(oneOfModelName);
48-
oneOfModel.vendorExtensions.put("x-is-composed-model", Boolean.TRUE);
49+
public void configureComposedModelFromSchemaItems(CodegenModel codegenModel, ComposedSchema items) {
50+
List<Schema> oneOfList = items.getOneOf();
51+
if (oneOfList != null && !oneOfList.isEmpty()){
52+
String name = "OneOf" + codegenModel.name + "Items";
53+
final CodegenModel oneOfModel = createComposedModel(name);
54+
// setting name to be used as instance type on composed model.
55+
items.addExtension("x-model-name", codegenConfig.toModelName(name));
56+
57+
final List<String> modelNames = new ArrayList<>();
58+
for (Schema interfaceSchema : oneOfList) {
59+
if (StringUtils.isNotBlank(interfaceSchema.get$ref())) {
60+
String schemaName = OpenAPIUtil.getSimpleRef(interfaceSchema.get$ref());
61+
modelNames.add(codegenConfig.toModelName(schemaName));
62+
}
63+
}
64+
oneOfModel.vendorExtensions.put("x-model-names", modelNames);
65+
if (!modelNames.isEmpty()) {
66+
codegenModel.vendorExtensions.put("oneOf-model", oneOfModel);
67+
}
68+
}
69+
List<Schema> anyOfList = items.getAnyOf();
70+
if (anyOfList != null && !anyOfList.isEmpty()){
71+
String name = "AnyOf" + codegenModel.name + "Items";
72+
final CodegenModel anyOfModel = createComposedModel(name);
73+
items.addExtension("x-model-name", codegenConfig.toModelName(name));
74+
75+
final List<String> modelNames = new ArrayList<>();
76+
for (Schema interfaceSchema : anyOfList) {
77+
if (StringUtils.isNotBlank(interfaceSchema.get$ref())) {
78+
String schemaName = OpenAPIUtil.getSimpleRef(interfaceSchema.get$ref());
79+
modelNames.add(codegenConfig.toModelName(schemaName));
80+
}
81+
}
82+
anyOfModel.vendorExtensions.put("x-model-names", modelNames);
83+
if (!modelNames.isEmpty()) {
84+
codegenModel.vendorExtensions.put("anyOf-model", anyOfModel);
85+
}
86+
}
87+
}
4988

89+
public void configureOneOfModel(CodegenModel codegenModel, List<Schema> oneOf) {
90+
final CodegenModel oneOfModel = createComposedModel("OneOf" + codegenModel.name);
5091
final List<String> modelNames = new ArrayList<>();
51-
5292
for (Schema interfaceSchema : oneOf) {
5393
if (StringUtils.isNotBlank(interfaceSchema.get$ref())) {
5494
String schemaName = OpenAPIUtil.getSimpleRef(interfaceSchema.get$ref());
@@ -66,16 +106,8 @@ public void configureOneOfModel(CodegenModel codegenModel, List<Schema> oneOf) {
66106
}
67107

68108
public void configureAnyOfModel(CodegenModel codegenModel, List<Schema> anyOf) {
69-
String anyOfModelName = "AnyOf" + codegenModel.name;
70-
final CodegenModel anyOfModel = CodegenModelFactory.newInstance(CodegenModelType.MODEL);
71-
anyOfModel.name = anyOfModelName;
72-
anyOfModel.classname = codegenConfig.toModelName(anyOfModelName);
73-
anyOfModel.classVarName = codegenConfig.toVarName(anyOfModelName);
74-
anyOfModel.classFilename = codegenConfig.toModelFilename(anyOfModelName);
75-
anyOfModel.vendorExtensions.put("x-is-composed-model", Boolean.TRUE);
76-
109+
final CodegenModel anyOfModel = createComposedModel("AnyOf" + codegenModel.name);
77110
final List<String> modelNames = new ArrayList<>();
78-
79111
for (Schema interfaceSchema : anyOf) {
80112
if (StringUtils.isNotBlank(interfaceSchema.get$ref())) {
81113
String schemaName = OpenAPIUtil.getSimpleRef(interfaceSchema.get$ref());
@@ -96,16 +128,13 @@ public void configureOneOfModelFromProperty(CodegenProperty codegenProperty, Cod
96128
String name = "OneOf" + codegenConfig.toModelName(codegenModel.name);
97129
name += codegenConfig.toModelName(codegenProperty.name);
98130
CodegenModel oneOfModel = (CodegenModel) codegenProperty.vendorExtensions.get("oneOf-model");
99-
oneOfModel.name = name;
100-
oneOfModel.classname = codegenConfig.toModelName(name);
101-
oneOfModel.classVarName = codegenConfig.toVarName(name);
102-
oneOfModel.classFilename = codegenConfig.toModelFilename(name);
103-
oneOfModel.vendorExtensions.put("x-is-composed-model", Boolean.TRUE);
131+
this.configureModel(oneOfModel, name);
104132
codegenProperty.vendorExtensions.remove("oneOf-model");
105133

106134
codegenProperty.datatype = name;
107135
codegenProperty.datatypeWithEnum = name;
108136
codegenProperty.baseType = name;
137+
codegenProperty.complexType = name;
109138

110139
codegenModel.vendorExtensions.put("oneOf-model", oneOfModel);
111140
}
@@ -114,16 +143,13 @@ public void configureAnyOfModelFromProperty(CodegenProperty codegenProperty, Cod
114143
String name = "AnyOf" + codegenConfig.toModelName(codegenModel.name);
115144
name += codegenConfig.toModelName(codegenProperty.name);
116145
CodegenModel anyOfModel = (CodegenModel) codegenProperty.vendorExtensions.get("anyOf-model");
117-
anyOfModel.name = name;
118-
anyOfModel.classname = codegenConfig.toModelName(name);
119-
anyOfModel.classVarName = codegenConfig.toVarName(name);
120-
anyOfModel.classFilename = codegenConfig.toModelFilename(name);
121-
anyOfModel.vendorExtensions.put("x-is-composed-model", Boolean.TRUE);
146+
this.configureModel(anyOfModel, name);
122147
codegenProperty.vendorExtensions.remove("anyOf-model");
123148

124149
codegenProperty.datatype = name;
125150
codegenProperty.datatypeWithEnum = name;
126151
codegenProperty.baseType = name;
152+
codegenProperty.complexType = name;
127153

128154
codegenModel.vendorExtensions.put("anyOf-model", anyOfModel);
129155
}
@@ -141,4 +167,28 @@ private CodegenModel createFromOneOfSchemas(List<Schema> schemas) {
141167
codegenModel.vendorExtensions.put("x-model-names", modelNames);
142168
return codegenModel;
143169
}
170+
171+
private CodegenModel createComposedModel(String name) {
172+
final CodegenModel composedModel = CodegenModelFactory.newInstance(CodegenModelType.MODEL);
173+
this.configureModel(composedModel, name);
174+
return composedModel;
175+
}
176+
177+
private void configureModel(CodegenModel codegenModel, String name) {
178+
codegenModel.name = name;
179+
codegenModel.classname = codegenConfig.toModelName(name);
180+
codegenModel.classVarName = codegenConfig.toVarName(name);
181+
codegenModel.classFilename = codegenConfig.toModelFilename(name);
182+
codegenModel.vendorExtensions.put("x-is-composed-model", Boolean.TRUE);
183+
}
184+
185+
private boolean hasNonObjectSchema(List<Schema> schemas) {
186+
for (Schema schema : schemas) {
187+
boolean hasNonObjectSchema = (!(schema instanceof ObjectSchema)) || (schema.getProperties() != null && !schema.getProperties().isEmpty());
188+
if (hasNonObjectSchema) {
189+
return true;
190+
}
191+
}
192+
return false;
193+
}
144194
}

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,12 @@ public List<Map<String, String>> generate(Map<String, Object> examples, List<Str
157157
}
158158

159159
private Object resolveSchemaToExample(String propertyName, String mediaType, Schema schema, Set<String> processedModels) {
160-
// logger.debug("Resolving example for property {}...", schema);
160+
if (processedModels.contains(schema.get$ref())) {
161+
return schema.getExample();
162+
}
163+
if (StringUtils.isNotBlank(schema.get$ref())) {
164+
processedModels.add(schema.get$ref());
165+
}
161166
if (schema.getExample() != null) {
162167
logger.debug("Example set in swagger spec, returning example: '{}'", schema.getExample().toString());
163168
return schema.getExample();
@@ -269,10 +274,12 @@ private double randomNumber(Double min, Double max) {
269274
}
270275

271276
private Object resolveModelToExample(String name, String mediaType, Schema schema, Set<String> processedModels) {
272-
if (processedModels.contains(name)) {
277+
if (processedModels.contains(schema.get$ref())) {
273278
return schema.getExample();
274279
}
275-
processedModels.add(name);
280+
if (StringUtils.isNotBlank(schema.get$ref())) {
281+
processedModels.add(schema.get$ref());
282+
}
276283
Map<String, Object> values = new HashMap<>();
277284

278285
logger.debug("Resolving model '{}' to example", name);

src/main/java/io/swagger/codegen/v3/generators/html/StaticDocCodegen.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,9 @@ public String getHelp() {
8181
public void processOpts() {
8282
super.processOpts();
8383

84-
embeddedTemplateDir = templateDir = getTemplateDir();
84+
if (StringUtils.isBlank(templateDir)) {
85+
embeddedTemplateDir = templateDir = getTemplateDir();
86+
}
8587
}
8688

8789
@Override

0 commit comments

Comments
 (0)