Skip to content

Commit 1368ef1

Browse files
author
Aleksandar Stojsavljevic
committed
Fixes #152, Fixes #288
Collision with java keywords Import Statement for BigDecimal/BigInteger not generated for request body
1 parent 5ad8ccc commit 1368ef1

35 files changed

Lines changed: 2711 additions & 8 deletions

File tree

src/main/java/com/phoenixnap/oss/ramlplugin/raml2code/helpers/NamingHelper.java

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static org.apache.commons.lang3.StringUtils.upperCase;
2222

2323
import java.util.ArrayList;
24+
import java.util.Arrays;
2425
import java.util.List;
2526
import java.util.Map;
2627
import java.util.regex.Matcher;
@@ -57,6 +58,14 @@ public class NamingHelper {
5758

5859
private static final String ILLEGAL_CHARACTER_REGEX = "[^0-9a-zA-Z_$]";
5960

61+
private static final String KEYWORDS[] = { "abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const",
62+
"continue", "default", "do", "double", "else", "extends", "false", "final", "finally", "float", "for", "goto", "if",
63+
"implements", "import", "instanceof", "int", "interface", "long", "native", "new", "null", "package", "private", "protected",
64+
"public", "return", "short", "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient",
65+
"true", "try", "void", "volatile", "while" };
66+
67+
private static List<String> keywordsList;
68+
6069
private static NameHelper cachedNameHelper;
6170

6271
private static NameHelper getNameHelper() {
@@ -217,7 +226,7 @@ public static String cleanLeadingAndTrailingNewLineAndChars(String input) {
217226
* @return The name for this using Java class convention
218227
*/
219228
public static String convertToClassName(String clazz) {
220-
return StringUtils.capitalize(cleanNameForJava(clazz));
229+
return StringUtils.capitalize(cleanNameForJava(clazz, false));
221230
}
222231

223232
/**
@@ -330,7 +339,7 @@ public static String pluralize(String target) {
330339
* @return A name suitable for a Java parameter
331340
*/
332341
public static String getParameterName(String name) {
333-
return StringUtils.uncapitalize(cleanNameForJava(name));
342+
return filterKeywords(StringUtils.uncapitalize(cleanNameForJava(name)));
334343
}
335344

336345
/**
@@ -341,14 +350,31 @@ public static String getParameterName(String name) {
341350
* @return cleaned string
342351
*/
343352
public static String cleanNameForJava(String resourceName) {
353+
354+
return cleanNameForJava(resourceName, true);
355+
}
356+
357+
private static String cleanNameForJava(String resourceName, boolean filterKeywords) {
344358
String outString = resourceName;
345359
if (StringUtils.hasText(resourceName)) {
346360
outString = getNameHelper().replaceIllegalCharacters(resourceName);
347361
if (StringUtils.hasText(outString)) {
348362
outString = getNameHelper().normalizeName(outString);
349363
}
350364
}
351-
return outString;
365+
366+
if (!filterKeywords) {
367+
return outString;
368+
}
369+
370+
return filterKeywords(outString);
371+
}
372+
373+
public static String filterKeywords(String name) {
374+
if (getKeywords().contains(name)) {
375+
return name + "Custom";
376+
}
377+
return name;
352378
}
353379

354380
/**
@@ -375,7 +401,7 @@ public static String cleanNameForJavaEnum(String enumConstant) {
375401
enumName = "_" + enumName;
376402
}
377403

378-
return enumName;
404+
return filterKeywords(enumName);
379405
}
380406

381407
private static boolean doesUriEndsWithParam(String uri) {
@@ -632,4 +658,11 @@ public static String getDefaultModelPackage() {
632658
return ".model";
633659
}
634660

661+
private static List<String> getKeywords() {
662+
if (keywordsList == null || keywordsList.isEmpty()) {
663+
keywordsList = Arrays.asList(KEYWORDS);
664+
}
665+
return keywordsList;
666+
}
667+
635668
}

src/main/java/com/phoenixnap/oss/ramlplugin/raml2code/rules/basic/MethodParamsRule.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import static com.phoenixnap.oss.ramlplugin.raml2code.helpers.CodeModelHelper.findFirstClassBySimpleName;
1616
import static org.springframework.util.StringUtils.uncapitalize;
1717

18+
import java.math.BigDecimal;
19+
import java.math.BigInteger;
1820
import java.util.ArrayList;
1921
import java.util.List;
2022
import java.util.Optional;
@@ -174,7 +176,15 @@ protected JVar paramQueryForm(ApiParameterMetadata paramMetaData, CodeModelHelpe
174176
}
175177

176178
protected JVar paramObjects(ApiActionMetadata endpointMetadata, CodeModelHelper.JExtMethod generatableType) {
179+
177180
String requestBodyName = endpointMetadata.getRequestBody().getName();
181+
String requestBodyFullName = requestBodyName;
182+
if (BigDecimal.class.getSimpleName().equals(requestBodyName)) {
183+
requestBodyFullName = BigDecimal.class.getName();
184+
} else if (BigInteger.class.getSimpleName().equals(requestBodyName)) {
185+
requestBodyFullName = BigInteger.class.getName();
186+
}
187+
178188
boolean array = endpointMetadata.getRequestBody().isArray();
179189

180190
List<JCodeModel> codeModels = new ArrayList<>();
@@ -186,15 +196,15 @@ protected JVar paramObjects(ApiActionMetadata endpointMetadata, CodeModelHelper.
186196
codeModels.add(generatableType.owner());
187197
}
188198

189-
JClass requestBodyType = findFirstClassBySimpleName(codeModels.toArray(new JCodeModel[codeModels.size()]), requestBodyName);
199+
JClass requestBodyType = findFirstClassBySimpleName(codeModels.toArray(new JCodeModel[codeModels.size()]), requestBodyFullName);
190200
if (allowArrayParameters && array) {
191201
JClass arrayType = generatableType.owner().ref(List.class);
192202
requestBodyType = arrayType.narrow(requestBodyType);
193203
}
194204
if (addParameterJavadoc) {
195-
generatableType.get().javadoc().addParam(uncapitalize(requestBodyName) + " The Request Body Payload");
205+
generatableType.get().javadoc().addParam(NamingHelper.getParameterName(requestBodyName) + " The Request Body Payload");
196206
}
197-
JVar param = generatableType.get().param(requestBodyType, uncapitalize(requestBodyName));
207+
JVar param = generatableType.get().param(requestBodyType, NamingHelper.getParameterName(requestBodyName));
198208
if (Config.getPojoConfig().isIncludeJsr303Annotations() && !RamlActionType.PATCH.equals(endpointMetadata.getActionType())) {
199209
// skip Valid annotation for PATCH actions since it's a partial
200210
// update so some required fields might be omitted

src/main/java/com/phoenixnap/oss/ramlplugin/raml2code/rules/spring/SpringRestClientMethodBodyRule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.phoenixnap.oss.ramlplugin.raml2code.data.ApiActionMetadata;
3333
import com.phoenixnap.oss.ramlplugin.raml2code.data.ApiParameterMetadata;
3434
import com.phoenixnap.oss.ramlplugin.raml2code.helpers.CodeModelHelper;
35+
import com.phoenixnap.oss.ramlplugin.raml2code.helpers.NamingHelper;
3536
import com.phoenixnap.oss.ramlplugin.raml2code.helpers.RamlHelper;
3637
import com.phoenixnap.oss.ramlplugin.raml2code.helpers.RuleHelper;
3738
import com.phoenixnap.oss.ramlplugin.raml2code.plugin.Config;
@@ -152,7 +153,7 @@ public JMethod apply(ApiActionMetadata endpointMetadata, CodeModelHelper.JExtMet
152153
JInvocation init = JExpr._new(httpEntityClass);
153154

154155
if (endpointMetadata.getRequestBody() != null) {
155-
init.arg(methodParamMap.get(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, endpointMetadata.getRequestBody().getName())));
156+
init.arg(methodParamMap.get(NamingHelper.getParameterName(endpointMetadata.getRequestBody().getName())));
156157
}
157158
init.arg(httpHeaders);
158159

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.phoenixnap.oss.ramlplugin.raml2code.github;
2+
3+
import org.junit.Before;
4+
import org.junit.Test;
5+
6+
import com.phoenixnap.oss.ramlplugin.raml2code.data.ApiResourceMetadata;
7+
import com.phoenixnap.oss.ramlplugin.raml2code.plugin.Config;
8+
import com.phoenixnap.oss.ramlplugin.raml2code.rules.ConfigurableRule;
9+
import com.phoenixnap.oss.ramlplugin.raml2code.rules.GitHubAbstractRuleTestBase;
10+
import com.phoenixnap.oss.ramlplugin.raml2code.rules.Spring4ControllerDecoratorRule;
11+
import com.phoenixnap.oss.ramlplugin.raml2code.rules.Spring4ControllerInterfaceRule;
12+
import com.phoenixnap.oss.ramlplugin.raml2code.rules.Spring4RestTemplateClientRule;
13+
import com.phoenixnap.oss.ramlplugin.raml2code.rules.TestPojoConfig;
14+
import com.sun.codemodel.JCodeModel;
15+
import com.sun.codemodel.JDefinedClass;
16+
17+
/**
18+
* @author aleksandars
19+
* @since 2.0.4
20+
*/
21+
public class Issue152RulesTest extends GitHubAbstractRuleTestBase {
22+
23+
private ConfigurableRule<JCodeModel, JDefinedClass, ApiResourceMetadata> rule;
24+
25+
@Before
26+
public void init() {
27+
super.setGitHubValidatorBase(DEFAULT_GITHUB_VALIDATOR_BASE + "issue-152/");
28+
}
29+
30+
@Test
31+
public void collision_java_keywords_decorator() throws Exception {
32+
((TestPojoConfig) Config.getPojoConfig()).setUseBigIntegers(true);
33+
loadRaml("issue-152.raml");
34+
rule = new Spring4ControllerDecoratorRule();
35+
rule.apply(getControllerMetadata(), jCodeModel);
36+
verifyGeneratedCode("Issue152-Spring4ControllerDecorator");
37+
((TestPojoConfig) Config.getPojoConfig()).setUseBigIntegers(false);
38+
}
39+
40+
@Test
41+
public void collision_java_keywords_interface() throws Exception {
42+
((TestPojoConfig) Config.getPojoConfig()).setUseBigIntegers(true);
43+
loadRaml("issue-152.raml");
44+
rule = new Spring4ControllerInterfaceRule();
45+
rule.apply(getControllerMetadata(), jCodeModel);
46+
verifyGeneratedCode("Issue152-Spring4ControllerInterface");
47+
((TestPojoConfig) Config.getPojoConfig()).setUseBigIntegers(false);
48+
}
49+
50+
@Test
51+
public void collision_java_keywords_client() throws Exception {
52+
((TestPojoConfig) Config.getPojoConfig()).setUseBigIntegers(true);
53+
loadRaml("issue-152.raml");
54+
rule = new Spring4RestTemplateClientRule();
55+
rule.apply(getControllerMetadata(), jCodeModel);
56+
verifyGeneratedCode("Issue152-Spring4RestTemplateClient");
57+
((TestPojoConfig) Config.getPojoConfig()).setUseBigIntegers(false);
58+
}
59+
60+
}

0 commit comments

Comments
 (0)