Skip to content

Commit 92b71d3

Browse files
authored
Merge pull request #694 from swagger-api/new_generators_tweaks
New generators tweaks
2 parents 0ff7306 + 29627a5 commit 92b71d3

File tree

9 files changed

+112
-18
lines changed

9 files changed

+112
-18
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@
253253
</dependencies>
254254
<properties>
255255
<swagger-codegen-version>3.0.21-SNAPSHOT</swagger-codegen-version>
256-
<swagger-parser-version>2.0.20</swagger-parser-version>
256+
<swagger-parser-version>2.0.21-SNAPSHOT</swagger-parser-version>
257257
<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>

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,13 +266,17 @@ public Map<String, Object> postProcessAllModels(Map<String, Object> processedMod
266266
allModels.put(modelName, codegenModel);
267267
}
268268
}
269+
postProcessAllCodegenModels(allModels);
270+
return processedModels;
271+
}
272+
273+
protected void postProcessAllCodegenModels(Map<String, CodegenModel> allModels) {
269274
if (supportsInheritance) {
270275
for (String name : allModels.keySet()) {
271276
final CodegenModel codegenModel = allModels.get(name);
272277
fixUpParentAndInterfaces(codegenModel, allModels);
273278
}
274279
}
275-
return processedModels;
276280
}
277281

278282
/**
@@ -2410,6 +2414,9 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
24102414
inner = new StringSchema().description("//TODO automatically added by swagger-codegen");
24112415
arraySchema.setItems(inner);
24122416

2417+
} else if (isObjectSchema(inner)) {
2418+
//fixme: codegenParameter.getVendorExtensions().put(CodegenConstants.HAS_INNER_OBJECT_NAME, Boolean.TRUE);
2419+
codegenParameter.getVendorExtensions().put("x-has-inner-object", Boolean.TRUE);
24132420
}
24142421

24152422
collectionFormat = getCollectionFormat(parameter);
@@ -2662,6 +2669,9 @@ else if (schema instanceof ArraySchema) {
26622669
if (inner == null) {
26632670
inner = new StringSchema().description("//TODO automatically added by swagger-codegen");
26642671
arraySchema.setItems(inner);
2672+
} else if (isObjectSchema(inner)) {
2673+
//fixme: codegenParameter.getVendorExtensions().put(CodegenConstants.HAS_INNER_OBJECT_NAME, Boolean.TRUE);
2674+
codegenParameter.getVendorExtensions().put("x-has-inner-object", Boolean.TRUE);
26652675
}
26662676

26672677
CodegenProperty codegenProperty = fromProperty("property", schema);

src/main/java/io/swagger/codegen/v3/generators/go/AbstractGoCodegen.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99
import io.swagger.codegen.v3.CodegenProperty;
1010
import io.swagger.codegen.v3.ISchemaHandler;
1111
import io.swagger.codegen.v3.generators.DefaultCodegenConfig;
12+
import io.swagger.codegen.v3.generators.SchemaHandler;
1213
import io.swagger.codegen.v3.generators.util.OpenAPIUtil;
1314
import io.swagger.v3.core.util.Yaml;
1415
import io.swagger.v3.oas.models.OpenAPI;
1516
import io.swagger.v3.oas.models.media.ArraySchema;
17+
import io.swagger.v3.oas.models.media.ComposedSchema;
1618
import io.swagger.v3.oas.models.media.MapSchema;
1719
import io.swagger.v3.oas.models.media.Schema;
1820
import org.apache.commons.lang3.StringUtils;
@@ -90,7 +92,7 @@ public AbstractGoCodegen() {
9092
typeMapping.put("file", "*os.File");
9193
// map binary to string as a workaround
9294
// the correct solution is to use []byte
93-
typeMapping.put("binary", "string");
95+
typeMapping.put("binary", "*os.File");
9496
typeMapping.put("ByteArray", "string");
9597
typeMapping.put("object", "interface{}");
9698
typeMapping.put("UUID", "string");
@@ -243,12 +245,32 @@ public String getTypeDeclaration(Schema schema) {
243245
if(schema instanceof ArraySchema) {
244246
ArraySchema arraySchema = (ArraySchema) schema;
245247
Schema inner = arraySchema.getItems();
246-
return "[]" + getTypeDeclaration(inner);
248+
if (inner instanceof ComposedSchema && schema.getExtensions() != null && schema.getExtensions().containsKey("x-schema-name")) {
249+
final ComposedSchema composedSchema = (ComposedSchema) inner;
250+
final String prefix;
251+
if (composedSchema.getAllOf() != null && !composedSchema.getAllOf().isEmpty()) {
252+
prefix = SchemaHandler.ALL_OF_PREFFIX;
253+
} else if (composedSchema.getOneOf() != null && !composedSchema.getOneOf().isEmpty()) {
254+
prefix = SchemaHandler.ONE_OF_PREFFIX;
255+
} else {
256+
prefix = SchemaHandler.ANY_OF_PREFFIX;
257+
}
258+
return "[]" + toModelName(prefix + schema.getExtensions().remove("x-schema-name")) + SchemaHandler.ARRAY_ITEMS_SUFFIX;
259+
} else {
260+
return "[]" + getTypeDeclaration(inner);
261+
}
247262
} else if (schema instanceof MapSchema && hasSchemaProperties(schema)) {
248263
MapSchema mapSchema = (MapSchema) schema;
249264
Schema inner = (Schema) mapSchema.getAdditionalProperties();
250265

251266
return getSchemaType(schema) + "[string]" + getTypeDeclaration(inner);
267+
} else if (schema.get$ref() != null) {
268+
final String simpleRefName = OpenAPIUtil.getSimpleRef(schema.get$ref());
269+
final Schema refSchema = OpenAPIUtil.getSchemaFromName(simpleRefName, this.openAPI);
270+
if (refSchema != null && (refSchema instanceof ArraySchema || refSchema instanceof MapSchema)) {
271+
refSchema.addExtension("x-schema-name", simpleRefName);
272+
return getTypeDeclaration(refSchema);
273+
}
252274
}
253275
// Not using the supertype invocation, because we want to UpperCamelize
254276
// the type.
@@ -271,7 +293,7 @@ public String getSchemaType(Schema schema) {
271293

272294
if (schema.get$ref() != null) {
273295
final Schema refSchema = OpenAPIUtil.getSchemaFromName(schemaType, this.openAPI);
274-
if (refSchema != null && !isObjectSchema(refSchema)) {
296+
if (refSchema != null && !isObjectSchema(refSchema) && refSchema.getEnum() == null) {
275297
schemaType = super.getSchemaType(refSchema);
276298
}
277299
}
@@ -547,7 +569,7 @@ public CodegenModel fromModel(String name, Schema schema, Map<String, Schema> al
547569
if (!getBooleanValue(codegenModel, CodegenConstants.IS_ALIAS_EXT_NAME)) {
548570
boolean isAlias = schema instanceof ArraySchema
549571
|| schema instanceof MapSchema
550-
|| (!isObjectSchema(schema));
572+
|| (!isObjectSchema(schema) && schema.getEnum() == null);
551573

552574
codegenModel.getVendorExtensions().put(CodegenConstants.IS_ALIAS_EXT_NAME, isAlias);
553575
}

src/main/java/io/swagger/codegen/v3/generators/typescript/TypeScriptFetchClientCodegen.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.io.File;
44
import java.text.SimpleDateFormat;
55
import java.util.Date;
6+
import java.util.Map;
7+
import java.util.Set;
68

79
import io.swagger.codegen.v3.CliOption;
810
import io.swagger.codegen.v3.CodegenConstants;
@@ -15,6 +17,8 @@
1517
import io.swagger.v3.oas.models.media.MapSchema;
1618
import io.swagger.v3.oas.models.media.ObjectSchema;
1719
import io.swagger.v3.oas.models.media.Schema;
20+
import io.swagger.v3.oas.models.parameters.Parameter;
21+
import io.swagger.v3.oas.models.parameters.RequestBody;
1822
import io.swagger.v3.parser.util.SchemaTypeUtil;
1923

2024
import org.apache.commons.lang3.StringUtils;
@@ -116,6 +120,29 @@ public String getTypeDeclaration(Schema propertySchema) {
116120
}
117121
}
118122

123+
@Override
124+
public CodegenParameter fromParameter(Parameter parameter, Set<String> imports) {
125+
final CodegenParameter codegenParameter = super.fromParameter(parameter, imports);
126+
if (parameter.getSchema() != null && isObjectSchema(parameter.getSchema())) {
127+
//fixme: codegenParameter.getVendorExtensions().put(CodegenConstants.IS_OBJECT_EXT_NAME, Boolean.TRUE);
128+
codegenParameter.getVendorExtensions().put("x-is-object", Boolean.TRUE);
129+
}
130+
return codegenParameter;
131+
}
132+
133+
@Override
134+
public CodegenParameter fromRequestBody(RequestBody body, String name, Schema schema, Map<String, Schema> schemas, Set<String> imports) {
135+
final CodegenParameter codegenParameter = super.fromRequestBody(body, name, schema, schemas, imports);
136+
if (schema == null) {
137+
schema = getSchemaFromBody(body);
138+
}
139+
if (schema != null && isObjectSchema(schema)) {
140+
//fixme: codegenParameter.getVendorExtensions().put(CodegenConstants.IS_OBJECT_EXT_NAME, Boolean.TRUE);
141+
codegenParameter.getVendorExtensions().put("x-is-object", Boolean.TRUE);
142+
}
143+
return codegenParameter;
144+
}
145+
119146
@Override
120147
public String getSchemaType(Schema schema) {
121148
String swaggerType = super.getSchemaType(schema);

src/main/resources/handlebars/JavaSpring/api.mustache

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,4 +135,5 @@ public interface {{classname}} {
135135
{{/contents}}
136136
{{/operation}}
137137
}
138-
{{/operations}}
138+
{{/operations}}
139+

src/main/resources/handlebars/go/api.mustache

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,22 @@ type {{classname}}Service service
3434
*/
3535
{{#hasOptionalParams}}
3636

37-
type {{{classname}}}{{{nickname}}}Opts struct { {{#parameters}}{{^required}}
38-
{{#isPrimitiveType}} {{vendorExtensions.x-exportParamName}} optional.{{vendorExtensions.x-optionalDataType}}{{/isPrimitiveType}}{{^isPrimitiveType}} {{vendorExtensions.x-exportParamName}} optional.Interface{{/isPrimitiveType}}{{/required}}{{/parameters}}
37+
type {{{classname}}}{{{nickname}}}Opts struct {
38+
{{#parameters}}
39+
{{^required}}
40+
{{#isPrimitiveType}}
41+
{{#isFile}}
42+
{{vendorExtensions.x-exportParamName}} optional.Interface
43+
{{/isFile}}
44+
{{^isFile}}
45+
{{vendorExtensions.x-exportParamName}} optional.{{vendorExtensions.x-optionalDataType}}
46+
{{/isFile}}
47+
{{/isPrimitiveType}}
48+
{{^isPrimitiveType}}
49+
{{vendorExtensions.x-exportParamName}} optional.Interface
50+
{{/isPrimitiveType}}
51+
{{/required}}
52+
{{/parameters}}
3953
}
4054

4155
{{/hasOptionalParams}}

src/main/resources/handlebars/go/model.mustache

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
{{>partial_header}}
22
package {{packageName}}
3-
{{#models}}{{#imports}}
4-
import ({{/imports}}{{#imports}}
5-
"{{import}}"{{/imports}}{{#imports}}
3+
{{#models}}
4+
{{#imports}}
5+
{{#@first}}
6+
import (
7+
{{/@first}}
8+
"{{import}}"
9+
{{#@last}}
610
)
7-
{{/imports}}{{#model}}{{#isEnum}}{{#description}}// {{{classname}}} : {{{description}}}{{/description}}
11+
{{/@last}}
12+
{{/imports}}
13+
{{#model}}{{#isEnum}}{{#description}}// {{{classname}}} : {{{description}}}{{/description}}
814
type {{{classname}}} {{^format}}{{dataType}}{{/format}}{{#format}}{{{format}}}{{/format}}
915

1016
// List of {{{name}}}

src/main/resources/handlebars/typescript-fetch/api_test.mustache

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,26 @@ describe("{{classname}}", () => {
1515
});
1616

1717
{{#operation}}
18+
{{#contents}}
19+
{{#@first}}
1820
test("{{operationId}}", () => {
19-
{{#allParams}}
20-
const {{{paramName}}}: {{^isPrimitiveType}}api.{{/isPrimitiveType}}{{{dataType}}} = {{>api_test_default_value}}
21-
{{/allParams}}
22-
return expect(instance.{{operationId}}({{#allParams}}{{{paramName}}}, {{/allParams}}{})).resolves.toBe(null)
21+
{{#parameters}}
22+
{{#isObject}}
23+
const {{{paramName}}}: api.{{{dataType}}} = {{>api_test_default_value}}
24+
{{/isObject}}
25+
{{^isObject}}
26+
{{#hasInnerObject}}
27+
const {{{paramName}}}: Array<api.{{{baseType}}}> = {{>api_test_default_value}}
28+
{{/hasInnerObject}}
29+
{{^hasInnerObject}}
30+
const {{{paramName}}}: {{{dataType}}} = {{>api_test_default_value}}
31+
{{/hasInnerObject}}
32+
{{/isObject}}
33+
{{/parameters}}
34+
return expect(instance.{{operationId}}({{#parameters}}{{{paramName}}}, {{/parameters}}{})).resolves.toBe(null)
2335
})
36+
{{/@first}}
37+
{{/contents}}
2438
{{/operation}}
2539
})
2640

src/main/resources/handlebars/typescript-fetch/modelEnum.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
export enum {{classname}} {
77
{{#allowableValues}}
88
{{#enumVars}}
9-
{{{name}}} = <any> {{{value}}}{{^-last}},{{/-last}}
9+
{{{name}}} = <any> {{{value}}}{{^@last}},{{/@last}}
1010
{{/enumVars}}
1111
{{/allowableValues}}
1212
}

0 commit comments

Comments
 (0)