Skip to content

Commit a1c9f20

Browse files
committed
Handle POJO generation when GraphQL type has field named "class" #994
1 parent 6dc3cf2 commit a1c9f20

File tree

9 files changed

+60
-8
lines changed

9 files changed

+60
-8
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ private ParameterDefinition mapField(MappingContext mappingContext,
141141
parameter.setDeprecated(DeprecatedDefinitionBuilder.build(mappingContext, fieldDef));
142142
parameter.setMandatory(namedDefinition.isMandatory());
143143
parameter.setSerializeUsingObjectMapper(namedDefinition.isSerializeUsingObjectMapper());
144+
parameter.setGetterMethodName(dataModelMapper.capitalizeMethodNameIfRestricted(mappingContext,
145+
"get" + Utils.capitalize(fieldDef.getName())));
144146

145147
if (Boolean.TRUE.equals(mappingContext.getGenerateParameterizedFieldsResolvers())) {
146148
parameter.setInputParameters(inputValueDefinitionToParameterMapper.map(

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ private List<ParameterDefinition> getOperationParameters(MappingContext mappingC
231231
parameterDefinition.setName(parentObjectParamName);
232232
parameterDefinition.setOriginalName(parentObjectParamName);
233233
parameterDefinition.setDeprecated(DeprecatedDefinitionBuilder.build(mappingContext, resolvedField));
234+
parameterDefinition.setGetterMethodName(dataModelMapper.capitalizeMethodNameIfRestricted(mappingContext,
235+
"get" + Utils.capitalize(parentObjectParamName)));
234236
parameters.add(parameterDefinition);
235237
}
236238

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.kobylynskyi.graphql.codegen.model.NamedDefinition;
55
import com.kobylynskyi.graphql.codegen.model.ParameterDefinition;
66
import com.kobylynskyi.graphql.codegen.model.builders.DeprecatedDefinitionBuilder;
7+
import com.kobylynskyi.graphql.codegen.utils.Utils;
78
import graphql.language.InputValueDefinition;
89

910
import java.util.List;
@@ -70,6 +71,8 @@ private ParameterDefinition map(MappingContext mappingContext, InputValueDefinit
7071
parameter.setDeprecated(DeprecatedDefinitionBuilder.build(mappingContext, inputValueDefinition));
7172
parameter.setMandatory(namedDefinition.isMandatory());
7273
parameter.setSerializeUsingObjectMapper(namedDefinition.isSerializeUsingObjectMapper());
74+
parameter.setGetterMethodName(dataModelMapper.capitalizeMethodNameIfRestricted(mappingContext,
75+
"get" + Utils.capitalize(inputValueDefinition.getName())));
7376
return parameter;
7477
}
7578

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.kobylynskyi.graphql.codegen.model.MappingContext;
44
import com.kobylynskyi.graphql.codegen.model.ParameterDefinition;
5+
import com.kobylynskyi.graphql.codegen.utils.Utils;
56

67
import java.util.Arrays;
78
import java.util.Optional;
@@ -21,12 +22,13 @@ public interface UnknownFieldsSupport {
2122
*
2223
* @param mappingContext The context of the mapping process.
2324
* @return If {@link MappingContext#isSupportUnknownFields()} is true, it returns a monad containing
24-
* the instance of {@link ParameterDefinition}. {@link Optional#empty()} otherwise.
25+
* the instance of {@link ParameterDefinition}. {@link Optional#empty()} otherwise.
2526
*/
2627
default Optional<ParameterDefinition> createUnknownFields(MappingContext mappingContext) {
2728
if (Boolean.TRUE.equals(mappingContext.isSupportUnknownFields())) {
2829
ParameterDefinition unknownFields = new ParameterDefinition();
2930
unknownFields.setName(mappingContext.getUnknownFieldsPropertyName());
31+
unknownFields.setGetterMethodName("get" + Utils.capitalize(mappingContext.getUnknownFieldsPropertyName()));
3032
unknownFields.setOriginalName(mappingContext.getUnknownFieldsPropertyName());
3133
unknownFields.setType("java.util.Map<String, Object>");
3234
unknownFields.setAnnotations(Arrays.asList(

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class ParameterDefinition {
3131
private List<String> javaDoc = new ArrayList<>();
3232
private DeprecatedDefinition deprecated;
3333
private boolean serializeUsingObjectMapper;
34+
private String getterMethodName;
3435
/**
3536
* If the type is parametrized then input parameters will be defined here
3637
*/
@@ -121,6 +122,14 @@ public void setSerializeUsingObjectMapper(boolean serializeUsingObjectMapper) {
121122
this.serializeUsingObjectMapper = serializeUsingObjectMapper;
122123
}
123124

125+
public String getGetterMethodName() {
126+
return getterMethodName;
127+
}
128+
129+
public void setGetterMethodName(String getterMethodName) {
130+
this.getterMethodName = getterMethodName;
131+
}
132+
124133
public ParameterDefinition getDefinitionInParentType() {
125134
return definitionInParentType;
126135
}

src/main/resources/templates/java-lang/type.ftl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,11 @@ public class ${className} implements java.io.Serializable<#if implements?has_con
7373
<#if field.deprecated?has_content>
7474
@${field.deprecated.annotation}
7575
</#if>
76-
public <#if field.mandatory && field.definitionInParentType?has_content && !field.definitionInParentType.mandatory>${field.definitionInParentType.type}<#else>${field.type}</#if> get${field.name?cap_first}() {
76+
<#if field.mandatory && field.definitionInParentType?has_content && !field.definitionInParentType.mandatory>
77+
public ${field.definitionInParentType.type} ${field.getterMethodName}() {
78+
<#else>
79+
public ${field.type} ${field.getterMethodName}() {
80+
</#if>
7781
return ${field.name};
7882
}
7983
<#if !immutableModels>

src/test/resources/expected-classes/restricted-words/Synchronized.java.txt

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@ public class Synchronized implements java.io.Serializable {
1414

1515
private String Void;
1616
private Char wait;
17+
private String Class;
1718

1819
public Synchronized() {
1920
}
2021

21-
public Synchronized(String Void, Char wait) {
22+
public Synchronized(String Void, Char wait, String Class) {
2223
this.Void = Void;
2324
this.wait = wait;
25+
this.Class = Class;
2426
}
2527

2628
public String getVoid() {
@@ -37,6 +39,13 @@ public class Synchronized implements java.io.Serializable {
3739
this.wait = wait;
3840
}
3941

42+
public String GetClass() {
43+
return Class;
44+
}
45+
public void setClass(String Class) {
46+
this.Class = Class;
47+
}
48+
4049
@Override
4150
public boolean equals(Object obj) {
4251
if (this == obj) {
@@ -47,12 +56,13 @@ public class Synchronized implements java.io.Serializable {
4756
}
4857
final Synchronized that = (Synchronized) obj;
4958
return Objects.equals(Void, that.Void)
50-
&& Objects.equals(wait, that.wait);
59+
&& Objects.equals(wait, that.wait)
60+
&& Objects.equals(Class, that.Class);
5161
}
5262

5363
@Override
5464
public int hashCode() {
55-
return Objects.hash(Void, wait);
65+
return Objects.hash(Void, wait, Class);
5666
}
5767

5868
@Override
@@ -64,6 +74,9 @@ public class Synchronized implements java.io.Serializable {
6474
if (wait != null) {
6575
joiner.add("wait: " + GraphQLRequestSerializer.getEntry(wait));
6676
}
77+
if (Class != null) {
78+
joiner.add("class: " + GraphQLRequestSerializer.getEntry(Class));
79+
}
6780
return joiner.toString();
6881
}
6982

@@ -75,6 +88,7 @@ public class Synchronized implements java.io.Serializable {
7588

7689
private String Void;
7790
private Char wait;
91+
private String Class;
7892

7993
public Builder() {
8094
}
@@ -89,10 +103,15 @@ public class Synchronized implements java.io.Serializable {
89103
return this;
90104
}
91105

106+
public Builder setClass(String Class) {
107+
this.Class = Class;
108+
return this;
109+
}
110+
92111

93112
public Synchronized build() {
94-
return new Synchronized(Void, wait);
113+
return new Synchronized(Void, wait, Class);
95114
}
96115

97116
}
98-
}
117+
}

src/test/resources/expected-classes/restricted-words/SynchronizedResponseProjection.java.txt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public class SynchronizedResponseProjection extends GraphQLResponseProjection {
3030
projectionDepthOnFields.put("SynchronizedResponseProjection.CharResponseProjection.Wait", projectionDepthOnFields.getOrDefault("SynchronizedResponseProjection.CharResponseProjection.Wait", 0) + 1);
3131
this.Wait(new CharResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("SynchronizedResponseProjection.CharResponseProjection.Wait", 0)));
3232
}
33+
this.Class();
3334
this.typename();
3435
return this;
3536
}
@@ -52,6 +53,15 @@ public class SynchronizedResponseProjection extends GraphQLResponseProjection {
5253
return this;
5354
}
5455

56+
public SynchronizedResponseProjection Class() {
57+
return Class(null);
58+
}
59+
60+
public SynchronizedResponseProjection Class(String alias) {
61+
fields.add(new GraphQLResponseField("class").alias(alias));
62+
return this;
63+
}
64+
5565
public SynchronizedResponseProjection typename() {
5666
return typename(null);
5767
}
@@ -78,4 +88,4 @@ public class SynchronizedResponseProjection extends GraphQLResponseProjection {
7888
return Objects.hash(fields);
7989
}
8090

81-
}
91+
}

src/test/resources/schemas/restricted-words.graphqls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ type Query {
1111
type Synchronized {
1212
void: String
1313
wait: char
14+
class: String
1415
}
1516

1617
enum TestEnum {

0 commit comments

Comments
 (0)