Skip to content

Commit 76ea8a8

Browse files
authored
Merge pull request #685 from swagger-api/codegen-issue-8148
detect property with same name but different types between base class…
2 parents 07c30bb + 4b92c52 commit 76ea8a8

File tree

2 files changed

+65
-3
lines changed

2 files changed

+65
-3
lines changed

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

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@
109109
import static io.swagger.codegen.v3.generators.CodegenHelper.getTypeMappings;
110110
import static io.swagger.codegen.v3.generators.CodegenHelper.initalizeSpecialCharacterMapping;
111111
import static io.swagger.codegen.v3.generators.handlebars.ExtensionHelper.getBooleanValue;
112-
import static io.swagger.codegen.v3.utils.ModelUtils.processCodegenModels;
113112

114113
public abstract class DefaultCodegenConfig implements CodegenConfig {
115114
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultCodegenConfig.class);
@@ -268,11 +267,47 @@ public Map<String, Object> postProcessAllModels(Map<String, Object> processedMod
268267
}
269268
}
270269
if (supportsInheritance) {
271-
processCodegenModels(allModels);
270+
for (String name : allModels.keySet()) {
271+
final CodegenModel codegenModel = allModels.get(name);
272+
fixUpParentAndInterfaces(codegenModel, allModels);
273+
}
272274
}
273275
return processedModels;
274276
}
275277

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+
276311
// override with any special post-processing
277312
@SuppressWarnings("static-method")
278313
public Map<String, Object> postProcessModels(Map<String, Object> objs) {

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

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import io.swagger.codegen.v3.CodegenOperation;
99
import io.swagger.codegen.v3.CodegenParameter;
1010
import io.swagger.codegen.v3.CodegenProperty;
11-
import io.swagger.codegen.v3.generators.handlebars.java.JavaHelper;
1211
import io.swagger.codegen.v3.generators.DefaultCodegenConfig;
12+
import io.swagger.codegen.v3.generators.handlebars.java.JavaHelper;
1313
import io.swagger.v3.oas.models.OpenAPI;
1414
import io.swagger.v3.oas.models.Operation;
1515
import io.swagger.v3.oas.models.PathItem;
@@ -954,6 +954,33 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert
954954
}
955955
}
956956

957+
@Override
958+
protected void fixUpParentAndInterfaces(CodegenModel codegenModel, Map<String, CodegenModel> allModels) {
959+
super.fixUpParentAndInterfaces(codegenModel, allModels);
960+
if (codegenModel.vars == null || codegenModel.vars.isEmpty() || codegenModel.parentModel == null) {
961+
return;
962+
}
963+
CodegenModel parentModel = codegenModel.parentModel;
964+
965+
for (CodegenProperty codegenProperty : codegenModel.vars) {
966+
while (parentModel != null) {
967+
if (parentModel.vars == null || parentModel.vars.isEmpty()) {
968+
parentModel = parentModel.parentModel;
969+
continue;
970+
}
971+
boolean hasConflict = parentModel.vars.stream()
972+
.anyMatch(parentProperty -> parentProperty.name.equals(codegenProperty.name) && !parentProperty.datatype.equals(codegenProperty.datatype));
973+
if (hasConflict) {
974+
codegenProperty.name = toVarName(codegenModel.name + "_" + codegenProperty.name);
975+
codegenProperty.getter = toGetter(codegenProperty.name);
976+
codegenProperty.setter = toGetter(codegenProperty.name);
977+
break;
978+
}
979+
parentModel = parentModel.parentModel;
980+
}
981+
}
982+
}
983+
957984
@Override
958985
public void postProcessParameter(CodegenParameter parameter) { }
959986

0 commit comments

Comments
 (0)