Skip to content

Commit fc2923e

Browse files
committed
This makes @defer support first class, instead of being an experimental add on
1 parent ec2109d commit fc2923e

4 files changed

Lines changed: 8 additions & 27 deletions

File tree

docs/defer.rst

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,7 @@ usual. There will be the usual ``ExecutionResult`` of initial data and then a
4545
In the query above, the ``post`` data will be send out in the initial result and then the comments and review data will be sent (in query order)
4646
down a ``Publisher`` later.
4747

48-
The first thing you need to put in place is including the ``defer`` directive into your schema. It wont work without it and graphql-java will
49-
give you an error if you don't.
50-
51-
52-
.. code-block:: java
53-
54-
GraphQLSchema buildSchemaWithDirective() {
55-
56-
GraphQLSchema schema = buildSchema();
57-
schema = schema.transform(builder ->
58-
builder.additionalDirective(Directives.DeferDirective)
59-
);
60-
return schema;
61-
}
62-
63-
64-
Then you execute your query as you would any other graphql query. The deferred results ``Publisher`` will be given to you via
48+
You execute your query as you would any other graphql query. The deferred results ``Publisher`` will be given to you via
6549
the ``extensions`` map
6650

6751

src/main/java/graphql/Directives.java

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

33

4-
import graphql.introspection.Introspection;
54
import graphql.schema.GraphQLDirective;
65
import graphql.schema.GraphQLNonNull;
76

@@ -48,11 +47,10 @@ public class Directives {
4847
.validLocations(FIELD_DEFINITION)
4948
.build();
5049

51-
@ExperimentalApi
5250
public static final GraphQLDirective DeferDirective = GraphQLDirective.newDirective()
5351
.name("defer")
54-
.description("This experimental directive allows results to be deferred during execution")
55-
.validLocations(Introspection.DirectiveLocation.FIELD)
52+
.description("This directive allows results to be deferred during execution")
53+
.validLocations(FIELD)
5654
.build();
5755

5856
}

src/main/java/graphql/schema/GraphQLSchema.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import graphql.schema.visibility.GraphqlFieldVisibility;
1010

1111
import java.util.ArrayList;
12-
import java.util.Arrays;
1312
import java.util.Collection;
1413
import java.util.Collections;
1514
import java.util.HashSet;
@@ -23,6 +22,7 @@
2322
import static graphql.Assert.assertTrue;
2423
import static graphql.schema.visibility.DefaultGraphqlFieldVisibility.DEFAULT_FIELD_VISIBILITY;
2524
import static java.lang.String.format;
25+
import static java.util.Arrays.asList;
2626

2727
/**
2828
* The schema represents the combined type system of the graphql engine. This is how the engine knows
@@ -69,7 +69,9 @@ public GraphQLSchema(GraphQLObjectType queryType, GraphQLObjectType mutationType
6969
this.subscriptionType = subscriptionType;
7070
this.fieldVisibility = fieldVisibility;
7171
this.additionalTypes = additionalTypes;
72-
this.directives = new LinkedHashSet<>(Arrays.asList(Directives.IncludeDirective, Directives.SkipDirective));
72+
this.directives = new LinkedHashSet<>(
73+
asList(Directives.IncludeDirective, Directives.SkipDirective, Directives.DeferDirective)
74+
);
7375
this.directives.addAll(directives);
7476
this.typeMap = schemaUtil.allTypes(this, additionalTypes);
7577
this.byInterface = schemaUtil.groupImplementations(this);
@@ -242,6 +244,7 @@ public Builder additionalTypes(Set<GraphQLType> additionalTypes) {
242244
this.additionalTypes.addAll(additionalTypes);
243245
return this;
244246
}
247+
245248
public Builder additionalType(GraphQLType additionalType) {
246249
this.additionalTypes.add(additionalType);
247250
return this;

src/test/groovy/graphql/execution/defer/DeferSupportIntegrationTest.groovy

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package graphql.execution.defer
22

3-
import graphql.Directives
43
import graphql.ExecutionInput
54
import graphql.ExecutionResult
65
import graphql.GraphQL
@@ -127,9 +126,6 @@ class DeferSupportIntegrationTest extends Specification {
127126
.type(newTypeWiring("Review").dataFetcher("comments", commentsFetcher))
128127
.build()
129128
def schema = TestUtil.schema(schemaSpec, runtimeWiring)
130-
schema = schema.transform({ builder ->
131-
builder.additionalDirective(Directives.DeferDirective)
132-
})
133129

134130
graphQL = GraphQL.newGraphQL(schema).build()
135131
}

0 commit comments

Comments
 (0)