Skip to content

Commit 4282975

Browse files
authored
Fix generated interfaces with disabled ParameterizedFieldsResolvers #976 (#977)
* Fix generated interfaces with disabled ParameterizedFieldsResolvers #976 * Fix LineLengthCheck checkstyle rule in FieldDefinitionToParameterMapper * Add null-safe boolean check
1 parent 4900539 commit 4282975

File tree

6 files changed

+121
-17
lines changed

6 files changed

+121
-17
lines changed

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

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.kobylynskyi.graphql.codegen.model.definitions.ExtendedFieldDefinition;
1010
import com.kobylynskyi.graphql.codegen.utils.Utils;
1111

12+
import java.util.Collections;
1213
import java.util.List;
1314

1415
import static java.util.stream.Collectors.toList;
@@ -94,9 +95,8 @@ public List<ParameterDefinition> mapFields(MappingContext mappingContext,
9495
List<ExtendedFieldDefinition> fieldDefinitions,
9596
ExtendedDefinition<?, ?> parentDefinition) {
9697
return fieldDefinitions.stream()
97-
.filter(
98-
fieldDef -> !generateResolversForField(mappingContext, fieldDef, parentDefinition))
99-
.map(fieldDef -> mapField(mappingContext, fieldDef, parentDefinition.getName()))
98+
.filter(fieldDef -> !generateResolversForField(mappingContext, fieldDef, parentDefinition))
99+
.map(fieldDef -> mapField(mappingContext, fieldDef, parentDefinition))
100100
.collect(toList());
101101
}
102102

@@ -119,29 +119,35 @@ public List<ProjectionParameterDefinition> mapProjectionFields(MappingContext ma
119119
/**
120120
* Map GraphQL's FieldDefinition to a Freemarker-understandable format of parameter
121121
*
122-
* @param mappingContext Global mapping context
123-
* @param fieldDef GraphQL field definition
124-
* @param parentTypeName Name of the parent type
122+
* @param mappingContext Global mapping context
123+
* @param fieldDef GraphQL field definition
124+
* @param parentDefinition Parent GraphQL definition
125125
* @return Freemarker-understandable format of parameter (field)
126126
*/
127-
private ParameterDefinition mapField(MappingContext mappingContext, ExtendedFieldDefinition fieldDef,
128-
String parentTypeName) {
127+
private ParameterDefinition mapField(MappingContext mappingContext,
128+
ExtendedFieldDefinition fieldDef,
129+
ExtendedDefinition<?, ?> parentDefinition) {
129130
NamedDefinition namedDefinition = graphQLTypeMapper
130-
.getLanguageType(mappingContext, fieldDef.getType(), fieldDef.getName(), parentTypeName);
131+
.getLanguageType(mappingContext, fieldDef.getType(), fieldDef.getName(), parentDefinition.getName());
131132

132133
ParameterDefinition parameter = new ParameterDefinition();
133134
parameter.setName(dataModelMapper.capitalizeIfRestricted(mappingContext, fieldDef.getName()));
134135
parameter.setOriginalName(fieldDef.getName());
135136
parameter.setType(graphQLTypeMapper.getTypeConsideringPrimitive(mappingContext, namedDefinition,
136137
namedDefinition.getJavaName()));
137-
parameter.setAnnotations(
138-
annotationsMapper.getAnnotations(mappingContext, fieldDef.getType(), fieldDef, parentTypeName, false));
138+
parameter.setAnnotations(annotationsMapper.getAnnotations(
139+
mappingContext, fieldDef.getType(), fieldDef, parentDefinition.getName(), false));
139140
parameter.setJavaDoc(fieldDef.getJavaDoc());
140141
parameter.setDeprecated(DeprecatedDefinitionBuilder.build(mappingContext, fieldDef));
141142
parameter.setMandatory(namedDefinition.isMandatory());
142143
parameter.setSerializeUsingObjectMapper(namedDefinition.isSerializeUsingObjectMapper());
143-
parameter.setInputParameters(inputValueDefinitionToParameterMapper.map(
144-
mappingContext, fieldDef.getInputValueDefinitions(), fieldDef.getName()));
144+
145+
if (Boolean.TRUE.equals(mappingContext.getGenerateParameterizedFieldsResolvers())) {
146+
parameter.setInputParameters(inputValueDefinitionToParameterMapper.map(
147+
mappingContext, fieldDef.getInputValueDefinitions(), fieldDef.getName()));
148+
} else {
149+
parameter.setInputParameters(Collections.emptyList());
150+
}
145151
return parameter;
146152
}
147153

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,22 @@ void generate_ParametrizedFieldsInInterface() throws Exception {
6666
getFileByName(files, "ProductLinkCodeParametrizedInput.java"));
6767
}
6868

69+
@Test
70+
void generate_ParametrizedFieldsInInterface_DoNotGenerateResolvers() throws Exception {
71+
mappingConfig.setGenerateClient(true);
72+
mappingConfig.setGenerateApis(false);
73+
mappingConfig.setGenerateParameterizedFieldsResolvers(false);
74+
75+
new JavaGraphQLCodegen(singletonList("src/test/resources/schemas/parametrized-input-client.graphqls"),
76+
outputBuildDir, mappingConfig, TestUtils.getStaticGeneratedInfo()).generate();
77+
78+
File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles());
79+
assertSameTrimmedContent(new File("src/test/resources/expected-classes/resolvers/A.java.txt"),
80+
getFileByName(files, "A.java"));
81+
assertSameTrimmedContent(new File("src/test/resources/expected-classes/resolvers/B.java.txt"),
82+
getFileByName(files, "B.java"));
83+
}
84+
6985
@Test
7086
void generate_CustomFieldsResolvers() throws Exception {
7187
mappingConfig.setModelNamePrefix("Github");

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ package com.github.graphql;
77
)
88
public interface ProfileOwner {
99

10-
boolean getAnyPinnableItems(PinnableItemType type);
10+
boolean getAnyPinnableItems();
1111

1212
String getEmail();
1313

@@ -25,10 +25,10 @@ public interface ProfileOwner {
2525
String getName();
2626

2727
@javax.validation.constraints.NotNull
28-
PinnableItemConnection getPinnableItems(String after, String before, Integer first, Integer last, java.util.List<PinnableItemType> types);
28+
PinnableItemConnection getPinnableItems();
2929

3030
@javax.validation.constraints.NotNull
31-
PinnableItemConnection getPinnedItems(String after, String before, Integer first, Integer last, java.util.List<PinnableItemType> types);
31+
PinnableItemConnection getPinnedItems();
3232

3333
int getPinnedItemsRemaining();
3434

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.github.graphql;
2+
3+
4+
@javax.annotation.Generated(
5+
value = "com.kobylynskyi.graphql.codegen.GraphQLCodegen",
6+
date = "2020-12-31T23:59:59-0500"
7+
)
8+
public interface A {
9+
10+
String getFoo();
11+
12+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.github.graphql;
2+
3+
import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLRequestSerializer;
4+
import java.util.StringJoiner;
5+
6+
@javax.annotation.Generated(
7+
value = "com.kobylynskyi.graphql.codegen.GraphQLCodegen",
8+
date = "2020-12-31T23:59:59-0500"
9+
)
10+
public class B implements java.io.Serializable, A {
11+
12+
private static final long serialVersionUID = 1L;
13+
14+
private String foo;
15+
16+
public B() {
17+
}
18+
19+
public B(String foo) {
20+
this.foo = foo;
21+
}
22+
23+
public String getFoo() {
24+
return foo;
25+
}
26+
public void setFoo(String foo) {
27+
this.foo = foo;
28+
}
29+
30+
31+
@Override
32+
public String toString() {
33+
StringJoiner joiner = new StringJoiner(", ", "{ ", " }");
34+
if (foo != null) {
35+
joiner.add("foo: " + GraphQLRequestSerializer.getEntry(foo));
36+
}
37+
return joiner.toString();
38+
}
39+
40+
public static B.Builder builder() {
41+
return new B.Builder();
42+
}
43+
44+
public static class Builder {
45+
46+
private String foo;
47+
48+
public Builder() {
49+
}
50+
51+
public Builder setFoo(String foo) {
52+
this.foo = foo;
53+
return this;
54+
}
55+
56+
57+
public B build() {
58+
return new B(foo);
59+
}
60+
61+
}
62+
}

src/test/resources/schemas/parametrized-input-client.graphqls

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,12 @@ type Client {
2020
data(ID: Int!): Data!
2121
}
2222

23-
enum Data { A B C }
23+
enum Data { A B C }
24+
25+
interface A {
26+
foo(arg: String): String
27+
}
28+
29+
type B implements A {
30+
foo(arg: String): String
31+
}

0 commit comments

Comments
 (0)