未验证 提交 42829757 编写于 作者: B Bogdan Kobylynskyi 提交者: GitHub

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
上级 4900539e
......@@ -9,6 +9,7 @@ import com.kobylynskyi.graphql.codegen.model.definitions.ExtendedDefinition;
import com.kobylynskyi.graphql.codegen.model.definitions.ExtendedFieldDefinition;
import com.kobylynskyi.graphql.codegen.utils.Utils;
import java.util.Collections;
import java.util.List;
import static java.util.stream.Collectors.toList;
......@@ -94,9 +95,8 @@ public class FieldDefinitionToParameterMapper {
List<ExtendedFieldDefinition> fieldDefinitions,
ExtendedDefinition<?, ?> parentDefinition) {
return fieldDefinitions.stream()
.filter(
fieldDef -> !generateResolversForField(mappingContext, fieldDef, parentDefinition))
.map(fieldDef -> mapField(mappingContext, fieldDef, parentDefinition.getName()))
.filter(fieldDef -> !generateResolversForField(mappingContext, fieldDef, parentDefinition))
.map(fieldDef -> mapField(mappingContext, fieldDef, parentDefinition))
.collect(toList());
}
......@@ -119,29 +119,35 @@ public class FieldDefinitionToParameterMapper {
/**
* Map GraphQL's FieldDefinition to a Freemarker-understandable format of parameter
*
* @param mappingContext Global mapping context
* @param fieldDef GraphQL field definition
* @param parentTypeName Name of the parent type
* @param mappingContext Global mapping context
* @param fieldDef GraphQL field definition
* @param parentDefinition Parent GraphQL definition
* @return Freemarker-understandable format of parameter (field)
*/
private ParameterDefinition mapField(MappingContext mappingContext, ExtendedFieldDefinition fieldDef,
String parentTypeName) {
private ParameterDefinition mapField(MappingContext mappingContext,
ExtendedFieldDefinition fieldDef,
ExtendedDefinition<?, ?> parentDefinition) {
NamedDefinition namedDefinition = graphQLTypeMapper
.getLanguageType(mappingContext, fieldDef.getType(), fieldDef.getName(), parentTypeName);
.getLanguageType(mappingContext, fieldDef.getType(), fieldDef.getName(), parentDefinition.getName());
ParameterDefinition parameter = new ParameterDefinition();
parameter.setName(dataModelMapper.capitalizeIfRestricted(mappingContext, fieldDef.getName()));
parameter.setOriginalName(fieldDef.getName());
parameter.setType(graphQLTypeMapper.getTypeConsideringPrimitive(mappingContext, namedDefinition,
namedDefinition.getJavaName()));
parameter.setAnnotations(
annotationsMapper.getAnnotations(mappingContext, fieldDef.getType(), fieldDef, parentTypeName, false));
parameter.setAnnotations(annotationsMapper.getAnnotations(
mappingContext, fieldDef.getType(), fieldDef, parentDefinition.getName(), false));
parameter.setJavaDoc(fieldDef.getJavaDoc());
parameter.setDeprecated(DeprecatedDefinitionBuilder.build(mappingContext, fieldDef));
parameter.setMandatory(namedDefinition.isMandatory());
parameter.setSerializeUsingObjectMapper(namedDefinition.isSerializeUsingObjectMapper());
parameter.setInputParameters(inputValueDefinitionToParameterMapper.map(
mappingContext, fieldDef.getInputValueDefinitions(), fieldDef.getName()));
if (Boolean.TRUE.equals(mappingContext.getGenerateParameterizedFieldsResolvers())) {
parameter.setInputParameters(inputValueDefinitionToParameterMapper.map(
mappingContext, fieldDef.getInputValueDefinitions(), fieldDef.getName()));
} else {
parameter.setInputParameters(Collections.emptyList());
}
return parameter;
}
......
......@@ -66,6 +66,22 @@ class GraphQLCodegenFieldsResolversTest {
getFileByName(files, "ProductLinkCodeParametrizedInput.java"));
}
@Test
void generate_ParametrizedFieldsInInterface_DoNotGenerateResolvers() throws Exception {
mappingConfig.setGenerateClient(true);
mappingConfig.setGenerateApis(false);
mappingConfig.setGenerateParameterizedFieldsResolvers(false);
new JavaGraphQLCodegen(singletonList("src/test/resources/schemas/parametrized-input-client.graphqls"),
outputBuildDir, mappingConfig, TestUtils.getStaticGeneratedInfo()).generate();
File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles());
assertSameTrimmedContent(new File("src/test/resources/expected-classes/resolvers/A.java.txt"),
getFileByName(files, "A.java"));
assertSameTrimmedContent(new File("src/test/resources/expected-classes/resolvers/B.java.txt"),
getFileByName(files, "B.java"));
}
@Test
void generate_CustomFieldsResolvers() throws Exception {
mappingConfig.setModelNamePrefix("Github");
......
......@@ -7,7 +7,7 @@ package com.github.graphql;
)
public interface ProfileOwner {
boolean getAnyPinnableItems(PinnableItemType type);
boolean getAnyPinnableItems();
String getEmail();
......@@ -25,10 +25,10 @@ public interface ProfileOwner {
String getName();
@javax.validation.constraints.NotNull
PinnableItemConnection getPinnableItems(String after, String before, Integer first, Integer last, java.util.List<PinnableItemType> types);
PinnableItemConnection getPinnableItems();
@javax.validation.constraints.NotNull
PinnableItemConnection getPinnedItems(String after, String before, Integer first, Integer last, java.util.List<PinnableItemType> types);
PinnableItemConnection getPinnedItems();
int getPinnedItemsRemaining();
......
package com.github.graphql;
@javax.annotation.Generated(
value = "com.kobylynskyi.graphql.codegen.GraphQLCodegen",
date = "2020-12-31T23:59:59-0500"
)
public interface A {
String getFoo();
}
\ No newline at end of file
package com.github.graphql;
import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLRequestSerializer;
import java.util.StringJoiner;
@javax.annotation.Generated(
value = "com.kobylynskyi.graphql.codegen.GraphQLCodegen",
date = "2020-12-31T23:59:59-0500"
)
public class B implements java.io.Serializable, A {
private static final long serialVersionUID = 1L;
private String foo;
public B() {
}
public B(String foo) {
this.foo = foo;
}
public String getFoo() {
return foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
@Override
public String toString() {
StringJoiner joiner = new StringJoiner(", ", "{ ", " }");
if (foo != null) {
joiner.add("foo: " + GraphQLRequestSerializer.getEntry(foo));
}
return joiner.toString();
}
public static B.Builder builder() {
return new B.Builder();
}
public static class Builder {
private String foo;
public Builder() {
}
public Builder setFoo(String foo) {
this.foo = foo;
return this;
}
public B build() {
return new B(foo);
}
}
}
\ No newline at end of file
......@@ -20,4 +20,12 @@ type Client {
data(ID: Int!): Data!
}
enum Data { A B C }
\ No newline at end of file
enum Data { A B C }
interface A {
foo(arg: String): String
}
type B implements A {
foo(arg: String): String
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册