Skip to content

Commit eacd7c7

Browse files
authored
Merge branch 'master' into master
2 parents 74eb4e0 + e64828e commit eacd7c7

File tree

82 files changed

+779
-240
lines changed

Some content is hidden

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

82 files changed

+779
-240
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: 59 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ public abstract class DefaultCodegenConfig implements CodegenConfig {
142142
protected Map<String, String> modelDocTemplateFiles = new HashMap<String, String>();
143143
protected Map<String, String> reservedWordsMappings = new HashMap<String, String>();
144144
protected String templateDir;
145+
protected String customTemplateDir;
145146
protected String templateVersion;
146147
protected String embeddedTemplateDir;
147148
protected String commonTemplateDir = "_common";
@@ -181,8 +182,9 @@ public List<CliOption> cliOptions() {
181182

182183
public void processOpts() {
183184
if (additionalProperties.containsKey(CodegenConstants.TEMPLATE_DIR)) {
184-
this.setTemplateDir((String) additionalProperties.get(CodegenConstants.TEMPLATE_DIR));
185+
this.customTemplateDir = additionalProperties.get(CodegenConstants.TEMPLATE_DIR).toString();
185186
}
187+
this.embeddedTemplateDir = this.templateDir = getTemplateDir();
186188

187189
if (additionalProperties.get(CodegenConstants.IGNORE_IMPORT_MAPPING_OPTION) != null) {
188190
setIgnoreImportMapping(Boolean.parseBoolean( additionalProperties.get(CodegenConstants.IGNORE_IMPORT_MAPPING_OPTION).toString()));
@@ -266,13 +268,17 @@ public Map<String, Object> postProcessAllModels(Map<String, Object> processedMod
266268
allModels.put(modelName, codegenModel);
267269
}
268270
}
271+
postProcessAllCodegenModels(allModels);
272+
return processedModels;
273+
}
274+
275+
protected void postProcessAllCodegenModels(Map<String, CodegenModel> allModels) {
269276
if (supportsInheritance) {
270277
for (String name : allModels.keySet()) {
271278
final CodegenModel codegenModel = allModels.get(name);
272279
fixUpParentAndInterfaces(codegenModel, allModels);
273280
}
274281
}
275-
return processedModels;
276282
}
277283

278284
/**
@@ -582,6 +588,10 @@ public String embeddedTemplateDir() {
582588
}
583589
}
584590

591+
public String customTemplateDir() {
592+
return this.customTemplateDir;
593+
}
594+
585595
public String getCommonTemplateDir() {
586596
return this.commonTemplateDir;
587597
}
@@ -1414,9 +1424,20 @@ else if (schema instanceof ComposedSchema) {
14141424
}
14151425
}
14161426
}
1427+
1428+
final List<Schema> oneOf = composed.getOneOf();
1429+
if (oneOf != null && !oneOf.isEmpty()) {
1430+
if (schema.getDiscriminator() != null) {
1431+
codegenModel.discriminator = schema.getDiscriminator();
1432+
if (codegenModel.discriminator != null && codegenModel.discriminator.getPropertyName() != null) {
1433+
codegenModel.discriminator.setPropertyName(toVarName(codegenModel.discriminator.getPropertyName()));
1434+
}
1435+
}
1436+
}
1437+
14171438
if (parent != null) {
14181439
codegenModel.parentSchema = parentName;
1419-
codegenModel.parent = toModelName(parentName);
1440+
codegenModel.parent = typeMapping.containsKey(parentName) ? typeMapping.get(parentName): toModelName(parentName);
14201441
addImport(codegenModel, codegenModel.parent);
14211442
if (allDefinitions != null) {
14221443
if (supportsInheritance) {
@@ -2144,8 +2165,6 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
21442165
requiredParams.add(formParameter.copy());
21452166
}
21462167
allParams.add(formParameter);
2147-
2148-
codegenContent.getParameters().add(formParameter.copy());
21492168
}
21502169
codegenContents.add(codegenContent);
21512170
}
@@ -2167,7 +2186,6 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation
21672186
}
21682187
}
21692188
foundSchemas.add(schema);
2170-
codegenContent.getParameters().add(bodyParam.copy());
21712189
codegenContents.add(codegenContent);
21722190
}
21732191
}
@@ -2399,8 +2417,11 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
23992417
codegenParameter.vendorExtensions.putAll(parameter.getExtensions());
24002418
}
24012419

2402-
if (parameter.getSchema() != null) {
2403-
Schema parameterSchema = parameter.getSchema();
2420+
Schema parameterSchema = parameter.getSchema();
2421+
if (parameterSchema == null) {
2422+
parameterSchema = getSchemaFromParameter(parameter);
2423+
}
2424+
if (parameterSchema != null) {
24042425
String collectionFormat = null;
24052426
if (parameterSchema instanceof ArraySchema) { // for array parameter
24062427
final ArraySchema arraySchema = (ArraySchema) parameterSchema;
@@ -2410,6 +2431,9 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
24102431
inner = new StringSchema().description("//TODO automatically added by swagger-codegen");
24112432
arraySchema.setItems(inner);
24122433

2434+
} else if (isObjectSchema(inner)) {
2435+
//fixme: codegenParameter.getVendorExtensions().put(CodegenConstants.HAS_INNER_OBJECT_NAME, Boolean.TRUE);
2436+
codegenParameter.getVendorExtensions().put("x-has-inner-object", Boolean.TRUE);
24132437
}
24142438

24152439
collectionFormat = getCollectionFormat(parameter);
@@ -2662,6 +2686,9 @@ else if (schema instanceof ArraySchema) {
26622686
if (inner == null) {
26632687
inner = new StringSchema().description("//TODO automatically added by swagger-codegen");
26642688
arraySchema.setItems(inner);
2689+
} else if (isObjectSchema(inner)) {
2690+
//fixme: codegenParameter.getVendorExtensions().put(CodegenConstants.HAS_INNER_OBJECT_NAME, Boolean.TRUE);
2691+
codegenParameter.getVendorExtensions().put("x-has-inner-object", Boolean.TRUE);
26652692
}
26662693

26672694
CodegenProperty codegenProperty = fromProperty("property", schema);
@@ -3051,7 +3078,7 @@ protected void addImport(CodegenModel m, String type) {
30513078
}
30523079
}
30533080

3054-
private void addVars(CodegenModel codegenModel, Map<String, Schema> properties, List<String> required) {
3081+
protected void addVars(CodegenModel codegenModel, Map<String, Schema> properties, List<String> required) {
30553082
addVars(codegenModel, properties, required, null, null);
30563083
}
30573084

@@ -3962,6 +3989,21 @@ protected Schema getSchemaFromResponse(ApiResponse response) {
39623989
return schema;
39633990
}
39643991

3992+
protected Schema getSchemaFromParameter(Parameter parameter) {
3993+
if (parameter.getContent() == null || parameter.getContent().isEmpty()) {
3994+
return null;
3995+
}
3996+
Schema schema = null;
3997+
for (String contentType : parameter.getContent().keySet()) {
3998+
schema = parameter.getContent().get(contentType).getSchema();
3999+
if (schema != null) {
4000+
schema.addExtension("x-content-type", contentType);
4001+
}
4002+
break;
4003+
}
4004+
return schema;
4005+
}
4006+
39654007
protected Parameter getParameterFromRef(String ref, OpenAPI openAPI) {
39664008
String parameterName = ref.substring(ref.lastIndexOf('/') + 1);
39674009
Map<String, Parameter> parameterMap = openAPI.getComponents().getParameters();
@@ -4237,7 +4279,7 @@ protected void configuresParameterForMediaType(CodegenOperation codegenOperation
42374279
codegenOperation.getContents().add(content);
42384280
return;
42394281
}
4240-
this.addCodegenContentParemeters(codegenOperation, codegenContents);
4282+
this.addCodegenContentParameters(codegenOperation, codegenContents);
42414283
for (CodegenContent content : codegenContents) {
42424284
if (ensureUniqueParams) {
42434285
ensureUniqueParameters(content.getParameters());
@@ -4259,7 +4301,7 @@ protected void configuresParameterForMediaType(CodegenOperation codegenOperation
42594301
codegenOperation.getContents().addAll(codegenContents);
42604302
}
42614303

4262-
protected void addParemeters(CodegenContent codegenContent, List<CodegenParameter> codegenParameters) {
4304+
protected void addParameters(CodegenContent codegenContent, List<CodegenParameter> codegenParameters) {
42634305
if (codegenParameters == null || codegenParameters.isEmpty()) {
42644306
return;
42654307
}
@@ -4268,12 +4310,13 @@ protected void addParemeters(CodegenContent codegenContent, List<CodegenParamete
42684310
}
42694311
}
42704312

4271-
protected void addCodegenContentParemeters(CodegenOperation codegenOperation, List<CodegenContent> codegenContents) {
4313+
protected void addCodegenContentParameters(CodegenOperation codegenOperation, List<CodegenContent> codegenContents) {
42724314
for (CodegenContent content : codegenContents) {
4273-
addParemeters(content, codegenOperation.headerParams);
4274-
addParemeters(content, codegenOperation.queryParams);
4275-
addParemeters(content, codegenOperation.pathParams);
4276-
addParemeters(content, codegenOperation.cookieParams);
4315+
addParameters(content, codegenOperation.bodyParams);
4316+
addParameters(content, codegenOperation.headerParams);
4317+
addParameters(content, codegenOperation.queryParams);
4318+
addParameters(content, codegenOperation.pathParams);
4319+
addParameters(content, codegenOperation.cookieParams);
42774320
}
42784321
}
42794322

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,9 @@ protected CodegenModel processArrayItemSchema(CodegenModel codegenModel, ArraySc
124124
final Schema itemsSchema = arraySchema.getItems();
125125
if (itemsSchema instanceof ComposedSchema) {
126126
final CodegenModel composedModel = this.processComposedSchema(codegenModel.name + ARRAY_ITEMS_SUFFIX, (ComposedSchema) itemsSchema, allModels);
127+
if (composedModel == null) {
128+
return null;
129+
}
127130
this.updateArrayModel(codegenModel, composedModel.name, arraySchema);
128131
return composedModel;
129132
}

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,6 @@ public void useDateTimeOffset(boolean flag) {
221221
public void processOpts() {
222222
super.processOpts();
223223

224-
if (StringUtils.isBlank(templateDir)) {
225-
embeddedTemplateDir = templateDir = getTemplateDir();
226-
}
227-
228224
// {{packageVersion}}
229225
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_VERSION)) {
230226
setPackageVersion((String) additionalProperties.get(CodegenConstants.PACKAGE_VERSION));
@@ -1077,13 +1073,19 @@ public void addHandlebarHelpers(Handlebars handlebars) {
10771073
}
10781074

10791075
@Override
1080-
protected void addCodegenContentParemeters(CodegenOperation codegenOperation, List<CodegenContent> codegenContents) {
1076+
protected void addCodegenContentParameters(CodegenOperation codegenOperation, List<CodegenContent> codegenContents) {
10811077
for (CodegenContent content : codegenContents) {
1082-
addParemeters(content, codegenOperation.headerParams);
1083-
addParemeters(content, codegenOperation.queryParams);
1084-
addParemeters(content, codegenOperation.pathParams);
1078+
addParameters(content, codegenOperation.bodyParams);
1079+
addParameters(content, codegenOperation.headerParams);
1080+
addParameters(content, codegenOperation.queryParams);
1081+
addParameters(content, codegenOperation.pathParams);
10851082
}
10861083
}
1084+
1085+
@Override
1086+
public boolean checkAliasModel() {
1087+
return true;
1088+
}
10871089
/*
10881090
TODO: uncomment if/when switching to stream for file upload
10891091
@Override

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
public class CsharpDotNet2ClientCodegen extends AbstractCSharpCodegen {
1111
public static final String CLIENT_PACKAGE = "clientPackage";
12+
public static final String USE_CSPROJ_FILE = "useCsProjFile";
1213
protected String clientPackage = "IO.Swagger.Client";
1314
protected String apiDocPath = "docs/";
1415
protected String modelDocPath = "docs/";
@@ -68,6 +69,9 @@ public void processOpts() {
6869
supportingFiles.add(new SupportingFile("packages.config.mustache", "vendor", "packages.config"));
6970
supportingFiles.add(new SupportingFile("compile-mono.sh.mustache", "", "compile-mono.sh"));
7071
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
72+
if (additionalProperties.containsKey(USE_CSPROJ_FILE) && Boolean.parseBoolean(additionalProperties.get(USE_CSPROJ_FILE).toString())) {
73+
supportingFiles.add(new SupportingFile("csproj.mustache", "", clientPackage + ".csproj"));
74+
}
7175

7276
}
7377

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

Lines changed: 31 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
}
@@ -561,4 +583,9 @@ public CodegenModel fromModel(String name, Schema schema, Map<String, Schema> al
561583
public ISchemaHandler getSchemaHandler() {
562584
return new GoSchemaHandler(this);
563585
}
586+
587+
@Override
588+
public boolean checkAliasModel() {
589+
return true;
590+
}
564591
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,6 @@ public String getDefaultTemplateDir() {
3939
public void processOpts() {
4040
super.processOpts();
4141

42-
if (StringUtils.isBlank(templateDir)) {
43-
embeddedTemplateDir = templateDir = getTemplateDir();
44-
}
45-
4642
if (this.additionalProperties.containsKey("packageName")) {
4743
this.setPackageName((String)this.additionalProperties.get("packageName"));
4844
} else {

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,6 @@ public String getDefaultTemplateDir() {
7373
public void processOpts() {
7474
super.processOpts();
7575

76-
if (StringUtils.isBlank(templateDir)) {
77-
embeddedTemplateDir = templateDir = getTemplateDir();
78-
}
79-
8076
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) {
8177
setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME));
8278
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,6 @@ public String getHelp() {
8080
@Override
8181
public void processOpts() {
8282
super.processOpts();
83-
84-
if (StringUtils.isBlank(templateDir)) {
85-
embeddedTemplateDir = templateDir = getTemplateDir();
86-
}
8783
}
8884

8985
@Override

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,6 @@ public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
149149
return objs;
150150
}
151151

152-
@Override
153-
public void processOpts() {
154-
super.processOpts();
155-
if (StringUtils.isBlank(templateDir)) {
156-
embeddedTemplateDir = templateDir = getTemplateDir();
157-
}
158-
}
159-
160152
@Override
161153
public void preprocessOpenAPI(OpenAPI openAPI) {
162154
super.preprocessOpenAPI(openAPI);

0 commit comments

Comments
 (0)