From 45af5936687be286d013521330eaa6d67cf5dd5b Mon Sep 17 00:00:00 2001 From: peter royal Date: Thu, 23 May 2024 14:32:21 -0700 Subject: [PATCH] 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 --- .../execution/ContextDataFetcherDecorator.java | 4 ++++ .../ContextDataFetcherDecoratorTests.java | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java b/spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java index 1a3194d9..8ad85750 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/execution/ContextDataFetcherDecorator.java @@ -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 { } private boolean applyDecorator(DataFetcher dataFetcher) { + if (dataFetcher instanceof TrivialDataFetcher) { + return false; + } Class type = dataFetcher.getClass(); String packageName = type.getPackage().getName(); if (packageName.startsWith("graphql.")) { diff --git a/spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java b/spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java index 01c4ddaa..83481cc4 100644 --- a/spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java +++ b/spring-graphql/src/test/java/org/springframework/graphql/execution/ContextDataFetcherDecoratorTests.java @@ -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); + } + }