diff --git a/src/main/java/graphql/validation/OperationValidator.java b/src/main/java/graphql/validation/OperationValidator.java index fea8df24aa..d961486116 100644 --- a/src/main/java/graphql/validation/OperationValidator.java +++ b/src/main/java/graphql/validation/OperationValidator.java @@ -1241,8 +1241,11 @@ private boolean sameArguments(List arguments1, @Nullable List 1 is required: the outer "field" on Query is unresolvable (null type), + // and the fragment's inline fragments resolve "field" on known interfaces (non-null type). + // After mergeSubSelections, the inner "field" set contains both null and non-null typed entries. + def query = ''' + fragment multiply on Whatever { + field { + ... on Abstract1 { field { leaf } } + ... on Abstract2 { field { leaf } } + ... on Concrete1 { field { leaf } } + ... on Concrete2 { field { leaf } } + } + } + query DeepAbstractConcrete { + field { ...multiply field { ...multiply } } + } + ''' + when: + traverse(query, schema) + + then: + errorCollector.getErrors().isEmpty() + } + def "overlapping fields on lower level"() { given: def schema = schema('''