Skip to content

Commit

Permalink
Add support of model inheritance as a standard java single class exte…
Browse files Browse the repository at this point in the history
…nsion.
  • Loading branch information
SergeyLyakhov committed Feb 6, 2018
1 parent 87a4e29 commit ce0def7
Show file tree
Hide file tree
Showing 79 changed files with 172 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -228,4 +228,8 @@ public static enum ENUM_PROPERTY_NAMING_TYPE {camelCase, PascalCase, snake_case,

public static final String STRIP_PACKAGE_NAME = "stripPackageName";
public static final String STRIP_PACKAGE_NAME_DESC = "Whether to strip leading dot-separated packages from generated model classes";

public static final String SUPPORTS_MODEL_EXTENSION = "supportsModelExtension";
public static final String SUPPORTS_MODEL_EXTENSION_DESC = "Generates code with support of parent type extending (first declared) instead of fields inheritance.";

}
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ public class DefaultCodegen {
protected List<CliOption> cliOptions = new ArrayList<CliOption>();
protected boolean skipOverwrite;
protected boolean removeOperationIdPrefix;
// supports inheritance as model extension (first type reference will be used as parent entity)
protected boolean supportsModelExtension;
protected boolean supportsInheritance;
protected boolean supportsMixins;
protected Map<String, String> supportedLibraries = new LinkedHashMap<String, String>();
Expand Down Expand Up @@ -155,6 +157,10 @@ public void processOpts() {
this.setRemoveOperationIdPrefix(Boolean.valueOf(additionalProperties
.get(CodegenConstants.REMOVE_OPERATION_ID_PREFIX).toString()));
}

if (additionalProperties.containsKey(CodegenConstants.SUPPORTS_MODEL_EXTENSION)) {
this.setSupportsModelExtension(Boolean.valueOf(additionalProperties.get(CodegenConstants.SUPPORTS_MODEL_EXTENSION).toString()));
}
}

// override with any special post-processing for all models
Expand Down Expand Up @@ -854,6 +860,8 @@ public DefaultCodegen() {
cliOptions.add(CliOption.newBoolean(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, CodegenConstants
.ALLOW_UNICODE_IDENTIFIERS_DESC).defaultValue(Boolean.FALSE.toString()));

cliOptions.add(CliOption.newBoolean(CodegenConstants.SUPPORTS_MODEL_EXTENSION, CodegenConstants.SUPPORTS_MODEL_EXTENSION_DESC));

// initialize special character mapping
initalizeSpecialCharacterMapping();
}
Expand Down Expand Up @@ -1386,8 +1394,9 @@ public CodegenModel fromModel(String name, Model model, Map<String, Model> allDe
}
// set first interface with discriminator found as parent
if (parent == null
&& ((interfaceModel instanceof ModelImpl && ((ModelImpl) interfaceModel).getDiscriminator() != null)
|| (interfaceModel instanceof ComposedModel && isDiscriminatorInInterfaceTree((ComposedModel) interfaceModel, allDefinitions)))) {
&& (supportsModelExtension
|| (interfaceModel instanceof ModelImpl && ((ModelImpl) interfaceModel).getDiscriminator() != null)
|| (interfaceModel instanceof ComposedModel && isDiscriminatorInInterfaceTree((ComposedModel) interfaceModel, allDefinitions)))) {
parent = _interface;
} else {
final String interfaceRef = toModelName(_interface.getSimpleRef());
Expand Down Expand Up @@ -3369,6 +3378,14 @@ public void setRemoveOperationIdPrefix(boolean removeOperationIdPrefix) {
this.removeOperationIdPrefix = removeOperationIdPrefix;
}

public boolean isSupportsModelExtension() {
return supportsModelExtension;
}

public void setSupportsModelExtension(boolean supportsModelExtension) {
this.supportsModelExtension = supportsModelExtension;
}

/**
* All library templates supported.
* (key: library name, value: library description)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.languages.AkkaScalaClientCodegen;
import io.swagger.codegen.options.AkkaScalaClientOptionsProvider;

import io.swagger.codegen.options.OptionsProvider;
import mockit.Expectations;
import mockit.Tested;

Expand Down Expand Up @@ -34,6 +34,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setSourceFolder(AkkaScalaClientOptionsProvider.SOURCE_FOLDER_VALUE);
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.languages.AndroidClientCodegen;
import io.swagger.codegen.options.AndroidClientOptionsProvider;

import io.swagger.codegen.options.OptionsProvider;
import mockit.Expectations;
import mockit.Tested;

Expand Down Expand Up @@ -56,6 +56,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setAllowUnicodeIdentifiers(Boolean.valueOf(AndroidClientOptionsProvider.ALLOW_UNICODE_IDENTIFIERS_VALUE));
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.languages.BashClientCodegen;
import io.swagger.codegen.options.BashClientOptionsProvider;

import io.swagger.codegen.options.OptionsProvider;
import mockit.Expectations;
import mockit.Tested;

Expand Down Expand Up @@ -52,7 +52,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setAllowUnicodeIdentifiers(Boolean.valueOf(BashClientOptionsProvider.ALLOW_UNICODE_IDENTIFIERS_VALUE));
times = 1;

clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.languages.DartClientCodegen;
import io.swagger.codegen.options.DartClientOptionsProvider;

import io.swagger.codegen.options.OptionsProvider;
import mockit.Expectations;
import mockit.Tested;

Expand Down Expand Up @@ -40,6 +40,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setUseEnumExtension(Boolean.valueOf(DartClientOptionsProvider.USE_ENUM_EXTENSION));
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.languages.ElixirClientCodegen;
import io.swagger.codegen.options.ElixirClientOptionsProvider;
import io.swagger.codegen.options.PhpClientOptionsProvider;
import io.swagger.codegen.options.OptionsProvider;
import mockit.Expectations;
import mockit.Tested;

Expand All @@ -29,6 +29,8 @@ protected void setExpectations() {
// TODO
clientCodegen.setModuleName(ElixirClientOptionsProvider.INVOKER_PACKAGE_VALUE);
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.languages.HaskellHttpClientCodegen;
import io.swagger.codegen.options.HaskellHttpClientOptionsProvider;
import io.swagger.codegen.options.OptionsProvider;
import mockit.Expectations;
import mockit.Tested;

Expand Down Expand Up @@ -62,6 +63,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setConfigType(HaskellHttpClientOptionsProvider.CONFIG_TYPE);
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.languages.HaskellServantCodegen;
import io.swagger.codegen.options.HaskellServantOptionsProvider;

import io.swagger.codegen.options.OptionsProvider;
import mockit.Expectations;
import mockit.Tested;

Expand All @@ -31,6 +31,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setSortParamsByRequiredFlag(Boolean.valueOf(HaskellServantOptionsProvider.SORT_PARAMS_VALUE));
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import io.swagger.codegen.java.JavaClientOptionsTest;
import io.swagger.codegen.languages.JavaInflectorServerCodegen;
import io.swagger.codegen.options.JavaInflectorServerOptionsProvider;
import io.swagger.codegen.options.OptionsProvider;
import mockit.Expectations;
import mockit.Tested;

Expand Down Expand Up @@ -50,6 +51,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setSerializeBigDecimalAsString(true);
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setUseBeanValidation(Boolean.valueOf(JavaClientOptionsProvider.PERFORM_BEANVALIDATION));
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setUseSwaggerUI(Boolean.valueOf(JavaPlayFrameworkOptionsProvider.USE_SWAGGER_UI));
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setUseES6(Boolean.valueOf(JavaScriptOptionsProvider.USE_ES6_VALUE));
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ protected void setExpectations() {
.setUseSwaggerFeature(
Boolean.valueOf(JavaResteasyEapServerOptionsProvider.USE_SWAGGER_FEATURE));
times = 1;

clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ protected void setExpectations() {

clientCodegen.setUseBeanValidation(Boolean.valueOf(JavaResteasyServerOptionsProvider.USE_BEANVALIDATION));
times = 1;

clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import io.swagger.codegen.java.JavaClientOptionsTest;
import io.swagger.codegen.languages.JavaJerseyServerCodegen;
import io.swagger.codegen.options.JaxRSServerOptionsProvider;

import io.swagger.codegen.options.OptionsProvider;
import mockit.Expectations;
import mockit.Tested;

Expand Down Expand Up @@ -78,6 +78,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setUseTags(Boolean.valueOf(JaxRSServerOptionsProvider.USE_TAGS));
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ protected void setExpectations() {
clientCodegen.setUseLoggingFeatureForTests(
Boolean.valueOf(JavaCXFClientOptionsProvider.USE_LOGGING_FEATURE_FOR_TESTS));
times = 1;

clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ protected void setExpectations() {
clientCodegen.setAddConsumesProducesJson(
Boolean.valueOf(JavaCXFServerOptionsProvider.ADD_CONSUMES_PRODUCES_JSON));
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ protected void setExpectations() {
codegen.setEnumPropertyNaming(KotlinClientCodegenOptionsProvider.ENUM_PROPERTY_NAMING);
times = 1;
codegen.setDateLibrary(KotlinClientCodegenOptionsProvider.DATE_LIBRARY);
times = 1;
}};
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import io.swagger.codegen.AbstractOptionsTest;
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.languages.ScalaLagomServerCodegen;
import io.swagger.codegen.options.OptionsProvider;
import io.swagger.codegen.options.ScalaClientOptionsProvider;
import mockit.Expectations;
import mockit.Tested;
Expand Down Expand Up @@ -36,6 +37,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setSourceFolder(ScalaClientOptionsProvider.SOURCE_FOLDER_VALUE);
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.languages.LumenServerCodegen;
import io.swagger.codegen.options.LumenServerOptionsProvider;

import io.swagger.codegen.options.OptionsProvider;
import mockit.Expectations;
import mockit.Tested;

Expand Down Expand Up @@ -46,6 +46,8 @@ protected void setExpectations() {
times = 1;
clientCodegen.setArtifactVersion(LumenServerOptionsProvider.ARTIFACT_VERSION_VALUE);
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import io.swagger.codegen.CodegenConfig;
import io.swagger.codegen.languages.NodeJSServerCodegen;
import io.swagger.codegen.options.NodeJSServerOptionsProvider;

import io.swagger.codegen.options.OptionsProvider;
import mockit.Expectations;
import mockit.Tested;
import org.testng.annotations.Test;
Expand Down Expand Up @@ -33,6 +33,8 @@ protected void setExpectations() {
clientCodegen.setGoogleCloudFunctions(Boolean.valueOf(NodeJSServerOptionsProvider.GOOGLE_CLOUD_FUNCTIONS));
clientCodegen.setExportedName(NodeJSServerOptionsProvider.EXPORTED_NAME);
times = 1;
clientCodegen.setSupportsModelExtension(Boolean.valueOf(OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE));
times = 1;
}};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public Map<String, String> createOptions() {
.put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE)
.put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE)
.put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)
.put(CodegenConstants.SUPPORTS_MODEL_EXTENSION, OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public Map<String, String> createOptions() {
.put(CodegenConstants.LIBRARY, LIBRARY_VALUE)
.put(CodegenConstants.SERIALIZABLE_MODEL, SERIALIZABLE_MODEL_VALUE)
.put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)
.put(CodegenConstants.SUPPORTS_MODEL_EXTENSION, OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public Map<String, String> createOptions() {
.put(CodegenConstants.ENSURE_UNIQUE_PARAMS, ENSURE_UNIQUE_PARAMS_VALUE)
.put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE)
.put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)
.put(CodegenConstants.SUPPORTS_MODEL_EXTENSION, OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public Map<String, String> createOptions() {
.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, "false")
.put(CodegenConstants.ENSURE_UNIQUE_PARAMS, "false")
.put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)
.put(CodegenConstants.SUPPORTS_MODEL_EXTENSION, OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE)
.build();

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public Map<String, String> createOptions() {
.put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE)
.put(DartClientCodegen.USE_ENUM_EXTENSION, USE_ENUM_EXTENSION)
.put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE)
.put(CodegenConstants.SUPPORTS_MODEL_EXTENSION, OptionsProvider.SUPPORTS_MODEL_EXTENSION_VALUE)
.build();
}

Expand Down
Loading

0 comments on commit ce0def7

Please sign in to comment.