Fix support for 'class' properties in Java codegen (#4237)

* Fix support for 'class' properties in Java codegen

Currently Java codegen works successfully for property named 'class' but
fails on '_class', '__class', etc, because of 'Object.getClass()'
overloading.

This fix is intended to avoid all Object method overloading cases.

* Regenerated samples for Java petstore-security-test
This commit is contained in:
menchauser
2016-11-22 20:18:40 +04:00
committed by wing328
parent 4e2c037e21
commit 6ebc2fc051
41 changed files with 1040 additions and 636 deletions

View File

@@ -32,4 +32,11 @@ public class AbstractJavaCodegenTest {
Assert.assertEquals("__", fakeJavaCodegen.toEnumVarName("_,.", "String"));
}
@Test
public void toVarNameShouldAvoidOverloadingGetClassMethod() throws Exception {
Assert.assertEquals("propertyClass", fakeJavaCodegen.toVarName("class"));
Assert.assertEquals("propertyClass", fakeJavaCodegen.toVarName("_class"));
Assert.assertEquals("propertyClass", fakeJavaCodegen.toVarName("__class"));
}
}

View File

@@ -522,4 +522,29 @@ public class JavaModelTest {
Assert.assertEquals(cm.name, name);
Assert.assertEquals(cm.classname, expectedName);
}
@DataProvider(name = "classProperties")
public static Object[][] classProperties() {
return new Object[][] {
{"class", "getPropertyClass", "setPropertyClass", "propertyClass"},
{"_class", "getPropertyClass", "setPropertyClass", "propertyClass"},
{"__class", "getPropertyClass", "setPropertyClass", "propertyClass"}
};
}
@Test(dataProvider = "classProperties", description = "handle 'class' properties")
public void classPropertyTest(String baseName, String getter, String setter, String name) {
final Model model = new ModelImpl()
.description("a sample model")
.property(baseName, new StringProperty());
final DefaultCodegen codegen = new JavaClientCodegen();
final CodegenModel cm = codegen.fromModel("sample", model);
final CodegenProperty property = cm.vars.get(0);
Assert.assertEquals(property.baseName, baseName);
Assert.assertEquals(property.getter, getter);
Assert.assertEquals(property.setter, setter);
Assert.assertEquals(property.name, name);
}
}