@@ -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