diff --git a/src/main/java/graphql/schema/GraphQLArgument.java b/src/main/java/graphql/schema/GraphQLArgument.java index 9668f86656..60bcab09a8 100644 --- a/src/main/java/graphql/schema/GraphQLArgument.java +++ b/src/main/java/graphql/schema/GraphQLArgument.java @@ -1,6 +1,6 @@ package graphql.schema; - +import java.util.Map; import static graphql.Assert.assertNotNull; public class GraphQLArgument { @@ -23,6 +23,9 @@ public GraphQLArgument(String name, GraphQLInputType type) { this(name, null, type, null); } + void replaceTypeReferences(Map typeMap) { + type = (GraphQLInputType) new SchemaUtil().resolveTypeReference(type, typeMap); + } public String getName() { return name; diff --git a/src/main/java/graphql/schema/GraphQLFieldDefinition.java b/src/main/java/graphql/schema/GraphQLFieldDefinition.java index edc6ce1cf3..75598c7f09 100644 --- a/src/main/java/graphql/schema/GraphQLFieldDefinition.java +++ b/src/main/java/graphql/schema/GraphQLFieldDefinition.java @@ -32,7 +32,11 @@ public GraphQLFieldDefinition(String name, String description, GraphQLOutputType void replaceTypeReferences(Map typeMap) { - type = (GraphQLOutputType) new SchemaUtil().resolveTypeReference(type, typeMap); + SchemaUtil schemaUtil = new SchemaUtil(); + type = (GraphQLOutputType) schemaUtil.resolveTypeReference(type, typeMap); + for (GraphQLArgument argument : arguments) { + argument.replaceTypeReferences(typeMap); + } } public String getName() { diff --git a/src/main/java/graphql/schema/GraphQLInputObjectField.java b/src/main/java/graphql/schema/GraphQLInputObjectField.java index 53486d2783..ca0b830e27 100644 --- a/src/main/java/graphql/schema/GraphQLInputObjectField.java +++ b/src/main/java/graphql/schema/GraphQLInputObjectField.java @@ -1,6 +1,6 @@ package graphql.schema; - +import java.util.Map; import static graphql.Assert.assertNotNull; public class GraphQLInputObjectField { @@ -23,6 +23,9 @@ public GraphQLInputObjectField(String name, String description, GraphQLInputType this.description = description; } + void replaceTypeReferences(Map typeMap) { + type = (GraphQLInputType) new SchemaUtil().resolveTypeReference(type, typeMap); + } public String getName() { return name; @@ -78,4 +81,4 @@ public GraphQLInputObjectField build() { return new GraphQLInputObjectField(name, description, type, defaultValue); } } -} \ No newline at end of file +} diff --git a/src/main/java/graphql/schema/GraphQLTypeReference.java b/src/main/java/graphql/schema/GraphQLTypeReference.java index 103e326f26..e477be56e9 100644 --- a/src/main/java/graphql/schema/GraphQLTypeReference.java +++ b/src/main/java/graphql/schema/GraphQLTypeReference.java @@ -7,7 +7,7 @@ * A special type to allow a object/interface types to reference itself. It's replaced with the real type * object when the schema is build. */ -public class GraphQLTypeReference implements GraphQLType, GraphQLOutputType { +public class GraphQLTypeReference implements GraphQLType, GraphQLOutputType, GraphQLInputType { private final String name; diff --git a/src/main/java/graphql/schema/SchemaUtil.java b/src/main/java/graphql/schema/SchemaUtil.java index 2c3754f1f5..65640d7b7a 100644 --- a/src/main/java/graphql/schema/SchemaUtil.java +++ b/src/main/java/graphql/schema/SchemaUtil.java @@ -135,6 +135,8 @@ void replaceTypeReferences(GraphQLSchema schema) { for (GraphQLType type : typeMap.values()) { if (type instanceof GraphQLFieldsContainer) { resolveTypeReferencesForFieldsContainer((GraphQLFieldsContainer) type, typeMap); + } else if (type instanceof GraphQLInputObjectType) { + resolveTypeReferencesForInputObjectType((GraphQLInputObjectType) type, typeMap); } } } @@ -145,6 +147,12 @@ private void resolveTypeReferencesForFieldsContainer(GraphQLFieldsContainer fiel } } + private void resolveTypeReferencesForInputObjectType(GraphQLInputObjectType container, Map typeMap) { + for (GraphQLInputObjectField field : container.getFields()) { + field.replaceTypeReferences(typeMap); + } + } + GraphQLType resolveTypeReference(GraphQLType type, Map typeMap) { if (type instanceof GraphQLTypeReference || typeMap.containsKey(type.getName())) { GraphQLType resolvedType = typeMap.get(type.getName());