Skip to content

Commit f36ea22

Browse files
committed
Use interface for parsed normalized operation
1 parent d0b2634 commit f36ea22

File tree

11 files changed

+39
-21
lines changed

11 files changed

+39
-21
lines changed

src/main/java/graphql/execution/ExecutionContext.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import graphql.execution.incremental.IncrementalCallState;
1515
import graphql.execution.instrumentation.Instrumentation;
1616
import graphql.execution.instrumentation.InstrumentationState;
17-
import graphql.execution.instrumentation.parameters.InstrumentationParseExecutableNormalizedOperation;
17+
import graphql.execution.instrumentation.parameters.InstrumentationParsedNormalizedOperation;
1818
import graphql.language.Document;
1919
import graphql.language.FragmentDefinition;
2020
import graphql.language.OperationDefinition;
@@ -370,7 +370,8 @@ public ResultNodesInfo getResultNodesInfo() {
370370
}
371371

372372
private ExecutableNormalizedOperation createExecutableNormalizedOperation() {
373-
var instrument = instrumentation.beginParseExecutableNormalizedOperation(new InstrumentationParseExecutableNormalizedOperation(executionInput, graphQLSchema), instrumentationState);
373+
var parameters = new InstrumentationParsedNormalizedOperation(executionInput, graphQLSchema);
374+
var instrument = instrumentation.beginParsedNormalizedOperation(parameters, instrumentationState);
374375
var result = ExecutableNormalizedOperationFactory.createExecutableNormalizedOperation(graphQLSchema, operationDefinition, fragmentsByName, coercedVariables);
375376
if (instrument != null) {
376377
instrument.onCompleted(result, null);

src/main/java/graphql/execution/instrumentation/ChainedInstrumentation.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import graphql.execution.FieldValueInfo;
1111
import graphql.execution.instrumentation.parameters.*;
1212
import graphql.language.Document;
13-
import graphql.normalized.ExecutableNormalizedOperation;
13+
import graphql.normalized.ParsedNormalizedOperation;
1414
import graphql.schema.DataFetcher;
1515
import graphql.schema.GraphQLSchema;
1616
import graphql.validation.ValidationError;
@@ -121,9 +121,9 @@ public InstrumentationContext<Document> beginParse(InstrumentationExecutionParam
121121
}
122122

123123
@Override
124-
public InstrumentationContext<ExecutableNormalizedOperation> beginParseExecutableNormalizedOperation(InstrumentationParseExecutableNormalizedOperation parameters, InstrumentationState state) {
124+
public InstrumentationContext<ParsedNormalizedOperation> beginParsedNormalizedOperation(InstrumentationParsedNormalizedOperation parameters, InstrumentationState state) {
125125
return chainedCtx(state, (instrumentation, specificState) ->
126-
instrumentation.beginParseExecutableNormalizedOperation(parameters, specificState));
126+
instrumentation.beginParsedNormalizedOperation(parameters, specificState));
127127
}
128128

129129

src/main/java/graphql/execution/instrumentation/Instrumentation.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import graphql.execution.instrumentation.parameters.*;
99
import graphql.language.Document;
1010
import graphql.normalized.ExecutableNormalizedOperation;
11+
import graphql.normalized.ParsedNormalizedOperation;
1112
import graphql.schema.DataFetcher;
1213
import graphql.schema.GraphQLSchema;
1314
import graphql.validation.ValidationError;
@@ -115,14 +116,14 @@ default InstrumentationContext<ExecutionResult> beginExecuteOperation(Instrument
115116
}
116117

117118
/**
118-
* This is called just before the parsing of the executable normalized operation is started.
119+
* This is called just before the parsing of the normalized operation is started.
119120
*
120121
* @param parameters the parameters to this step
121122
* @param state the state created during the call to {@link #createState(InstrumentationCreateStateParameters)}
122123
* @return a nullable {@link InstrumentationContext} object that will be called back when the step ends (assuming it's not null)
123124
*/
124125
@Nullable
125-
default InstrumentationContext<ExecutableNormalizedOperation> beginParseExecutableNormalizedOperation(InstrumentationParseExecutableNormalizedOperation parameters, InstrumentationState state) {
126+
default InstrumentationContext<ParsedNormalizedOperation> beginParsedNormalizedOperation(InstrumentationParsedNormalizedOperation parameters, InstrumentationState state) {
126127
return noOp();
127128
}
128129

src/main/java/graphql/execution/instrumentation/NoContextChainedInstrumentation.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import graphql.execution.instrumentation.parameters.*;
66
import graphql.language.Document;
77
import graphql.normalized.ExecutableNormalizedOperation;
8+
import graphql.normalized.ParsedNormalizedOperation;
89
import graphql.validation.ValidationError;
910
import org.jspecify.annotations.Nullable;
1011

@@ -79,8 +80,8 @@ public ExecutionStrategyInstrumentationContext beginExecutionStrategy(Instrument
7980
}
8081

8182
@Override
82-
public @Nullable InstrumentationContext<ExecutableNormalizedOperation> beginParseExecutableNormalizedOperation(InstrumentationParseExecutableNormalizedOperation parameters, InstrumentationState state) {
83-
return runAll(state, (instrumentation, specificState) -> instrumentation.beginParseExecutableNormalizedOperation(parameters, specificState));
83+
public @Nullable InstrumentationContext<ParsedNormalizedOperation> beginParsedNormalizedOperation(InstrumentationParsedNormalizedOperation parameters, InstrumentationState state) {
84+
return runAll(state, (instrumentation, specificState) -> instrumentation.beginParsedNormalizedOperation(parameters, specificState));
8485
}
8586

8687
@Override

src/main/java/graphql/execution/instrumentation/parameters/InstrumentationParseExecutableNormalizedOperation.java renamed to src/main/java/graphql/execution/instrumentation/parameters/InstrumentationParsedNormalizedOperation.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@
33
import graphql.ExecutionInput;
44
import graphql.PublicApi;
55
import graphql.execution.instrumentation.Instrumentation;
6-
import graphql.execution.instrumentation.InstrumentationState;
76
import graphql.schema.GraphQLSchema;
87

98
/**
109
* Parameters sent to {@link Instrumentation} methods
1110
*/
1211
@SuppressWarnings("TypeParameterUnusedInFormals")
1312
@PublicApi
14-
public class InstrumentationParseExecutableNormalizedOperation extends InstrumentationExecutionParameters {
15-
public InstrumentationParseExecutableNormalizedOperation(ExecutionInput executionInput, GraphQLSchema schema) {
13+
public class InstrumentationParsedNormalizedOperation extends InstrumentationExecutionParameters {
14+
public InstrumentationParsedNormalizedOperation(ExecutionInput executionInput, GraphQLSchema schema) {
1615
super(executionInput, schema);
1716
}
1817
}

src/main/java/graphql/normalized/ExecutableNormalizedOperation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
* An operation consists of a list of {@link ExecutableNormalizedField}s in a parent child hierarchy
2424
*/
2525
@PublicApi
26-
public class ExecutableNormalizedOperation {
26+
public class ExecutableNormalizedOperation implements ParsedNormalizedOperation {
2727
private final OperationDefinition.Operation operation;
2828
private final String operationName;
2929
private final List<ExecutableNormalizedField> topLevelFields;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package graphql.normalized;
2+
3+
import graphql.PublicApi;
4+
5+
/**
6+
* A {@link ParsedNormalizedOperation} represents a parsed and normalized operation in GraphQL.
7+
* It is used to handle the execution of GraphQL operations according to the specification,
8+
* including merging duplicate fields and handling type detection for fields that may correspond
9+
* to multiple object types.
10+
*/
11+
@PublicApi
12+
public interface ParsedNormalizedOperation {
13+
}

src/main/java/graphql/normalized/nf/NormalizedOperation.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import graphql.execution.directives.QueryDirectives;
99
import graphql.language.Field;
1010
import graphql.language.OperationDefinition;
11+
import graphql.normalized.ParsedNormalizedOperation;
1112
import graphql.schema.FieldCoordinates;
1213
import graphql.schema.GraphQLFieldsContainer;
1314

@@ -23,7 +24,7 @@
2324
* An operation consists of a list of {@link NormalizedField}s in a parent child hierarchy
2425
*/
2526
@ExperimentalApi
26-
public class NormalizedOperation {
27+
public class NormalizedOperation implements ParsedNormalizedOperation {
2728
private final OperationDefinition.Operation operation;
2829
private final String operationName;
2930
private final List<NormalizedField> rootFields;

src/test/groovy/graphql/execution/instrumentation/InstrumentationTest.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,8 @@ class InstrumentationTest extends Specification {
312312
"onDispatched:fetch-hero",
313313
"end:fetch-hero",
314314
"start:complete-hero",
315-
"start:parse-executable-normalized-operation",
316-
"end:parse-executable-normalized-operation",
315+
"start:parsed-normalized-operation",
316+
"end:parsed-normalized-operation",
317317
"start:execute-object",
318318
"start:field-id",
319319
"start:fetch-id",

src/test/groovy/graphql/execution/instrumentation/ModernTestingInstrumentation.groovy

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ import graphql.execution.instrumentation.parameters.InstrumentationExecutionStra
1010
import graphql.execution.instrumentation.parameters.InstrumentationFieldCompleteParameters
1111
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters
1212
import graphql.execution.instrumentation.parameters.InstrumentationFieldParameters
13-
import graphql.execution.instrumentation.parameters.InstrumentationParseExecutableNormalizedOperation
13+
import graphql.execution.instrumentation.parameters.InstrumentationParsedNormalizedOperation
1414
import graphql.execution.instrumentation.parameters.InstrumentationValidationParameters
1515
import graphql.language.Document
1616
import graphql.normalized.ExecutableNormalizedOperation
17+
import graphql.normalized.ParsedNormalizedOperation
1718
import graphql.schema.DataFetcher
1819
import graphql.schema.DataFetchingEnvironment
1920
import graphql.schema.GraphQLSchema
@@ -76,9 +77,9 @@ class ModernTestingInstrumentation implements Instrumentation {
7677
}
7778

7879
@Override
79-
InstrumentationContext<ExecutableNormalizedOperation> beginParseExecutableNormalizedOperation(InstrumentationParseExecutableNormalizedOperation parameters, InstrumentationState state) {
80+
InstrumentationContext<ParsedNormalizedOperation> beginParsedNormalizedOperation(InstrumentationParsedNormalizedOperation parameters, InstrumentationState state) {
8081
assert state == instrumentationState
81-
return new TestingInstrumentContext("parse-executable-normalized-operation", executionList, throwableList, useOnDispatch)
82+
return new TestingInstrumentContext("parsed-normalized-operation", executionList, throwableList, useOnDispatch)
8283
}
8384

8485
@Override

0 commit comments

Comments
 (0)