Skip to content

Commit a48fc03

Browse files
authored
Merge pull request #940 from atlassian-forks/child-getter-name-clash
Fixes getter and setter name problems for subtypes
2 parents 07c653c + 9024a7a commit a48fc03

File tree

2 files changed

+132
-2
lines changed

2 files changed

+132
-2
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,11 +1022,15 @@ protected void fixUpParentAndInterfaces(CodegenModel codegenModel, Map<String, C
10221022
continue;
10231023
}
10241024
boolean hasConflict = parentModel.vars.stream()
1025-
.anyMatch(parentProperty -> parentProperty.name.equals(codegenProperty.name) && !parentProperty.datatype.equals(codegenProperty.datatype));
1025+
.anyMatch(parentProperty ->
1026+
(parentProperty.name.equals(codegenProperty.name) ||
1027+
parentProperty.getGetter().equals(codegenProperty.getGetter()) ||
1028+
parentProperty.getSetter().equals(codegenProperty.getSetter()) &&
1029+
!parentProperty.datatype.equals(codegenProperty.datatype)));
10261030
if (hasConflict) {
10271031
codegenProperty.name = toVarName(codegenModel.name + "_" + codegenProperty.name);
10281032
codegenProperty.getter = toGetter(codegenProperty.name);
1029-
codegenProperty.setter = toGetter(codegenProperty.name);
1033+
codegenProperty.setter = toSetter(codegenProperty.name);
10301034
break;
10311035
}
10321036
parentModel = parentModel.parentModel;

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

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import io.swagger.codegen.v3.CodegenArgument;
44
import io.swagger.codegen.v3.CodegenConstants;
5+
import io.swagger.codegen.v3.CodegenModel;
6+
import io.swagger.codegen.v3.CodegenProperty;
57
import io.swagger.codegen.v3.CodegenType;
68
import io.swagger.v3.oas.models.OpenAPI;
79
import io.swagger.v3.oas.models.Operation;
@@ -10,7 +12,11 @@
1012
import org.testng.Assert;
1113
import org.testng.annotations.Test;
1214

15+
import java.util.ArrayList;
16+
import java.util.Collections;
17+
import java.util.HashMap;
1318
import java.util.List;
19+
import java.util.Map;
1420

1521
public class AbstractJavaCodegenTest {
1622

@@ -163,6 +169,126 @@ public void testPackageNamesSetWithAdditionalProperties() throws Exception {
163169
Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG), Boolean.TRUE);
164170
}
165171

172+
@Test
173+
public void testFixUpParentAndInterfaces_propertyNameDifferent_getterSetterSame_typeDifferent() {
174+
AbstractJavaCodegen codegen = new P_AbstractJavaCodegen();
175+
176+
CodegenModel parentModel = new CodegenModel();
177+
parentModel.name = "parent_type";
178+
CodegenModel childModel = new CodegenModel();
179+
childModel.name = "child_type";
180+
childModel.parentModel = parentModel;
181+
parentModel.children = new ArrayList<>();
182+
183+
CodegenProperty parentValueProperty1 = new CodegenProperty();
184+
parentValueProperty1.name = "value";
185+
parentValueProperty1.baseName = "value";
186+
parentValueProperty1.getter = "getValue";
187+
parentValueProperty1.setter = "setValue";
188+
parentValueProperty1.datatype = "value_type";
189+
CodegenProperty parentValueProperty2 = new CodegenProperty();
190+
parentValueProperty2.name = "other_value";
191+
parentValueProperty2.baseName = "other_value";
192+
parentValueProperty2.getter = "getOtherValue";
193+
parentValueProperty2.setter = "setOtherValue";
194+
parentValueProperty2.datatype = "other_type";
195+
parentModel.vars = new ArrayList<>();
196+
parentModel.vars.add(parentValueProperty1);
197+
parentModel.vars.add(parentValueProperty2);
198+
199+
CodegenProperty childValueProperty1 = new CodegenProperty();
200+
childValueProperty1.name = "_value"; // different to parent "value"
201+
childValueProperty1.baseName = "_value";
202+
childValueProperty1.getter = "getValue"; // same as parent "getValue"
203+
childValueProperty1.setter = "setValue"; // same as parent "setValue"
204+
childValueProperty1.datatype = "different_type"; // different to parent "value_type"
205+
CodegenProperty childValueProperty2 = new CodegenProperty();
206+
childValueProperty2.name = "third_value";
207+
childValueProperty2.baseName = "third_value";
208+
childValueProperty2.getter = "getThirdValue";
209+
childValueProperty2.setter = "setThirdValue";
210+
childValueProperty2.datatype = "other_type";
211+
childModel.vars = new ArrayList<>();
212+
childModel.vars.add(childValueProperty1);
213+
childModel.vars.add(childValueProperty2);
214+
215+
Map<String, CodegenModel> allModels = new HashMap<>();
216+
allModels.put(parentModel.name, parentModel);
217+
allModels.put(childModel.name, childModel);
218+
219+
codegen.fixUpParentAndInterfaces(childModel, Collections.EMPTY_MAP);
220+
Assert.assertEquals(childModel.vars.get(0).baseName, "_value");
221+
Assert.assertEquals(childModel.vars.get(0).name, "childTypeValue");
222+
Assert.assertEquals(childModel.vars.get(0).getter, "getChildTypeValue");
223+
Assert.assertEquals(childModel.vars.get(0).setter, "setChildTypeValue");
224+
225+
// unchanged
226+
Assert.assertEquals(childModel.vars.get(1).baseName, childValueProperty2.baseName);
227+
Assert.assertEquals(childModel.vars.get(1).name, childValueProperty2.name);
228+
Assert.assertEquals(childModel.vars.get(1).getter, childValueProperty2.getter);
229+
Assert.assertEquals(childModel.vars.get(1).setter, childValueProperty2.setter);
230+
}
231+
232+
@Test
233+
public void testFixUpParentAndInterfaces_propertyNameSame_getterSetterSame_typeDifferent() {
234+
AbstractJavaCodegen codegen = new P_AbstractJavaCodegen();
235+
236+
CodegenModel parentModel = new CodegenModel();
237+
parentModel.name = "parent_type";
238+
CodegenModel childModel = new CodegenModel();
239+
childModel.name = "child_type";
240+
childModel.parentModel = parentModel;
241+
parentModel.children = new ArrayList<>();
242+
243+
CodegenProperty parentValueProperty1 = new CodegenProperty();
244+
parentValueProperty1.name = "value";
245+
parentValueProperty1.baseName = "value";
246+
parentValueProperty1.getter = "getValue";
247+
parentValueProperty1.setter = "setValue";
248+
parentValueProperty1.datatype = "value_type";
249+
CodegenProperty parentValueProperty2 = new CodegenProperty();
250+
parentValueProperty2.name = "other_value";
251+
parentValueProperty2.baseName = "other_value";
252+
parentValueProperty2.getter = "getOtherValue";
253+
parentValueProperty2.setter = "setOtherValue";
254+
parentValueProperty2.datatype = "other_type";
255+
parentModel.vars = new ArrayList<>();
256+
parentModel.vars.add(parentValueProperty1);
257+
parentModel.vars.add(parentValueProperty2);
258+
259+
CodegenProperty childValueProperty1 = new CodegenProperty();
260+
childValueProperty1.name = "value"; // same as parent "value"
261+
childValueProperty1.baseName = "value";
262+
childValueProperty1.getter = "getValue"; // same as parent "getValue"
263+
childValueProperty1.setter = "setValue"; // same as parent "setValue"
264+
childValueProperty1.datatype = "different_type"; // different to parent "value_type"
265+
CodegenProperty childValueProperty2 = new CodegenProperty();
266+
childValueProperty2.name = "third_value";
267+
childValueProperty2.baseName = "third_value";
268+
childValueProperty2.getter = "getThirdValue";
269+
childValueProperty2.setter = "setThirdValue";
270+
childValueProperty2.datatype = "other_type";
271+
childModel.vars = new ArrayList<>();
272+
childModel.vars.add(childValueProperty1);
273+
childModel.vars.add(childValueProperty2);
274+
275+
Map<String, CodegenModel> allModels = new HashMap<>();
276+
allModels.put(parentModel.name, parentModel);
277+
allModels.put(childModel.name, childModel);
278+
279+
codegen.fixUpParentAndInterfaces(childModel, Collections.EMPTY_MAP);
280+
Assert.assertEquals(childModel.vars.get(0).baseName, "value");
281+
Assert.assertEquals(childModel.vars.get(0).name, "childTypeValue");
282+
Assert.assertEquals(childModel.vars.get(0).getter, "getChildTypeValue");
283+
Assert.assertEquals(childModel.vars.get(0).setter, "setChildTypeValue");
284+
285+
// unchanged
286+
Assert.assertEquals(childModel.vars.get(1).baseName, childValueProperty2.baseName);
287+
Assert.assertEquals(childModel.vars.get(1).name, childValueProperty2.name);
288+
Assert.assertEquals(childModel.vars.get(1).getter, childValueProperty2.getter);
289+
Assert.assertEquals(childModel.vars.get(1).setter, childValueProperty2.setter);
290+
}
291+
166292
public static class P_AbstractJavaCodegen extends AbstractJavaCodegen {
167293
@Override
168294
public String getArgumentsLocation() {

0 commit comments

Comments
 (0)