Skip to content

Commit 4db4283

Browse files
committed
make ExecutionContext available via DataFetchingEnvironment
1 parent dab73a8 commit 4db4283

6 files changed

Lines changed: 51 additions & 8 deletions

File tree

src/main/java/graphql/schema/DataFetchingEnvironment.java

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

33
import graphql.PublicApi;
4+
import graphql.execution.ExecutionContext;
45
import graphql.execution.ExecutionId;
56
import graphql.execution.ExecutionTypeInfo;
67
import graphql.language.Field;
@@ -143,4 +144,6 @@ public interface DataFetchingEnvironment {
143144
* @return the {@link DataFetchingFieldSelectionSet} for the current data fetch operation
144145
*/
145146
DataFetchingFieldSelectionSet getSelectionSet();
147+
148+
ExecutionContext getExecutionContext();
146149
}

src/main/java/graphql/schema/DataFetchingEnvironmentBuilder.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
@PublicApi
1818
public class DataFetchingEnvironmentBuilder {
1919

20+
2021
/**
2122
* @return a new {@link DataFetchingEnvironmentBuilder}
2223
*/
@@ -38,6 +39,7 @@ public static DataFetchingEnvironmentBuilder newDataFetchingEnvironment(DataFetc
3839
.fragmentsByName(environment.getFragmentsByName())
3940
.executionId(environment.getExecutionId())
4041
.selectionSet(environment.getSelectionSet())
42+
.executionContext(environment.getExecutionContext())
4143
;
4244
}
4345

@@ -47,7 +49,9 @@ public static DataFetchingEnvironmentBuilder newDataFetchingEnvironment(Executio
4749
.root(executionContext.getRoot())
4850
.graphQLSchema(executionContext.getGraphQLSchema())
4951
.fragmentsByName(executionContext.getFragmentsByName())
50-
.executionId(executionContext.getExecutionId());
52+
.executionId(executionContext.getExecutionId())
53+
.executionContext(executionContext);
54+
5155
}
5256

5357

@@ -64,6 +68,7 @@ public static DataFetchingEnvironmentBuilder newDataFetchingEnvironment(Executio
6468
private ExecutionId executionId;
6569
private DataFetchingFieldSelectionSet selectionSet;
6670
private ExecutionTypeInfo typeInfo;
71+
private ExecutionContext executionContext;
6772

6873
public DataFetchingEnvironmentBuilder source(Object source) {
6974
this.source = source;
@@ -130,9 +135,15 @@ public DataFetchingEnvironmentBuilder fieldTypeInfo(ExecutionTypeInfo typeInfo)
130135
return this;
131136
}
132137

138+
public DataFetchingEnvironmentBuilder executionContext(ExecutionContext executionContext) {
139+
this.executionContext = executionContext;
140+
return this;
141+
}
142+
133143
public DataFetchingEnvironment build() {
134144
return new DataFetchingEnvironmentImpl(source, arguments, context, root,
135145
fieldDefinition, fields, fieldType, parentType, graphQLSchema, fragmentsByName, executionId, selectionSet,
136-
typeInfo);
146+
typeInfo,
147+
executionContext);
137148
}
138149
}

src/main/java/graphql/schema/DataFetchingEnvironmentImpl.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33

44
import graphql.Internal;
5+
import graphql.execution.ExecutionContext;
56
import graphql.execution.ExecutionId;
67
import graphql.execution.ExecutionTypeInfo;
78
import graphql.language.Field;
@@ -10,6 +11,8 @@
1011
import java.util.List;
1112
import java.util.Map;
1213

14+
import static graphql.Assert.assertNotNull;
15+
1316
@SuppressWarnings("unchecked")
1417
@Internal
1518
public class DataFetchingEnvironmentImpl implements DataFetchingEnvironment {
@@ -26,8 +29,22 @@ public class DataFetchingEnvironmentImpl implements DataFetchingEnvironment {
2629
private final ExecutionId executionId;
2730
private final DataFetchingFieldSelectionSet selectionSet;
2831
private final ExecutionTypeInfo fieldTypeInfo;
29-
30-
public DataFetchingEnvironmentImpl(Object source, Map<String, Object> arguments, Object context, Object root, GraphQLFieldDefinition fieldDefinition, List<Field> fields, GraphQLOutputType fieldType, GraphQLType parentType, GraphQLSchema graphQLSchema, Map<String, FragmentDefinition> fragmentsByName, ExecutionId executionId, DataFetchingFieldSelectionSet selectionSet, ExecutionTypeInfo fieldTypeInfo) {
32+
private ExecutionContext executionContext;
33+
34+
public DataFetchingEnvironmentImpl(Object source,
35+
Map<String, Object> arguments,
36+
Object context,
37+
Object root,
38+
GraphQLFieldDefinition fieldDefinition,
39+
List<Field> fields,
40+
GraphQLOutputType fieldType,
41+
GraphQLType parentType,
42+
GraphQLSchema graphQLSchema,
43+
Map<String, FragmentDefinition> fragmentsByName,
44+
ExecutionId executionId,
45+
DataFetchingFieldSelectionSet selectionSet,
46+
ExecutionTypeInfo fieldTypeInfo,
47+
ExecutionContext executionContext) {
3148
this.source = source;
3249
this.arguments = arguments;
3350
this.context = context;
@@ -41,6 +58,7 @@ public DataFetchingEnvironmentImpl(Object source, Map<String, Object> arguments,
4158
this.executionId = executionId;
4259
this.selectionSet = selectionSet;
4360
this.fieldTypeInfo = fieldTypeInfo;
61+
this.executionContext = assertNotNull(executionContext);
4462
}
4563

4664
@Override
@@ -123,6 +141,11 @@ public ExecutionTypeInfo getFieldTypeInfo() {
123141
return fieldTypeInfo;
124142
}
125143

144+
@Override
145+
public ExecutionContext getExecutionContext() {
146+
return executionContext;
147+
}
148+
126149
@Override
127150
public String toString() {
128151
return "DataFetchingEnvironmentImpl{" +

src/test/groovy/graphql/DataFetcherTest.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package graphql
22

3+
import graphql.execution.ExecutionContext
34
import graphql.schema.GraphQLOutputType
45
import graphql.schema.PropertyDataFetcher
56
import spock.lang.Specification
@@ -51,10 +52,11 @@ class DataFetcherTest extends Specification {
5152
dataHolder.setProperty("propertyValue")
5253
dataHolder.setBooleanField(true)
5354
dataHolder.setBooleanFieldWithGet(false)
55+
5456
}
5557

5658
def env(GraphQLOutputType type) {
57-
newDataFetchingEnvironment().source(dataHolder).fieldType(type).build()
59+
newDataFetchingEnvironment().source(dataHolder).executionContext(Mock(ExecutionContext)).fieldType(type).build()
5860
}
5961

6062
def "get property value"() {

src/test/groovy/graphql/relay/SimpleListConnectionTest.groovy

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

3+
import graphql.execution.ExecutionContext
34
import graphql.schema.DataFetchingEnvironment
45
import spock.lang.Specification
56

@@ -10,7 +11,7 @@ import static graphql.schema.DataFetchingEnvironmentBuilder.newDataFetchingEnvir
1011
class SimpleListConnectionTest extends Specification {
1112

1213
DataFetchingEnvironment afterCursorEnv(String cursor) {
13-
newDataFetchingEnvironment().arguments(["after": cursor]).build()
14+
newDataFetchingEnvironment().executionContext(Mock(ExecutionContext)).arguments(["after": cursor]).build()
1415
}
1516

1617
def createCursor(int offset) {
@@ -71,7 +72,7 @@ class SimpleListConnectionTest extends Specification {
7172
def "can accept a list with nulls"() {
7273
given:
7374
def dataWithNull = ["a", null, "b"]
74-
def env = newDataFetchingEnvironment().build()
75+
def env = newDataFetchingEnvironment().executionContext(Mock(ExecutionContext)).build()
7576

7677
when:
7778
def connection = new SimpleListConnection(dataWithNull).get(env)

src/test/groovy/graphql/schema/PropertyDataFetcherTest.groovy

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package graphql.schema
22

3+
import graphql.execution.ExecutionContext
34
import graphql.schema.somepackage.TestClass
45
import graphql.schema.somepackage.TwoClassesDown
56
import spock.lang.Specification
@@ -11,7 +12,9 @@ import static graphql.schema.DataFetchingEnvironmentBuilder.newDataFetchingEnvir
1112
class PropertyDataFetcherTest extends Specification {
1213

1314
def env(obj) {
14-
newDataFetchingEnvironment().source(obj).build()
15+
newDataFetchingEnvironment()
16+
.executionContext(Mock(ExecutionContext))
17+
.source(obj).build()
1518
}
1619

1720
class SomeObject {

0 commit comments

Comments
 (0)