Skip to content

Commit 11b9c26

Browse files
authored
Handle java reserved words in enum #249 (#250)
1 parent 56b9dfe commit 11b9c26

24 files changed

+221
-43
lines changed

src/main/java/com/kobylynskyi/graphql/codegen/mapper/EnumDefinitionToDataModelMapper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ private static List<EnumValueDefinition> map(List<graphql.language.EnumValueDefi
7474
return enumValueDefinitions.stream()
7575
.map(f -> new EnumValueDefinition(
7676
MapperUtils.capitalizeIfRestricted(f.getName()),
77+
f.getName(),
7778
getJavaDoc(f.getComments()),
7879
isDeprecated(f)))
7980
.collect(Collectors.toList());

src/main/java/com/kobylynskyi/graphql/codegen/mapper/MapperUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public class MapperUtils {
2727

2828
private static final Set<String> JAVA_RESTRICTED_KEYWORDS = new HashSet<>(Arrays.asList(
2929
"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue",
30-
"default", "do", "double", "else", "extends", "false", "final", "finally", "float", "for", "goto", "if",
31-
"implements", "import", "instanceof", "int", "interface", "long", "native", "new", "null", "package",
30+
"default", "do", "double", "else", "enum", "extends", "false", "final", "finally", "float", "for", "goto",
31+
"if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "null", "package",
3232
"private", "protected", "public", "return", "short", "static", "strictfp", "super", "switch",
3333
"synchronized", "this", "throw", "throws", "transient", "true", "try", "void", "volatile", "while"));
3434

src/main/java/com/kobylynskyi/graphql/codegen/mapper/ValueMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ private static String mapEnum(MappingContext mappingContext, EnumValue value, Ty
8181
if (graphQLType instanceof TypeName) {
8282
String typeName = ((TypeName) graphQLType).getName();
8383
typeName = MapperUtils.getModelClassNameWithPrefixAndSuffix(mappingContext, typeName);
84-
return typeName + "." + value.getName();
84+
return typeName + "." + MapperUtils.capitalizeIfRestricted(value.getName());
8585
}
8686
if (graphQLType instanceof NonNullType) {
8787
return mapEnum(mappingContext, value, ((NonNullType) graphQLType).getType());

src/main/java/com/kobylynskyi/graphql/codegen/model/EnumValueDefinition.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,24 @@
99
*/
1010
public class EnumValueDefinition {
1111

12-
private final String value;
12+
private final String javaName;
13+
private final String graphqlName;
1314
private final List<String> javaDoc;
1415
private final boolean deprecated;
1516

16-
public EnumValueDefinition(String value, List<String> javaDoc, boolean deprecated) {
17-
this.value = value;
17+
public EnumValueDefinition(String javaName, String graphqlName, List<String> javaDoc, boolean deprecated) {
18+
this.javaName = javaName;
19+
this.graphqlName = graphqlName;
1820
this.javaDoc = javaDoc;
1921
this.deprecated = deprecated;
2022
}
2123

22-
public String getValue() {
23-
return value;
24+
public String getJavaName() {
25+
return javaName;
26+
}
27+
28+
public String getGraphqlName() {
29+
return graphqlName;
2430
}
2531

2632
public List<String> getJavaDoc() {

src/main/java/com/kobylynskyi/graphql/codegen/model/graphql/GraphQLRequestSerializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@ private static String getEntry(Object input, boolean jsonQuery) {
8888
if (input == null) {
8989
return null;
9090
}
91-
if (input instanceof Collection) {
92-
Collection<?> inputCollection = (Collection) input;
91+
if (input instanceof Collection<?>) {
92+
Collection<?> inputCollection = (Collection<?>) input;
9393
return inputCollection.stream()
9494
.map(i -> GraphQLRequestSerializer.getEntry(i, jsonQuery))
9595
.collect(Collectors.joining(", ", "[ ", " ]"));

src/main/resources/templates/javaClassGraphqlEnum.ftl

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,19 @@ public enum ${className}<#if implements?has_content> implements <#list implement
3232
<#if field.deprecated>
3333
@Deprecated
3434
</#if>
35-
${field.value}<#if field_has_next>,</#if>
35+
${field.javaName}("${field.graphqlName}")<#if field_has_next>,<#else>;</#if>
3636
</#list>
3737
</#if>
3838

39+
private final String graphqlName;
40+
41+
private ${className}(String graphqlName) {
42+
this.graphqlName = graphqlName;
43+
}
44+
45+
@Override
46+
public String toString() {
47+
return this.graphqlName;
48+
}
49+
3950
}

src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenRestrictedWordsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ void generate() throws Exception {
4747
"NativeQueryResponse.java", "PrivateQueryAPI.java", "PrivateQueryRequest.java",
4848
"PrivateQueryResponse.java", "Query.java", "QueryAPI.java", "QueryCaseParametrizedInput.java",
4949
"QueryPrivateParametrizedInput.java", "QueryResolver.java", "QueryResponseProjection.java",
50-
"Synchronized.java", "SynchronizedResponseProjection.java"), generatedFileNames);
50+
"Synchronized.java", "SynchronizedResponseProjection.java", "TestEnum.java"), generatedFileNames);
5151

5252
for (File file : files) {
5353
assertSameTrimmedContent(

src/test/resources/expected-classes/EventStatus.java.txt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,22 @@ public enum EventStatus {
1313
* OPEN status
1414
* Means just created
1515
*/
16-
OPEN,
17-
IN_PROGRESS,
16+
OPEN("OPEN"),
17+
IN_PROGRESS("IN_PROGRESS"),
1818
/**
1919
* Logging completed
2020
*/
21-
LOGGED
21+
LOGGED("LOGGED");
22+
23+
private final String graphqlName;
24+
25+
private EventStatus(String graphqlName) {
26+
this.graphqlName = graphqlName;
27+
}
28+
29+
@Override
30+
public String toString() {
31+
return this.graphqlName;
32+
}
2233

2334
}

src/test/resources/expected-classes/defaults/MyEnum.java.txt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,19 @@ package com.kobylynskyi.graphql.testdefaults;
66
)
77
public enum MyEnum {
88

9-
ONE,
10-
TWO,
11-
THREE
9+
ONE("ONE"),
10+
TWO("TWO"),
11+
THREE("THREE");
12+
13+
private final String graphqlName;
14+
15+
private MyEnum(String graphqlName) {
16+
this.graphqlName = graphqlName;
17+
}
18+
19+
@Override
20+
public String toString() {
21+
return this.graphqlName;
22+
}
1223

1324
}

src/test/resources/expected-classes/defaults/MyEnumTO.java.txt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,19 @@ package com.kobylynskyi.graphql.testdefaults;
66
)
77
public enum MyEnumTO {
88

9-
ONE,
10-
TWO,
11-
THREE
9+
ONE("ONE"),
10+
TWO("TWO"),
11+
THREE("THREE");
12+
13+
private final String graphqlName;
14+
15+
private MyEnumTO(String graphqlName) {
16+
this.graphqlName = graphqlName;
17+
}
18+
19+
@Override
20+
public String toString() {
21+
return this.graphqlName;
22+
}
1223

1324
}

0 commit comments

Comments
 (0)