Skip to content

Commit 6ddb87f

Browse files
authored
Merge pull request #1309 from graphql-java/trivial-df-interface
moves the info if a DF is trivial out of the DF itself into a marker
2 parents 3dcabef + 319c0b6 commit 6ddb87f

7 files changed

Lines changed: 23 additions & 31 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package graphql;
2+
3+
import graphql.schema.DataFetcher;
4+
5+
6+
/**
7+
* Mark a DataFetcher as trivial:
8+
* If a data fetcher is simply mapping data from an object to a field, it can be considered a trivial data fetcher for the purposes
9+
* of tracing and so on.
10+
*/
11+
@PublicSpi
12+
public interface TrivialDataFetcher<T> extends DataFetcher<T> {
13+
}

src/main/java/graphql/execution/ExecutionStrategy.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import graphql.Internal;
77
import graphql.PublicSpi;
88
import graphql.SerializationError;
9+
import graphql.TrivialDataFetcher;
910
import graphql.TypeMismatchError;
1011
import graphql.TypeResolutionEnvironment;
1112
import graphql.UnresolvedTypeError;
@@ -251,7 +252,7 @@ protected CompletableFuture<Object> fetchField(ExecutionContext executionContext
251252

252253
Instrumentation instrumentation = executionContext.getInstrumentation();
253254

254-
InstrumentationFieldFetchParameters instrumentationFieldFetchParams = new InstrumentationFieldFetchParameters(executionContext, fieldDef, environment, parameters, dataFetcher.isTrivialDataFetcher());
255+
InstrumentationFieldFetchParameters instrumentationFieldFetchParams = new InstrumentationFieldFetchParameters(executionContext, fieldDef, environment, parameters, dataFetcher instanceof TrivialDataFetcher);
255256
InstrumentationContext<Object> fetchCtx = instrumentation.beginFieldFetch(instrumentationFieldFetchParams);
256257

257258
CompletableFuture<Object> fetchedValue;

src/main/java/graphql/execution/batched/BatchedExecutionStrategy.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import graphql.ExecutionResult;
55
import graphql.ExecutionResultImpl;
66
import graphql.PublicApi;
7+
import graphql.TrivialDataFetcher;
78
import graphql.execution.Async;
89
import graphql.execution.DataFetcherExceptionHandler;
910
import graphql.execution.DataFetcherExceptionHandlerParameters;
@@ -258,7 +259,7 @@ private CompletableFuture<FetchedValues> fetchData(ExecutionContext executionCon
258259
.build();
259260

260261
DataFetcher supplied = fieldDef.getDataFetcher();
261-
boolean trivialDataFetcher = supplied.isTrivialDataFetcher();
262+
boolean trivialDataFetcher = supplied instanceof TrivialDataFetcher;
262263
BatchedDataFetcher batchedDataFetcher = batchingFactory.create(supplied);
263264

264265
Instrumentation instrumentation = executionContext.getInstrumentation();

src/main/java/graphql/relay/SimpleListConnection.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package graphql.relay;
22

33
import graphql.PublicApi;
4+
import graphql.TrivialDataFetcher;
45
import graphql.schema.DataFetcher;
56
import graphql.schema.DataFetchingEnvironment;
67

@@ -16,7 +17,7 @@
1617
import static java.util.Base64.getEncoder;
1718

1819
@PublicApi
19-
public class SimpleListConnection<T> implements DataFetcher<Connection<T>> {
20+
public class SimpleListConnection<T> implements DataFetcher<Connection<T>>, TrivialDataFetcher<Connection<T>> {
2021

2122
static final String DUMMY_CURSOR_PREFIX = "simple-cursor";
2223
private final String prefix;
@@ -41,11 +42,6 @@ private List<Edge<T>> buildEdges() {
4142
return edges;
4243
}
4344

44-
@Override
45-
public boolean isTrivialDataFetcher() {
46-
return true;
47-
}
48-
4945
@Override
5046
public Connection<T> get(DataFetchingEnvironment environment) {
5147

src/main/java/graphql/schema/DataFetcher.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,4 @@ public interface DataFetcher<T> {
3131
T get(DataFetchingEnvironment environment) throws Exception;
3232

3333

34-
/**
35-
* If a data fetcher is simply mapping data from an object to a field, it can be considered a trivial data fetcher for the purposes
36-
* of tracing and so on.
37-
*
38-
* @return true if the data fetcher can be considered a trivial data fetcher.
39-
*/
40-
default boolean isTrivialDataFetcher() {
41-
return false;
42-
}
4334
}

src/main/java/graphql/schema/PropertyDataFetcher.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import graphql.Assert;
55
import graphql.GraphQLException;
66
import graphql.PublicApi;
7+
import graphql.TrivialDataFetcher;
78

89
import java.lang.reflect.Field;
910
import java.lang.reflect.InvocationTargetException;
@@ -46,7 +47,7 @@
4647
* @see graphql.schema.DataFetcher
4748
*/
4849
@PublicApi
49-
public class PropertyDataFetcher<T> implements DataFetcher<T> {
50+
public class PropertyDataFetcher<T> implements DataFetcher<T>, TrivialDataFetcher<T> {
5051

5152
private final String propertyName;
5253
private final Function<Object, Object> function;
@@ -122,14 +123,6 @@ public String getPropertyName() {
122123
return propertyName;
123124
}
124125

125-
/**
126-
* @return true - because PropertyDataFetcher is one the most trivial fetchers
127-
*/
128-
@Override
129-
public boolean isTrivialDataFetcher() {
130-
return true;
131-
}
132-
133126
@SuppressWarnings("unchecked")
134127
@Override
135128
public T get(DataFetchingEnvironment environment) {

src/main/java/graphql/schema/StaticDataFetcher.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33

44
import graphql.PublicApi;
5+
import graphql.TrivialDataFetcher;
56

67
/**
78
* A {@link graphql.schema.DataFetcher} that always returns the same value
89
*/
910
@PublicApi
10-
public class StaticDataFetcher implements DataFetcher {
11+
public class StaticDataFetcher implements DataFetcher, TrivialDataFetcher {
1112

1213

1314
private final Object value;
@@ -21,8 +22,4 @@ public Object get(DataFetchingEnvironment environment) {
2122
return value;
2223
}
2324

24-
@Override
25-
public boolean isTrivialDataFetcher() {
26-
return true;
27-
}
2825
}

0 commit comments

Comments
 (0)