Skip to content

Commit 8870cd1

Browse files
committed
Polishing in ContextDataFetcherDecorator
See gh-722
1 parent 800cf8f commit 8870cd1

File tree

1 file changed

+33
-24
lines changed

1 file changed

+33
-24
lines changed

spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -113,40 +113,49 @@ public Object get(DataFetchingEnvironment environment) throws Exception {
113113
* data fetchers with the {@link ContextDataFetcherDecorator}.
114114
*/
115115
static GraphQLTypeVisitor createVisitor(List<SubscriptionExceptionResolver> resolvers) {
116+
return new ContextTypeVisitor(resolvers);
117+
}
116118

117-
SubscriptionExceptionResolver exceptionResolver = new CompositeSubscriptionExceptionResolver(resolvers);
118119

119-
return new GraphQLTypeVisitorStub() {
120+
/**
121+
* Type visitor to apply {@link ContextDataFetcherDecorator}.
122+
*/
123+
private static class ContextTypeVisitor extends GraphQLTypeVisitorStub {
120124

121-
@Override
122-
public TraversalControl visitGraphQLFieldDefinition(
123-
GraphQLFieldDefinition fieldDefinition, TraverserContext<GraphQLSchemaElement> context) {
125+
private final SubscriptionExceptionResolver exceptionResolver;
124126

125-
TypeVisitorHelper visitorHelper = context.getVarFromParents(TypeVisitorHelper.class);
126-
GraphQLCodeRegistry.Builder codeRegistry = context.getVarFromParents(GraphQLCodeRegistry.Builder.class);
127+
private ContextTypeVisitor(List<SubscriptionExceptionResolver> resolvers) {
128+
this.exceptionResolver = new CompositeSubscriptionExceptionResolver(resolvers);
129+
}
127130

128-
GraphQLFieldsContainer parent = (GraphQLFieldsContainer) context.getParentNode();
129-
DataFetcher<?> dataFetcher = codeRegistry.getDataFetcher(parent, fieldDefinition);
131+
@Override
132+
public TraversalControl visitGraphQLFieldDefinition(
133+
GraphQLFieldDefinition fieldDefinition, TraverserContext<GraphQLSchemaElement> context) {
130134

131-
if (applyDecorator(dataFetcher)) {
132-
boolean handlesSubscription = visitorHelper.isSubscriptionType(parent);
133-
dataFetcher = new ContextDataFetcherDecorator(dataFetcher, handlesSubscription, exceptionResolver);
134-
codeRegistry.dataFetcher(parent, fieldDefinition, dataFetcher);
135-
}
135+
TypeVisitorHelper visitorHelper = context.getVarFromParents(TypeVisitorHelper.class);
136+
GraphQLCodeRegistry.Builder codeRegistry = context.getVarFromParents(GraphQLCodeRegistry.Builder.class);
136137

137-
return TraversalControl.CONTINUE;
138+
GraphQLFieldsContainer parent = (GraphQLFieldsContainer) context.getParentNode();
139+
DataFetcher<?> dataFetcher = codeRegistry.getDataFetcher(parent, fieldDefinition);
140+
141+
if (applyDecorator(dataFetcher)) {
142+
boolean handlesSubscription = visitorHelper.isSubscriptionType(parent);
143+
dataFetcher = new ContextDataFetcherDecorator(dataFetcher, handlesSubscription, exceptionResolver);
144+
codeRegistry.dataFetcher(parent, fieldDefinition, dataFetcher);
138145
}
139146

140-
private boolean applyDecorator(DataFetcher<?> dataFetcher) {
141-
Class<?> type = dataFetcher.getClass();
142-
String packageName = type.getPackage().getName();
143-
if (packageName.startsWith("graphql.")) {
144-
return (type.getSimpleName().startsWith("DataFetcherFactories") ||
145-
packageName.startsWith("graphql.validation"));
146-
}
147-
return true;
147+
return TraversalControl.CONTINUE;
148+
}
149+
150+
private boolean applyDecorator(DataFetcher<?> dataFetcher) {
151+
Class<?> type = dataFetcher.getClass();
152+
String packageName = type.getPackage().getName();
153+
if (packageName.startsWith("graphql.")) {
154+
return (type.getSimpleName().startsWith("DataFetcherFactories") ||
155+
packageName.startsWith("graphql.validation"));
148156
}
149-
};
157+
return true;
158+
}
150159
}
151160

152161
}

0 commit comments

Comments
 (0)