Skip to content

Commit 4c5aca5

Browse files
authored
Merge pull request #1084 from intuit/typesvisitor
Add visitor for types and use generic traversal
2 parents b55f8a5 + a4850c0 commit 4c5aca5

24 files changed

+995
-201
lines changed

src/main/java/graphql/schema/GraphQLArgument.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import graphql.PublicApi;
55
import graphql.language.InputValueDefinition;
66
import graphql.util.FpKit;
7+
import graphql.util.TraversalControl;
8+
import graphql.util.TraverserContext;
79

810
import java.util.ArrayList;
911
import java.util.Collections;
@@ -71,8 +73,8 @@ private GraphQLArgument(String name, String description, GraphQLInputType type,
7173
}
7274

7375

74-
void replaceTypeReferences(Map<String, GraphQLType> typeMap) {
75-
type = (GraphQLInputType) new SchemaUtil().resolveTypeReference(type, typeMap);
76+
void replaceType(GraphQLInputType type) {
77+
this.type = type;
7678
}
7779

7880
@Override
@@ -140,6 +142,16 @@ public static Builder newArgument(GraphQLArgument existing) {
140142
return new Builder(existing);
141143
}
142144

145+
@Override
146+
public TraversalControl accept(TraverserContext<GraphQLType> context, GraphQLTypeVisitor visitor) {
147+
return visitor.visitGraphQLArgument(this, context);
148+
}
149+
150+
@Override
151+
public List<GraphQLType> getChildren() {
152+
return Collections.singletonList(type);
153+
}
154+
143155
public static class Builder {
144156

145157
private String name;

src/main/java/graphql/schema/GraphQLEnumType.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import graphql.PublicApi;
77
import graphql.language.EnumTypeDefinition;
88
import graphql.language.EnumValue;
9+
import graphql.util.TraversalControl;
10+
import graphql.util.TraverserContext;
911

1012
import java.util.ArrayList;
1113
import java.util.LinkedHashMap;
@@ -175,6 +177,16 @@ public GraphQLEnumType transform(Consumer<Builder> builderConsumer) {
175177
return builder.build();
176178
}
177179

180+
@Override
181+
public TraversalControl accept(TraverserContext<GraphQLType> context, GraphQLTypeVisitor visitor) {
182+
return visitor.visitGraphQLEnumType(this, context);
183+
}
184+
185+
@Override
186+
public List<GraphQLType> getChildren() {
187+
return new ArrayList<>(valueDefinitionMap.values());
188+
}
189+
178190
public static Builder newEnum() {
179191
return new Builder();
180192
}

src/main/java/graphql/schema/GraphQLEnumValueDefinition.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import graphql.DirectivesUtil;
55
import graphql.Internal;
66
import graphql.PublicApi;
7+
import graphql.util.TraversalControl;
8+
import graphql.util.TraverserContext;
79

810
import java.util.ArrayList;
911
import java.util.LinkedHashMap;
@@ -105,6 +107,12 @@ public GraphQLEnumValueDefinition transform(Consumer<Builder> builderConsumer) {
105107
return builder.build();
106108
}
107109

110+
@Override
111+
public TraversalControl accept(TraverserContext<GraphQLType> context, GraphQLTypeVisitor visitor) {
112+
return visitor.visitGraphQLEnumValueDefinition(this, context);
113+
}
114+
115+
108116
public static Builder newEnumValueDefinition() {
109117
return new Builder();
110118
}

src/main/java/graphql/schema/GraphQLFieldDefinition.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import graphql.Internal;
55
import graphql.PublicApi;
66
import graphql.language.FieldDefinition;
7+
import graphql.util.TraversalControl;
8+
import graphql.util.TraverserContext;
79

810
import java.util.ArrayList;
911
import java.util.Collections;
@@ -64,9 +66,8 @@ public GraphQLFieldDefinition(String name, String description, GraphQLOutputType
6466
this.definition = definition;
6567
}
6668

67-
68-
void replaceTypeReferences(Map<String, GraphQLType> typeMap) {
69-
this.type = (GraphQLOutputType) new SchemaUtil().resolveTypeReference(this.type, typeMap);
69+
void replaceType(GraphQLOutputType type) {
70+
this.type = type;
7071
}
7172

7273
@Override
@@ -144,6 +145,19 @@ public GraphQLFieldDefinition transform(Consumer<Builder> builderConsumer) {
144145
return builder.build();
145146
}
146147

148+
@Override
149+
public TraversalControl accept(TraverserContext<GraphQLType> context, GraphQLTypeVisitor visitor) {
150+
return visitor.visitGraphQLFieldDefinition(this, context);
151+
}
152+
153+
@Override
154+
public List<GraphQLType> getChildren() {
155+
List<GraphQLType> children = new ArrayList<>();
156+
children.add(type);
157+
children.addAll(arguments);
158+
return children;
159+
}
160+
147161
public static Builder newFieldDefinition(GraphQLFieldDefinition existing) {
148162
return new Builder(existing);
149163
}

src/main/java/graphql/schema/GraphQLInputObjectField.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
import graphql.Internal;
55
import graphql.PublicApi;
66
import graphql.language.InputValueDefinition;
7+
import graphql.util.TraversalControl;
8+
import graphql.util.TraverserContext;
79

810
import java.util.ArrayList;
11+
import java.util.Collections;
912
import java.util.LinkedHashMap;
1013
import java.util.List;
1114
import java.util.Map;
@@ -59,8 +62,8 @@ public GraphQLInputObjectField(String name, String description, GraphQLInputType
5962
this.definition = definition;
6063
}
6164

62-
void replaceTypeReferences(Map<String, GraphQLType> typeMap) {
63-
type = (GraphQLInputType) new SchemaUtil().resolveTypeReference(type, typeMap);
65+
void replaceType(GraphQLInputType type) {
66+
this.type = type;
6467
}
6568

6669
@Override
@@ -103,6 +106,16 @@ public GraphQLInputObjectField transform(Consumer<Builder> builderConsumer) {
103106
return builder.build();
104107
}
105108

109+
@Override
110+
public TraversalControl accept(TraverserContext<GraphQLType> context, GraphQLTypeVisitor visitor) {
111+
return visitor.visitGraphQLInputObjectField(this, context);
112+
}
113+
114+
@Override
115+
public List<GraphQLType> getChildren() {
116+
return Collections.singletonList(type);
117+
}
118+
106119
public static Builder newInputObjectField(GraphQLInputObjectField existing) {
107120
return new Builder(existing);
108121
}

src/main/java/graphql/schema/GraphQLInputObjectType.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import graphql.Internal;
55
import graphql.PublicApi;
66
import graphql.language.InputObjectTypeDefinition;
7+
import graphql.util.TraversalControl;
8+
import graphql.util.TraverserContext;
79

810
import java.util.ArrayList;
911
import java.util.LinkedHashMap;
@@ -110,6 +112,16 @@ public GraphQLInputObjectType transform(Consumer<Builder> builderConsumer) {
110112
return builder.build();
111113
}
112114

115+
@Override
116+
public TraversalControl accept(TraverserContext<GraphQLType> context, GraphQLTypeVisitor visitor) {
117+
return visitor.visitGraphQLInputObjectType(this, context);
118+
}
119+
120+
@Override
121+
public List<GraphQLType> getChildren() {
122+
return new ArrayList<>(fieldMap.values());
123+
}
124+
113125
public static Builder newInputObject(GraphQLInputObjectType existing) {
114126
return new Builder(existing);
115127
}

src/main/java/graphql/schema/GraphQLInterfaceType.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import graphql.Internal;
55
import graphql.PublicApi;
66
import graphql.language.InterfaceTypeDefinition;
7+
import graphql.util.TraversalControl;
8+
import graphql.util.TraverserContext;
79

810
import java.util.ArrayList;
911
import java.util.Collections;
@@ -125,6 +127,16 @@ public GraphQLInterfaceType transform(Consumer<Builder> builderConsumer) {
125127
return builder.build();
126128
}
127129

130+
@Override
131+
public TraversalControl accept(TraverserContext<GraphQLType> context, GraphQLTypeVisitor visitor) {
132+
return visitor.visitGraphQLInterfaceType(this, context);
133+
}
134+
135+
@Override
136+
public List<GraphQLType> getChildren() {
137+
return new ArrayList<>(fieldDefinitionsByName.values());
138+
}
139+
128140
public static Builder newInterface() {
129141
return new Builder();
130142
}

src/main/java/graphql/schema/GraphQLList.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33

44
import graphql.PublicApi;
5+
import graphql.util.TraversalControl;
6+
import graphql.util.TraverserContext;
57

8+
import java.util.Collections;
9+
import java.util.List;
610
import java.util.Map;
711

812
import static graphql.Assert.assertNotNull;
@@ -41,8 +45,8 @@ public GraphQLType getWrappedType() {
4145
return wrappedType;
4246
}
4347

44-
void replaceTypeReferences(Map<String, GraphQLType> typeMap) {
45-
wrappedType = new SchemaUtil().resolveTypeReference(wrappedType, typeMap);
48+
void replaceType(GraphQLType type) {
49+
wrappedType = type;
4650
}
4751

4852
@Override
@@ -65,4 +69,14 @@ public int hashCode() {
6569
public String getName() {
6670
return null;
6771
}
72+
73+
@Override
74+
public TraversalControl accept(TraverserContext<GraphQLType> context, GraphQLTypeVisitor visitor) {
75+
return visitor.visitGraphQLList(this, context);
76+
}
77+
78+
@Override
79+
public List<GraphQLType> getChildren() {
80+
return Collections.singletonList(wrappedType);
81+
}
6882
}

src/main/java/graphql/schema/GraphQLNonNull.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33

44
import graphql.PublicApi;
5+
import graphql.util.TraversalControl;
6+
import graphql.util.TraverserContext;
57

8+
import java.util.Collections;
9+
import java.util.List;
610
import java.util.Map;
711

812
import static graphql.Assert.assertNotNull;
@@ -41,8 +45,9 @@ public GraphQLType getWrappedType() {
4145
return wrappedType;
4246
}
4347

44-
void replaceTypeReferences(Map<String, GraphQLType> typeMap) {
45-
wrappedType = new SchemaUtil().resolveTypeReference(wrappedType, typeMap);
48+
49+
void replaceType(GraphQLType type) {
50+
wrappedType = type;
4651
}
4752

4853
@Override
@@ -72,4 +77,14 @@ public String toString() {
7277
public String getName() {
7378
return null;
7479
}
80+
81+
@Override
82+
public TraversalControl accept(TraverserContext<GraphQLType> context, GraphQLTypeVisitor visitor) {
83+
return visitor.visitGraphQLNonNull(this, context);
84+
}
85+
86+
@Override
87+
public List<GraphQLType> getChildren() {
88+
return Collections.singletonList(wrappedType);
89+
}
7590
}

src/main/java/graphql/schema/GraphQLObjectType.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import graphql.Internal;
55
import graphql.PublicApi;
66
import graphql.language.ObjectTypeDefinition;
7+
import graphql.util.TraversalControl;
8+
import graphql.util.TraverserContext;
79

810
import java.util.ArrayList;
911
import java.util.LinkedHashMap;
@@ -60,10 +62,8 @@ public GraphQLObjectType(String name, String description, List<GraphQLFieldDefin
6062
buildDefinitionMap(fieldDefinitions);
6163
}
6264

63-
void replaceTypeReferences(Map<String, GraphQLType> typeMap) {
64-
this.interfaces = this.interfaces.stream()
65-
.map(type -> (GraphQLOutputType) new SchemaUtil().resolveTypeReference(type, typeMap))
66-
.collect(Collectors.toList());
65+
void replaceInterfaces(List<GraphQLOutputType> interfaces) {
66+
this.interfaces = interfaces;
6767
}
6868

6969
private void buildDefinitionMap(List<GraphQLFieldDefinition> fieldDefinitions) {
@@ -138,6 +138,18 @@ public GraphQLObjectType transform(Consumer<Builder> builderConsumer) {
138138
return builder.build();
139139
}
140140

141+
@Override
142+
public TraversalControl accept(TraverserContext<GraphQLType> context, GraphQLTypeVisitor visitor) {
143+
return visitor.visitGraphQLObjectType(this, context);
144+
}
145+
146+
@Override
147+
public List<GraphQLType> getChildren() {
148+
List<GraphQLType> children = new ArrayList<>(fieldDefinitionsByName.values());
149+
children.addAll(interfaces);
150+
return children;
151+
}
152+
141153
public static Builder newObject() {
142154
return new Builder();
143155
}

0 commit comments

Comments
 (0)