Skip to content

Commit 45af593

Browse files
osirstoyanchev
authored andcommitted
Skip TrivialDataFetcher in ContextDataFetcherDecorator
The `applyDecorator` method is working to exclude things from graphql-java. The TrivialDataFetcher interface is used to know when to perform instrumentation and is a part of the public SPI and should be preserved. See gh-983
1 parent f3b7861 commit 45af593

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import graphql.ExecutionInput;
2222
import graphql.GraphQLContext;
23+
import graphql.TrivialDataFetcher;
2324
import graphql.schema.DataFetcher;
2425
import graphql.schema.DataFetchingEnvironment;
2526
import graphql.schema.FieldCoordinates;
@@ -150,6 +151,9 @@ public TraversalControl visitGraphQLFieldDefinition(
150151
}
151152

152153
private boolean applyDecorator(DataFetcher<?> dataFetcher) {
154+
if (dataFetcher instanceof TrivialDataFetcher) {
155+
return false;
156+
}
153157
Class<?> type = dataFetcher.getClass();
154158
String packageName = type.getPackage().getName();
155159
if (packageName.startsWith("graphql.")) {

spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,12 @@
2727
import graphql.GraphQL;
2828
import graphql.GraphQLError;
2929
import graphql.GraphqlErrorBuilder;
30+
import graphql.TrivialDataFetcher;
3031
import graphql.schema.DataFetcher;
3132
import graphql.schema.DataFetcherFactories;
33+
import graphql.schema.FieldCoordinates;
3234
import graphql.schema.GraphQLFieldDefinition;
35+
import graphql.schema.GraphQLSchema;
3336
import graphql.schema.idl.SchemaDirectiveWiring;
3437
import graphql.schema.idl.SchemaDirectiveWiringEnvironment;
3538
import io.micrometer.context.ContextRegistry;
@@ -238,4 +241,18 @@ else if (value instanceof Mono) {
238241
tester.accept(directiveWiring, env -> Mono.just("hello"));
239242
}
240243

244+
@Test //gh-980
245+
void trivialDataFetcherIsNotDecorated() {
246+
GraphQL graphQl = GraphQlSetup.schemaContent(SCHEMA_CONTENT)
247+
.queryFetcher("greeting", (TrivialDataFetcher) env -> "hello")
248+
.toGraphQl();
249+
250+
GraphQLSchema schema = graphQl.getGraphQLSchema();
251+
FieldCoordinates coordinates = FieldCoordinates.coordinates("Query", "greeting");
252+
DataFetcher<?> dataFetcher = schema.getCodeRegistry()
253+
.getDataFetcher(coordinates, schema.getFieldDefinition(coordinates));
254+
255+
assertThat(dataFetcher).isInstanceOf(TrivialDataFetcher.class);
256+
}
257+
241258
}

0 commit comments

Comments
 (0)