Skip to content

Commit a06b92d

Browse files
AttilaW-Keytilesfrantuma
authored andcommitted
fixing Issue #1066 - added unit test to prove the failure and the code fix
1 parent e584b4c commit a06b92d

File tree

2 files changed

+72
-2
lines changed

2 files changed

+72
-2
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,10 +1033,11 @@ protected void fixUpParentAndInterfaces(CodegenModel codegenModel, Map<String, C
10331033
if (codegenModel.vars == null || codegenModel.vars.isEmpty() || codegenModel.parentModel == null) {
10341034
return;
10351035
}
1036-
CodegenModel parentModel = codegenModel.parentModel;
10371036

10381037
for (CodegenProperty codegenProperty : codegenModel.vars) {
1039-
while (parentModel != null) {
1038+
CodegenModel parentModel = codegenModel.parentModel;
1039+
1040+
while (parentModel != null) {
10401041
if (parentModel.vars == null || parentModel.vars.isEmpty()) {
10411042
parentModel = parentModel.parentModel;
10421043
continue;
@@ -1049,6 +1050,7 @@ protected void fixUpParentAndInterfaces(CodegenModel codegenModel, Map<String, C
10491050
!parentProperty.datatype.equals(codegenProperty.datatype)));
10501051
if (hasConflict) {
10511052
codegenProperty.name = toVarName(codegenModel.name + "_" + codegenProperty.name);
1053+
codegenProperty.nameInCamelCase = camelize(codegenProperty.name, false);
10521054
codegenProperty.getter = toGetter(codegenProperty.name);
10531055
codegenProperty.setter = toSetter(codegenProperty.name);
10541056
break;

src/test/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegenTest.java

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,74 @@ public void testFixUpParentAndInterfaces_propertyNameSame_getterSetterSame_typeD
288288
Assert.assertEquals(childModel.vars.get(1).getter, childValueProperty2.getter);
289289
Assert.assertEquals(childModel.vars.get(1).setter, childValueProperty2.setter);
290290
}
291+
292+
/**
293+
* Issue #1066 - testing case when the conflicting property is actually not the first one but the
294+
* second
295+
*/
296+
@Test
297+
public void testFixUpParentAndInterfaces_2ndproperty_propertyNameSame_getterSetterSame_typeDifferent() {
298+
AbstractJavaCodegen codegen = new P_AbstractJavaCodegen();
299+
300+
CodegenModel parentModel = new CodegenModel();
301+
parentModel.name = "parent_type";
302+
CodegenModel childModel = new CodegenModel();
303+
childModel.name = "child_type";
304+
childModel.parentModel = parentModel;
305+
parentModel.children = new ArrayList<>();
306+
307+
CodegenProperty parentValueProperty1 = new CodegenProperty();
308+
parentValueProperty1.name = "value";
309+
parentValueProperty1.baseName = "value";
310+
parentValueProperty1.getter = "getValue";
311+
parentValueProperty1.setter = "setValue";
312+
parentValueProperty1.datatype = "value_type";
313+
CodegenProperty parentValueProperty2 = new CodegenProperty();
314+
parentValueProperty2.name = "other_value";
315+
parentValueProperty2.baseName = "other_value";
316+
parentValueProperty2.getter = "getOtherValue";
317+
parentValueProperty2.setter = "setOtherValue";
318+
parentValueProperty2.datatype = "other_type";
319+
parentModel.vars = new ArrayList<>();
320+
parentModel.vars.add(parentValueProperty1);
321+
parentModel.vars.add(parentValueProperty2);
322+
323+
CodegenProperty childValueProperty1 = new CodegenProperty();
324+
childValueProperty1.name = "third_value";
325+
childValueProperty1.baseName = "third_value";
326+
childValueProperty1.nameInCamelCase = "ThirdValue";
327+
childValueProperty1.getter = "getThirdValue";
328+
childValueProperty1.setter = "setThirdValue";
329+
childValueProperty1.datatype = "other_type";
330+
CodegenProperty childValueProperty2 = new CodegenProperty();
331+
childValueProperty2.name = "value"; // same as parent "value"
332+
childValueProperty2.baseName = "value";
333+
childValueProperty2.getter = "getValue"; // same as parent "getValue"
334+
childValueProperty2.setter = "setValue"; // same as parent "setValue"
335+
childValueProperty2.datatype = "different_type"; // different to parent "value_type"
336+
337+
childModel.vars = new ArrayList<>();
338+
childModel.vars.add(childValueProperty1);
339+
childModel.vars.add(childValueProperty2);
340+
341+
Map<String, CodegenModel> allModels = new HashMap<>();
342+
allModels.put(parentModel.name, parentModel);
343+
allModels.put(childModel.name, childModel);
344+
345+
codegen.fixUpParentAndInterfaces(childModel, Collections.EMPTY_MAP);
346+
Assert.assertEquals(childModel.vars.get(1).baseName, "value");
347+
Assert.assertEquals(childModel.vars.get(1).name, "childTypeValue");
348+
Assert.assertEquals(childModel.vars.get(1).nameInCamelCase, "ChildTypeValue");
349+
Assert.assertEquals(childModel.vars.get(1).getter, "getChildTypeValue");
350+
Assert.assertEquals(childModel.vars.get(1).setter, "setChildTypeValue");
351+
352+
// unchanged
353+
Assert.assertEquals(childModel.vars.get(0).baseName, childValueProperty1.baseName);
354+
Assert.assertEquals(childModel.vars.get(0).name, childValueProperty1.name);
355+
Assert.assertEquals(childModel.vars.get(0).nameInCamelCase, childValueProperty1.nameInCamelCase);
356+
Assert.assertEquals(childModel.vars.get(0).getter, childValueProperty1.getter);
357+
Assert.assertEquals(childModel.vars.get(0).setter, childValueProperty1.setter);
358+
}
291359

292360
public static class P_AbstractJavaCodegen extends AbstractJavaCodegen {
293361
@Override

0 commit comments

Comments
 (0)