Repository navigation
Expand file tree
/
Copy pathExecutionStrategyParameters.java
More file actions
290 lines (251 loc) · 9.93 KB
/
Copy pathExecutionStrategyParameters.java
File metadata and controls
290 lines (251 loc) · 9.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
package graphql.execution;
import graphql.Internal;
import graphql.PublicApi;
import graphql.execution.incremental.AlternativeCallContext;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.NullUnmarked;
import org.jspecify.annotations.Nullable;
import java.util.function.Consumer;
import static graphql.Assert.assertNotNull;
/**
* The parameters that are passed to execution strategies
*/
@PublicApi
@NullMarked
public class ExecutionStrategyParameters {
private final ExecutionStepInfo executionStepInfo;
private final @Nullable Object source;
private final @Nullable Object localContext;
private final MergedSelectionSet fields;
private final NonNullableFieldValidator nonNullableFieldValidator;
private final ResultPath path;
private final @Nullable MergedField currentField;
private final @Nullable ExecutionStrategyParameters parent;
private final @Nullable AlternativeCallContext alternativeCallContext;
private ExecutionStrategyParameters(ExecutionStepInfo executionStepInfo,
@Nullable Object source,
@Nullable Object localContext,
MergedSelectionSet fields,
NonNullableFieldValidator nonNullableFieldValidator,
ResultPath path,
@Nullable MergedField currentField,
@Nullable ExecutionStrategyParameters parent,
@Nullable AlternativeCallContext alternativeCallContext) {
this.executionStepInfo = assertNotNull(executionStepInfo, "executionStepInfo is null");
this.localContext = localContext;
this.fields = assertNotNull(fields, "fields is null");
this.source = source;
this.nonNullableFieldValidator = assertNotNull(nonNullableFieldValidator, "requires a NonNullValidator");;
this.path = path;
this.currentField = currentField;
this.parent = parent;
this.alternativeCallContext = alternativeCallContext;
}
public ExecutionStepInfo getExecutionStepInfo() {
return executionStepInfo;
}
public @Nullable Object getSource() {
return source;
}
public MergedSelectionSet getFields() {
return fields;
}
public NonNullableFieldValidator getNonNullFieldValidator() {
return nonNullableFieldValidator;
}
public ResultPath getPath() {
return path;
}
public @Nullable Object getLocalContext() {
return localContext;
}
public @Nullable ExecutionStrategyParameters getParent() {
return parent;
}
/**
* Returns the alternative call context if this execution is scoped to an alternative execution path.
* This is used for deferred fragment execution and subscription event execution.
* @return the alternative call context or null if execution is not scoped to an alternative execution path
*/
@Nullable
@Internal
public AlternativeCallContext getAlternativeCallContext() {
return alternativeCallContext;
}
/**
* Returns true if we're in the scope of a deferred call.
*
* @return true if we're in the scope of a deferred call
*/
public boolean isInDeferredContext() {
return alternativeCallContext != null;
}
/**
* This returns the current field in its query representations.
*
* @return the current merged fields
*/
public @Nullable MergedField getField() {
return currentField;
}
@Internal
ExecutionStrategyParameters transform(MergedField currentField,
ResultPath path) {
return new ExecutionStrategyParameters(executionStepInfo,
source,
localContext,
fields,
nonNullableFieldValidator,
path,
currentField,
parent,
alternativeCallContext);
}
@Internal
ExecutionStrategyParameters transform(ExecutionStepInfo executionStepInfo,
MergedSelectionSet fields,
@Nullable Object source) {
return new ExecutionStrategyParameters(executionStepInfo,
source,
localContext,
fields,
nonNullableFieldValidator,
path,
currentField,
parent,
alternativeCallContext);
}
@Internal
ExecutionStrategyParameters transform(ExecutionStepInfo executionStepInfo,
ResultPath path,
@Nullable Object localContext,
@Nullable Object source) {
return new ExecutionStrategyParameters(executionStepInfo,
source,
localContext,
fields,
nonNullableFieldValidator,
path,
currentField,
parent,
alternativeCallContext);
}
@Internal
ExecutionStrategyParameters transform(ExecutionStepInfo executionStepInfo,
@Nullable Object localContext,
@Nullable Object source) {
return new ExecutionStrategyParameters(executionStepInfo,
source,
localContext,
fields,
nonNullableFieldValidator,
path,
currentField,
parent,
alternativeCallContext);
}
@Internal
ExecutionStrategyParameters transform(MergedField currentField,
ResultPath path,
ExecutionStrategyParameters parent) {
return new ExecutionStrategyParameters(executionStepInfo,
source,
localContext,
fields,
nonNullableFieldValidator,
path,
currentField,
parent,
alternativeCallContext);
}
public ExecutionStrategyParameters transform(Consumer<Builder> builderConsumer) {
Builder builder = newParameters(this);
builderConsumer.accept(builder);
return builder.build();
}
@Override
public String toString() {
return String.format("ExecutionStrategyParameters { path=%s, executionStepInfo=%s, source=%s, fields=%s }",
path, executionStepInfo, source, fields);
}
public static Builder newParameters() {
return new Builder();
}
public static Builder newParameters(ExecutionStrategyParameters oldParameters) {
return new Builder(oldParameters);
}
@NullUnmarked
public static class Builder {
ExecutionStepInfo executionStepInfo;
Object source;
Object localContext;
MergedSelectionSet fields;
NonNullableFieldValidator nonNullableFieldValidator;
ResultPath path = ResultPath.rootPath();
MergedField currentField;
ExecutionStrategyParameters parent;
AlternativeCallContext alternativeCallContext;
/**
* @see ExecutionStrategyParameters#newParameters()
*/
private Builder() {
}
/**
* @see ExecutionStrategyParameters#newParameters(ExecutionStrategyParameters)
*/
private Builder(ExecutionStrategyParameters oldParameters) {
this.executionStepInfo = oldParameters.executionStepInfo;
this.source = oldParameters.source;
this.localContext = oldParameters.localContext;
this.fields = oldParameters.fields;
this.nonNullableFieldValidator = oldParameters.nonNullableFieldValidator;
this.currentField = oldParameters.currentField;
this.alternativeCallContext = oldParameters.alternativeCallContext;
this.path = oldParameters.path;
this.parent = oldParameters.parent;
}
public Builder executionStepInfo(ExecutionStepInfo executionStepInfo) {
this.executionStepInfo = executionStepInfo;
return this;
}
public Builder executionStepInfo(ExecutionStepInfo.Builder executionStepInfoBuilder) {
this.executionStepInfo = executionStepInfoBuilder.build();
return this;
}
public Builder fields(MergedSelectionSet fields) {
this.fields = fields;
return this;
}
public Builder field(MergedField currentField) {
this.currentField = currentField;
return this;
}
public Builder source(Object source) {
this.source = source;
return this;
}
public Builder localContext(Object localContext) {
this.localContext = localContext;
return this;
}
public Builder nonNullFieldValidator(NonNullableFieldValidator nonNullableFieldValidator) {
this.nonNullableFieldValidator = assertNotNull(nonNullableFieldValidator, "requires a NonNullValidator");
return this;
}
public Builder path(ResultPath path) {
this.path = path;
return this;
}
public Builder parent(ExecutionStrategyParameters parent) {
this.parent = parent;
return this;
}
public Builder alternativeCallContext(AlternativeCallContext alternativeCallContext) {
this.alternativeCallContext = alternativeCallContext;
return this;
}
public ExecutionStrategyParameters build() {
return new ExecutionStrategyParameters(executionStepInfo, source, localContext, fields, nonNullableFieldValidator, path, currentField, parent, alternativeCallContext);
}
}
}