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
This commit is contained in:
peter royal
2024-05-23 14:32:21 -07:00
committed by rstoyanchev
parent f3b7861127
commit 45af593668
2 changed files with 21 additions and 0 deletions

View File

@@ -20,6 +20,7 @@ import java.util.List;
import graphql.ExecutionInput;
import graphql.GraphQLContext;
import graphql.TrivialDataFetcher;
import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
import graphql.schema.FieldCoordinates;
@@ -150,6 +151,9 @@ final class ContextDataFetcherDecorator implements DataFetcher<Object> {
}
private boolean applyDecorator(DataFetcher<?> dataFetcher) {
if (dataFetcher instanceof TrivialDataFetcher) {
return false;
}
Class<?> type = dataFetcher.getClass();
String packageName = type.getPackage().getName();
if (packageName.startsWith("graphql.")) {

View File

@@ -27,9 +27,12 @@ import graphql.ExecutionResult;
import graphql.GraphQL;
import graphql.GraphQLError;
import graphql.GraphqlErrorBuilder;
import graphql.TrivialDataFetcher;
import graphql.schema.DataFetcher;
import graphql.schema.DataFetcherFactories;
import graphql.schema.FieldCoordinates;
import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.GraphQLSchema;
import graphql.schema.idl.SchemaDirectiveWiring;
import graphql.schema.idl.SchemaDirectiveWiringEnvironment;
import io.micrometer.context.ContextRegistry;
@@ -238,4 +241,18 @@ public class ContextDataFetcherDecoratorTests {
tester.accept(directiveWiring, env -> Mono.just("hello"));
}
@Test //gh-980
void trivialDataFetcherIsNotDecorated() {
GraphQL graphQl = GraphQlSetup.schemaContent(SCHEMA_CONTENT)
.queryFetcher("greeting", (TrivialDataFetcher) env -> "hello")
.toGraphQl();
GraphQLSchema schema = graphQl.getGraphQLSchema();
FieldCoordinates coordinates = FieldCoordinates.coordinates("Query", "greeting");
DataFetcher<?> dataFetcher = schema.getCodeRegistry()
.getDataFetcher(coordinates, schema.getFieldDefinition(coordinates));
assertThat(dataFetcher).isInstanceOf(TrivialDataFetcher.class);
}
}