diff --git a/src/main/java/graphql/DirectivesUtil.java b/src/main/java/graphql/DirectivesUtil.java index 0a560f7233..e4a3d45d90 100644 --- a/src/main/java/graphql/DirectivesUtil.java +++ b/src/main/java/graphql/DirectivesUtil.java @@ -9,6 +9,7 @@ import graphql.util.FpKit; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; @@ -91,7 +92,6 @@ public static GraphQLDirective getFirstDirective(String name, Map toAppliedDirectives(GraphQLDirectiveContainer directiveContainer) { @@ -104,7 +104,6 @@ public static List toAppliedDirectives(GraphQLDirective * * @param appliedDirectives the applied directives to use * @param directives the legacy directives to use - * * @return a combined list unique by name */ public static List toAppliedDirectives(Collection appliedDirectives, Collection directives) { @@ -127,6 +126,7 @@ public static List toAppliedDirectives(Collection> allDirectivesByName; private final ImmutableMap nonRepeatableDirectivesByName; @@ -145,7 +145,14 @@ public DirectivesHolder(Collection allDirectives, Collection directives, List appliedDirectives) { + if (directives.isEmpty() && appliedDirectives.isEmpty()) { + return EMPTY_HOLDER; + } + return new DirectivesHolder(directives, appliedDirectives); } public ImmutableMap> getAllDirectivesByName() { diff --git a/src/main/java/graphql/schema/GraphQLArgument.java b/src/main/java/graphql/schema/GraphQLArgument.java index 99919b48b2..5f52f294cb 100644 --- a/src/main/java/graphql/schema/GraphQLArgument.java +++ b/src/main/java/graphql/schema/GraphQLArgument.java @@ -82,7 +82,7 @@ private GraphQLArgument(String name, this.value = value; this.definition = definition; this.deprecationReason = deprecationReason; - this.directivesHolder = new DirectivesUtil.DirectivesHolder(directives, appliedDirectives); + this.directivesHolder = DirectivesUtil.DirectivesHolder.create(directives, appliedDirectives); } diff --git a/src/main/java/graphql/schema/GraphQLEnumType.java b/src/main/java/graphql/schema/GraphQLEnumType.java index 00ced1b451..0e9d739500 100644 --- a/src/main/java/graphql/schema/GraphQLEnumType.java +++ b/src/main/java/graphql/schema/GraphQLEnumType.java @@ -66,7 +66,7 @@ private GraphQLEnumType(String name, this.description = description; this.definition = definition; this.extensionDefinitions = ImmutableList.copyOf(extensionDefinitions); - this.directivesHolder = new DirectivesUtil.DirectivesHolder(directives, appliedDirectives); + this.directivesHolder = DirectivesUtil.DirectivesHolder.create(directives, appliedDirectives); this.valueDefinitionMap = buildMap(values); } diff --git a/src/main/java/graphql/schema/GraphQLEnumValueDefinition.java b/src/main/java/graphql/schema/GraphQLEnumValueDefinition.java index 4d34417773..4aba114c7b 100644 --- a/src/main/java/graphql/schema/GraphQLEnumValueDefinition.java +++ b/src/main/java/graphql/schema/GraphQLEnumValueDefinition.java @@ -48,7 +48,7 @@ private GraphQLEnumValueDefinition(String name, this.description = description; this.value = value; this.deprecationReason = deprecationReason; - this.directivesHolder = new DirectivesUtil.DirectivesHolder(directives, appliedDirectives); + this.directivesHolder = DirectivesUtil.DirectivesHolder.create(directives, appliedDirectives); this.definition = definition; } diff --git a/src/main/java/graphql/schema/GraphQLFieldDefinition.java b/src/main/java/graphql/schema/GraphQLFieldDefinition.java index c717c929a2..8a06406439 100644 --- a/src/main/java/graphql/schema/GraphQLFieldDefinition.java +++ b/src/main/java/graphql/schema/GraphQLFieldDefinition.java @@ -66,7 +66,7 @@ private GraphQLFieldDefinition(String name, this.originalType = type; this.dataFetcherFactory = dataFetcherFactory; this.arguments = ImmutableList.copyOf(arguments); - this.directivesHolder = new DirectivesUtil.DirectivesHolder(directives, appliedDirectives); + this.directivesHolder = DirectivesUtil.DirectivesHolder.create(directives, appliedDirectives); this.deprecationReason = deprecationReason; this.definition = definition; } diff --git a/src/main/java/graphql/schema/GraphQLInputObjectField.java b/src/main/java/graphql/schema/GraphQLInputObjectField.java index 9a9aa0a85f..60e680fb30 100644 --- a/src/main/java/graphql/schema/GraphQLInputObjectField.java +++ b/src/main/java/graphql/schema/GraphQLInputObjectField.java @@ -62,7 +62,7 @@ private GraphQLInputObjectField( this.originalType = type; this.defaultValue = defaultValue; this.description = description; - this.directivesHolder = new DirectivesUtil.DirectivesHolder(directives, appliedDirectives); + this.directivesHolder = DirectivesUtil.DirectivesHolder.create(directives, appliedDirectives); this.definition = definition; this.deprecationReason = deprecationReason; } diff --git a/src/main/java/graphql/schema/GraphQLInputObjectType.java b/src/main/java/graphql/schema/GraphQLInputObjectType.java index 81b0d63160..9929f93493 100644 --- a/src/main/java/graphql/schema/GraphQLInputObjectType.java +++ b/src/main/java/graphql/schema/GraphQLInputObjectType.java @@ -61,7 +61,7 @@ private GraphQLInputObjectType(String name, this.description = description; this.definition = definition; this.extensionDefinitions = ImmutableList.copyOf(extensionDefinitions); - this.directives = new DirectivesUtil.DirectivesHolder(directives, appliedDirectives); + this.directives = DirectivesUtil.DirectivesHolder.create(directives, appliedDirectives); this.fieldMap = buildDefinitionMap(fields); this.isOneOf = hasOneOf(directives, appliedDirectives); } diff --git a/src/main/java/graphql/schema/GraphQLInterfaceType.java b/src/main/java/graphql/schema/GraphQLInterfaceType.java index e0159a5ee0..765d4bfadc 100644 --- a/src/main/java/graphql/schema/GraphQLInterfaceType.java +++ b/src/main/java/graphql/schema/GraphQLInterfaceType.java @@ -77,7 +77,7 @@ private GraphQLInterfaceType(String name, this.interfaceComparator = interfaceComparator; this.originalInterfaces = ImmutableList.copyOf(sortTypes(interfaceComparator, interfaces)); this.extensionDefinitions = ImmutableList.copyOf(extensionDefinitions); - this.directivesHolder = new DirectivesUtil.DirectivesHolder(directives, appliedDirectives); + this.directivesHolder = DirectivesUtil.DirectivesHolder.create(directives, appliedDirectives); this.fieldDefinitionsByName = buildDefinitionMap(fieldDefinitions); } diff --git a/src/main/java/graphql/schema/GraphQLObjectType.java b/src/main/java/graphql/schema/GraphQLObjectType.java index b687215a68..4aa0a17003 100644 --- a/src/main/java/graphql/schema/GraphQLObjectType.java +++ b/src/main/java/graphql/schema/GraphQLObjectType.java @@ -74,7 +74,7 @@ private GraphQLObjectType(String name, this.originalInterfaces = ImmutableList.copyOf(sortTypes(interfaceComparator, interfaces)); this.definition = definition; this.extensionDefinitions = ImmutableList.copyOf(extensionDefinitions); - this.directivesHolder = new DirectivesUtil.DirectivesHolder(directives, appliedDirectives); + this.directivesHolder = DirectivesUtil.DirectivesHolder.create(directives, appliedDirectives); this.fieldDefinitionsByName = buildDefinitionMap(fieldDefinitions); } diff --git a/src/main/java/graphql/schema/GraphQLScalarType.java b/src/main/java/graphql/schema/GraphQLScalarType.java index 137a6047c0..fccfb0013b 100644 --- a/src/main/java/graphql/schema/GraphQLScalarType.java +++ b/src/main/java/graphql/schema/GraphQLScalarType.java @@ -64,7 +64,7 @@ private GraphQLScalarType(String name, this.description = description; this.coercing = coercing; this.definition = definition; - this.directivesHolder = new DirectivesUtil.DirectivesHolder(directives, appliedDirectives); + this.directivesHolder = DirectivesUtil.DirectivesHolder.create(directives, appliedDirectives); this.extensionDefinitions = ImmutableList.copyOf(extensionDefinitions); this.specifiedByUrl = specifiedByUrl; } diff --git a/src/main/java/graphql/schema/GraphQLUnionType.java b/src/main/java/graphql/schema/GraphQLUnionType.java index 6c5fffce39..9af647c6c4 100644 --- a/src/main/java/graphql/schema/GraphQLUnionType.java +++ b/src/main/java/graphql/schema/GraphQLUnionType.java @@ -69,7 +69,7 @@ private GraphQLUnionType(String name, this.typeResolver = typeResolver; this.definition = definition; this.extensionDefinitions = ImmutableList.copyOf(extensionDefinitions); - this.directives = new DirectivesUtil.DirectivesHolder(directives, appliedDirectives); + this.directives = DirectivesUtil.DirectivesHolder.create(directives, appliedDirectives); } void replaceTypes(List types) {