Skip to content

Commit 44aeed6

Browse files
committed
Refactor additionalTypes to use GraphQLNamedType
Change GraphQLSchema.additionalTypes from Set<GraphQLType> to Set<GraphQLNamedType> for improved type safety. All types that can be added as additional types are named types, so this makes the API more precise.
1 parent 49dca7e commit 44aeed6

File tree

6 files changed

+20
-17
lines changed

6 files changed

+20
-17
lines changed

src/main/java/graphql/schema/GraphQLSchema.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public class GraphQLSchema {
5252
private final GraphQLObjectType mutationType;
5353
private final GraphQLObjectType subscriptionType;
5454
private final GraphQLObjectType introspectionSchemaType;
55-
private final ImmutableSet<GraphQLType> additionalTypes;
55+
private final ImmutableSet<GraphQLNamedType> additionalTypes;
5656
private final GraphQLFieldDefinition introspectionSchemaField;
5757
private final GraphQLFieldDefinition introspectionTypeField;
5858
// we don't allow modification of "__typename" - it's a scalar
@@ -275,10 +275,10 @@ public GraphQLObjectType getIntrospectionSchemaType() {
275275
*
276276
* @return an immutable set of types that were explicitly added as additional types
277277
*
278-
* @see Builder#additionalType(GraphQLType)
278+
* @see Builder#additionalType(GraphQLNamedType)
279279
* @see Builder#additionalTypes(Set)
280280
*/
281-
public Set<GraphQLType> getAdditionalTypes() {
281+
public Set<GraphQLNamedType> getAdditionalTypes() {
282282
return additionalTypes;
283283
}
284284

@@ -745,7 +745,7 @@ public static class Builder {
745745
private final Set<GraphQLDirective> additionalDirectives = new LinkedHashSet<>(
746746
asList(Directives.IncludeDirective, Directives.SkipDirective)
747747
);
748-
private final Set<GraphQLType> additionalTypes = new LinkedHashSet<>();
748+
private final Set<GraphQLNamedType> additionalTypes = new LinkedHashSet<>();
749749
private final List<GraphQLDirective> schemaDirectives = new ArrayList<>();
750750
private final List<GraphQLAppliedDirective> schemaAppliedDirectives = new ArrayList<>();
751751

@@ -808,7 +808,7 @@ public Builder codeRegistry(GraphQLCodeRegistry codeRegistry) {
808808
*
809809
* @see GraphQLSchema#getAdditionalTypes()
810810
*/
811-
public Builder additionalTypes(Set<GraphQLType> additionalTypes) {
811+
public Builder additionalTypes(Set<? extends GraphQLNamedType> additionalTypes) {
812812
this.additionalTypes.addAll(additionalTypes);
813813
return this;
814814
}
@@ -831,7 +831,7 @@ public Builder additionalTypes(Set<GraphQLType> additionalTypes) {
831831
* @see GraphQLSchema#getAdditionalTypes()
832832
* @see #additionalTypes(Set)
833833
*/
834-
public Builder additionalType(GraphQLType additionalType) {
834+
public Builder additionalType(GraphQLNamedType additionalType) {
835835
this.additionalTypes.add(additionalType);
836836
return this;
837837
}
@@ -844,7 +844,7 @@ public Builder additionalType(GraphQLType additionalType) {
844844
*
845845
* @return this builder
846846
*
847-
* @see #additionalType(GraphQLType)
847+
* @see #additionalType(GraphQLNamedType)
848848
* @see #additionalTypes(Set)
849849
*/
850850
public Builder clearAdditionalTypes() {

src/main/java/graphql/schema/SchemaTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,7 @@ private static class DummyRoot implements GraphQLSchemaElement {
607607
GraphQLObjectType mutation;
608608
GraphQLObjectType subscription;
609609
GraphQLObjectType introspectionSchemaType;
610-
Set<GraphQLType> additionalTypes;
610+
Set<GraphQLNamedType> additionalTypes;
611611
Set<GraphQLDirective> directives;
612612
Set<GraphQLDirective> schemaDirectives;
613613
Set<GraphQLAppliedDirective> schemaAppliedDirectives;

src/main/java/graphql/schema/idl/SchemaGenerator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import graphql.language.OperationTypeDefinition;
66
import graphql.schema.GraphQLCodeRegistry;
77
import graphql.schema.GraphQLDirective;
8+
import graphql.schema.GraphQLNamedType;
89
import graphql.schema.GraphQLSchema;
910
import graphql.schema.GraphQLType;
1011
import graphql.schema.idl.errors.SchemaProblem;
@@ -130,7 +131,7 @@ private GraphQLSchema makeExecutableSchemaImpl(ImmutableTypeDefinitionRegistry t
130131

131132
schemaGeneratorHelper.buildOperations(buildCtx, schemaBuilder);
132133

133-
Set<GraphQLType> additionalTypes = schemaGeneratorHelper.buildAdditionalTypes(buildCtx);
134+
Set<GraphQLNamedType> additionalTypes = schemaGeneratorHelper.buildAdditionalTypes(buildCtx);
134135
schemaBuilder.additionalTypes(additionalTypes);
135136

136137
buildCtx.getCodeRegistry().fieldVisibility(buildCtx.getWiring().getFieldVisibility());

src/main/java/graphql/schema/idl/SchemaGeneratorHelper.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import graphql.schema.GraphQLInterfaceType;
4949
import graphql.schema.GraphQLNamedInputType;
5050
import graphql.schema.GraphQLNamedOutputType;
51+
import graphql.schema.GraphQLNamedType;
5152
import graphql.schema.GraphQLObjectType;
5253
import graphql.schema.GraphQLOutputType;
5354
import graphql.schema.GraphQLScalarType;
@@ -115,8 +116,8 @@ static class BuildContext {
115116
private final RuntimeWiring wiring;
116117
private final Deque<String> typeStack = new ArrayDeque<>();
117118

118-
private final Map<String, GraphQLOutputType> outputGTypes = new LinkedHashMap<>();
119-
private final Map<String, GraphQLInputType> inputGTypes = new LinkedHashMap<>();
119+
private final Map<String, GraphQLNamedOutputType> outputGTypes = new LinkedHashMap<>();
120+
private final Map<String, GraphQLNamedInputType> inputGTypes = new LinkedHashMap<>();
120121
private final Set<GraphQLDirective> directives = new LinkedHashSet<>();
121122
private final GraphQLCodeRegistry.Builder codeRegistry;
122123
public final Map<String, OperationTypeDefinition> operationTypeDefs;
@@ -173,15 +174,15 @@ void putOutputType(GraphQLNamedOutputType outputType) {
173174
outputGTypes.put(outputType.getName(), outputType);
174175
// certain types can be both input and output types, for example enums and scalars
175176
if (outputType instanceof GraphQLInputType) {
176-
inputGTypes.put(outputType.getName(), (GraphQLInputType) outputType);
177+
inputGTypes.put(outputType.getName(), (GraphQLNamedInputType) outputType);
177178
}
178179
}
179180

180181
void putInputType(GraphQLNamedInputType inputType) {
181182
inputGTypes.put(inputType.getName(), inputType);
182183
// certain types can be both input and output types, for example enums and scalars
183184
if (inputType instanceof GraphQLOutputType) {
184-
outputGTypes.put(inputType.getName(), (GraphQLOutputType) inputType);
185+
outputGTypes.put(inputType.getName(), (GraphQLNamedOutputType) inputType);
185186
}
186187
}
187188

@@ -996,12 +997,12 @@ List<UnionTypeExtensionDefinition> unionTypeExtensions(UnionTypeDefinition typeD
996997
*
997998
* @return the additional types not referenced from the top level operations
998999
*/
999-
Set<GraphQLType> buildAdditionalTypes(BuildContext buildCtx) {
1000+
Set<GraphQLNamedType> buildAdditionalTypes(BuildContext buildCtx) {
10001001
TypeDefinitionRegistry typeRegistry = buildCtx.getTypeRegistry();
10011002

10021003
Set<String> detachedTypeNames = getDetachedTypeNames(buildCtx);
10031004

1004-
Set<GraphQLType> additionalTypes = new LinkedHashSet<>();
1005+
Set<GraphQLNamedType> additionalTypes = new LinkedHashSet<>();
10051006
// recursively record detached types on the ctx and add them to the additionalTypes set
10061007
typeRegistry.types().values().stream()
10071008
.filter(typeDefinition -> detachedTypeNames.contains(typeDefinition.getName()))

src/main/java/graphql/schema/transform/FieldVisibilitySchemaTransformation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ private Function<GraphQLSchemaElement, List<GraphQLSchemaElement>> getChildrenFn
112112

113113
private GraphQLSchema removeUnreferencedTypes(Set<GraphQLType> markedForRemovalTypes, GraphQLSchema connectedSchema) {
114114
GraphQLSchema withoutAdditionalTypes = connectedSchema.transform(builder -> {
115-
Set<GraphQLType> additionalTypes = new HashSet<>(connectedSchema.getAdditionalTypes());
115+
Set<GraphQLNamedType> additionalTypes = new HashSet<>(connectedSchema.getAdditionalTypes());
116116
additionalTypes.removeAll(markedForRemovalTypes);
117117
builder.clearAdditionalTypes();
118118
builder.additionalTypes(additionalTypes);

src/test/groovy/graphql/validation/SpecValidationSchema.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import graphql.schema.GraphQLInputObjectField;
1010
import graphql.schema.GraphQLInputObjectType;
1111
import graphql.schema.GraphQLInterfaceType;
12+
import graphql.schema.GraphQLNamedType;
1213
import graphql.schema.GraphQLObjectType;
1314
import graphql.schema.GraphQLSchema;
1415
import graphql.schema.GraphQLType;
@@ -236,7 +237,7 @@ public class SpecValidationSchema {
236237
.type(inputDogType)))
237238
.build();
238239

239-
public static final Set<GraphQLType> specValidationDictionary = new HashSet<GraphQLType>() {{
240+
public static final Set<GraphQLNamedType> specValidationDictionary = new HashSet<GraphQLNamedType>() {{
240241
add(dogCommand);
241242
add(catCommand);
242243
add(sentient);

0 commit comments

Comments
 (0)