Skip to content

Commit f515db1

Browse files
committed
Refactor and fix build
1 parent 1f0170a commit f515db1

12 files changed

Lines changed: 266 additions & 273 deletions

lib/src/main/java/graphql/nadel/engine/transform/NadelDeepRenameTransform.kt

Lines changed: 49 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package graphql.nadel.engine.transform
22

33
import graphql.nadel.engine.NadelOperationExecutionContext
44
import graphql.nadel.engine.blueprint.NadelDeepRenameFieldInstruction
5-
import graphql.nadel.engine.transform.NadelDeepRenameTransform.TransformFieldContext
6-
import graphql.nadel.engine.transform.NadelDeepRenameTransform.TransformOperationContext
75
import graphql.nadel.engine.transform.artificial.NadelAliasHelper
86
import graphql.nadel.engine.transform.query.NFUtil
97
import graphql.nadel.engine.transform.query.NadelQueryPath
@@ -18,6 +16,44 @@ import graphql.nadel.engine.util.toBuilder
1816
import graphql.normalized.ExecutableNormalizedField
1917
import graphql.schema.FieldCoordinates
2018

19+
internal data class NadelDeepRenameTransformOperationContext(
20+
override val parentContext: NadelOperationExecutionContext,
21+
) : NadelTransformOperationContext()
22+
23+
internal data class NadelDeepRenameTransformFieldContext(
24+
override val parentContext: NadelDeepRenameTransformOperationContext,
25+
override val overallField: ExecutableNormalizedField,
26+
/**
27+
* The instructions for the a [ExecutableNormalizedField].
28+
*
29+
* Note that we can have multiple transform instructions for one [ExecutableNormalizedField]
30+
* due to the multiple [ExecutableNormalizedField.objectTypeNames] e.g.
31+
*
32+
* ```graphql
33+
* type Query {
34+
* pets: [Pet]
35+
* }
36+
*
37+
* interface Pet {
38+
* name: String
39+
* }
40+
*
41+
* type Dog implements Pet {
42+
* name: String @renamed(from: ["collar", "name"])
43+
* }
44+
*
45+
* type Cat implements Pet {
46+
* name: String @renamed(from: ["tag", "name"])
47+
* }
48+
* ```
49+
*/
50+
val instructionsByObjectTypeNames: Map<String, NadelDeepRenameFieldInstruction>,
51+
/**
52+
* See [NadelAliasHelper]
53+
*/
54+
val aliasHelper: NadelAliasHelper,
55+
) : NadelTransformFieldContext<NadelDeepRenameTransformOperationContext>()
56+
2157
@Deprecated("Should be changed to a value class")
2258
internal typealias GraphQLObjectTypeName = String
2359

@@ -36,49 +72,11 @@ internal typealias GraphQLObjectTypeName = String
3672
* }
3773
* ```
3874
*/
39-
internal class NadelDeepRenameTransform : NadelTransform<TransformOperationContext, TransformFieldContext> {
40-
data class TransformOperationContext(
41-
override val parentContext: NadelOperationExecutionContext,
42-
) : NadelTransformOperationContext()
43-
44-
data class TransformFieldContext(
45-
override val parentContext: TransformOperationContext,
46-
override val overallField: ExecutableNormalizedField,
47-
/**
48-
* The instructions for the a [ExecutableNormalizedField].
49-
*
50-
* Note that we can have multiple transform instructions for one [ExecutableNormalizedField]
51-
* due to the multiple [ExecutableNormalizedField.objectTypeNames] e.g.
52-
*
53-
* ```graphql
54-
* type Query {
55-
* pets: [Pet]
56-
* }
57-
*
58-
* interface Pet {
59-
* name: String
60-
* }
61-
*
62-
* type Dog implements Pet {
63-
* name: String @renamed(from: ["collar", "name"])
64-
* }
65-
*
66-
* type Cat implements Pet {
67-
* name: String @renamed(from: ["tag", "name"])
68-
* }
69-
* ```
70-
*/
71-
val instructionsByObjectTypeNames: Map<String, NadelDeepRenameFieldInstruction>,
72-
/**
73-
* See [NadelAliasHelper]
74-
*/
75-
val aliasHelper: NadelAliasHelper,
76-
) : NadelTransformFieldContext<TransformOperationContext>()
77-
75+
internal class NadelDeepRenameTransform : NadelTransform<NadelDeepRenameTransformOperationContext, NadelDeepRenameTransformFieldContext> {
7876
override suspend fun getTransformOperationContext(
7977
operationExecutionContext: NadelOperationExecutionContext,
80-
): TransformOperationContext {
81-
return TransformOperationContext(operationExecutionContext)
78+
): NadelDeepRenameTransformOperationContext {
79+
return NadelDeepRenameTransformOperationContext(operationExecutionContext)
8280
}
8381

8482
/**
@@ -87,16 +85,16 @@ internal class NadelDeepRenameTransform : NadelTransform<TransformOperationConte
8785
* Creates a state with the deep rename instructions and the transform alias.
8886
*/
8987
override suspend fun getTransformFieldContext(
90-
transformContext: TransformOperationContext,
88+
transformContext: NadelDeepRenameTransformOperationContext,
9189
overallField: ExecutableNormalizedField,
92-
): TransformFieldContext? {
90+
): NadelDeepRenameTransformFieldContext? {
9391
val deepRenameInstructions = transformContext.executionBlueprint
9492
.getTypeNameToInstructionMap<NadelDeepRenameFieldInstruction>(overallField)
9593
if (deepRenameInstructions.isEmpty()) {
9694
return null
9795
}
9896

99-
return TransformFieldContext(
97+
return NadelDeepRenameTransformFieldContext(
10098
transformContext,
10199
overallField,
102100
deepRenameInstructions,
@@ -155,7 +153,7 @@ internal class NadelDeepRenameTransform : NadelTransform<TransformOperationConte
155153
* ```
156154
*/
157155
override suspend fun transformField(
158-
transformContext: TransformFieldContext,
156+
transformContext: NadelDeepRenameTransformFieldContext,
159157
transformer: NadelQueryTransformer,
160158
field: ExecutableNormalizedField,
161159
): NadelTransformFieldResult {
@@ -191,7 +189,7 @@ internal class NadelDeepRenameTransform : NadelTransform<TransformOperationConte
191189
}
192190

193191
/**
194-
* Read [TransformFieldContext.instructionsByObjectTypeNames]
192+
* Read [NadelDeepRenameTransformFieldContext.instructionsByObjectTypeNames]
195193
*
196194
* In the case that there are multiple [FieldCoordinates] for a single [ExecutableNormalizedField]
197195
* we need to know which type we are dealing with, so we use this to add a `__typename`
@@ -200,7 +198,7 @@ internal class NadelDeepRenameTransform : NadelTransform<TransformOperationConte
200198
* This detail is omitted from most examples in this file for simplicity.
201199
*/
202200
private fun makeTypeNameField(
203-
transformContext: TransformFieldContext,
201+
transformContext: NadelDeepRenameTransformFieldContext,
204202
field: ExecutableNormalizedField,
205203
): ExecutableNormalizedField? {
206204
val typeNamesWithInstructions = transformContext.instructionsByObjectTypeNames.keys
@@ -234,7 +232,7 @@ internal class NadelDeepRenameTransform : NadelTransform<TransformOperationConte
234232
* ```
235233
*/
236234
private suspend fun makeDeepField(
237-
transformContext: TransformFieldContext,
235+
transformContext: NadelDeepRenameTransformFieldContext,
238236
transformer: NadelQueryTransformer,
239237
field: ExecutableNormalizedField,
240238
overallObjectTypeName: String,
@@ -286,7 +284,7 @@ internal class NadelDeepRenameTransform : NadelTransform<TransformOperationConte
286284
* ```
287285
*/
288286
override suspend fun transformResult(
289-
transformContext: TransformFieldContext,
287+
transformContext: NadelDeepRenameTransformFieldContext,
290288
underlyingParentField: ExecutableNormalizedField?,
291289
resultNodes: JsonNodes,
292290
): List<NadelResultInstruction> {

lib/src/main/java/graphql/nadel/engine/transform/NadelRenameArgumentInputTypesTransform.kt

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package graphql.nadel.engine.transform
22

33
import graphql.nadel.engine.NadelOperationExecutionContext
4-
import graphql.nadel.engine.transform.NadelRenameArgumentInputTypesTransform.TransformFieldContext
5-
import graphql.nadel.engine.transform.NadelRenameArgumentInputTypesTransform.TransformOperationContext
64
import graphql.nadel.engine.transform.query.NadelQueryTransformer
75
import graphql.nadel.engine.transform.result.NadelResultInstruction
86
import graphql.nadel.engine.transform.result.json.JsonNodes
@@ -11,6 +9,15 @@ import graphql.nadel.engine.util.withNewUnwrappedTypeName
119
import graphql.normalized.ExecutableNormalizedField
1210
import graphql.normalized.NormalizedInputValue
1311

12+
data class NadelRenameArgumentInputTypesTransformOperationContext(
13+
override val parentContext: NadelOperationExecutionContext,
14+
) : NadelTransformOperationContext()
15+
16+
data class NadelRenameArgumentInputTypesTransformFieldContext(
17+
override val parentContext: NadelRenameArgumentInputTypesTransformOperationContext,
18+
override val overallField: ExecutableNormalizedField,
19+
) : NadelTransformFieldContext<NadelRenameArgumentInputTypesTransformOperationContext>()
20+
1421
/**
1522
* This will rename a fields input arguments types. This is especially important
1623
* when we use _$variable_ printing syntax and the printed document needs
@@ -21,39 +28,32 @@ import graphql.normalized.NormalizedInputValue
2128
* query x($var : UnderlyingTypeName!) { ... }
2229
* ```
2330
*/
24-
internal class NadelRenameArgumentInputTypesTransform :
25-
NadelTransform<TransformOperationContext, TransformFieldContext> {
26-
data class TransformOperationContext(
27-
override val parentContext: NadelOperationExecutionContext,
28-
) : NadelTransformOperationContext()
29-
30-
data class TransformFieldContext(
31-
override val parentContext: TransformOperationContext,
32-
override val overallField: ExecutableNormalizedField,
33-
) : NadelTransformFieldContext<TransformOperationContext>()
34-
31+
internal class NadelRenameArgumentInputTypesTransform : NadelTransform<
32+
NadelRenameArgumentInputTypesTransformOperationContext,
33+
NadelRenameArgumentInputTypesTransformFieldContext
34+
> {
3535
override suspend fun getTransformOperationContext(
3636
operationExecutionContext: NadelOperationExecutionContext,
37-
): TransformOperationContext {
38-
return TransformOperationContext(operationExecutionContext)
37+
): NadelRenameArgumentInputTypesTransformOperationContext {
38+
return NadelRenameArgumentInputTypesTransformOperationContext(operationExecutionContext)
3939
}
4040

4141
override suspend fun getTransformFieldContext(
42-
transformContext: TransformOperationContext,
42+
transformContext: NadelRenameArgumentInputTypesTransformOperationContext,
4343
overallField: ExecutableNormalizedField,
44-
): TransformFieldContext? {
44+
): NadelRenameArgumentInputTypesTransformFieldContext? {
4545
// Transform if there's any arguments at all
4646
// todo: this won't account for cases where a transform before this injected new arguments…
4747
// But that's not a big deal right now anyway…
4848
return if (overallField.normalizedArguments.isNotEmpty()) {
49-
TransformFieldContext(transformContext, overallField)
49+
NadelRenameArgumentInputTypesTransformFieldContext(transformContext, overallField)
5050
} else {
5151
null
5252
}
5353
}
5454

5555
override suspend fun transformField(
56-
transformContext: TransformFieldContext,
56+
transformContext: NadelRenameArgumentInputTypesTransformFieldContext,
5757
transformer: NadelQueryTransformer,
5858
field: ExecutableNormalizedField,
5959
): NadelTransformFieldResult {
@@ -66,15 +66,15 @@ internal class NadelRenameArgumentInputTypesTransform :
6666
}
6767

6868
override suspend fun transformResult(
69-
transformContext: TransformFieldContext,
69+
transformContext: NadelRenameArgumentInputTypesTransformFieldContext,
7070
underlyingParentField: ExecutableNormalizedField?,
7171
resultNodes: JsonNodes,
7272
): List<NadelResultInstruction> {
7373
return emptyList()
7474
}
7575

7676
private fun getRenamedArguments(
77-
transformContext: TransformFieldContext,
77+
transformContext: NadelRenameArgumentInputTypesTransformFieldContext,
7878
field: ExecutableNormalizedField,
7979
): Map<String, NormalizedInputValue> {
8080
return field.normalizedArguments

lib/src/main/java/graphql/nadel/engine/transform/NadelRenameTransform.kt

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package graphql.nadel.engine.transform
22

33
import graphql.nadel.engine.NadelOperationExecutionContext
44
import graphql.nadel.engine.blueprint.NadelRenameFieldInstruction
5-
import graphql.nadel.engine.transform.NadelRenameTransform.TransformFieldContext
6-
import graphql.nadel.engine.transform.NadelRenameTransform.TransformOperationContext
75
import graphql.nadel.engine.transform.artificial.NadelAliasHelper
86
import graphql.nadel.engine.transform.query.NFUtil.createField
97
import graphql.nadel.engine.transform.query.NadelQueryPath
@@ -23,29 +21,32 @@ import kotlinx.coroutines.flow.filter
2321
import kotlinx.coroutines.flow.map
2422
import kotlinx.coroutines.flow.toList
2523

26-
internal class NadelRenameTransform : NadelTransform<TransformOperationContext, TransformFieldContext> {
27-
internal data class TransformOperationContext(
28-
override val parentContext: NadelOperationExecutionContext,
29-
) : NadelTransformOperationContext()
30-
31-
internal data class TransformFieldContext(
32-
override val parentContext: TransformOperationContext,
33-
override val overallField: ExecutableNormalizedField,
34-
val instructionsByObjectTypeNames: Map<String, NadelRenameFieldInstruction>,
35-
val objectTypesWithoutRename: Set<String>,
36-
val aliasHelper: NadelAliasHelper,
37-
) : NadelTransformFieldContext<TransformOperationContext>()
38-
24+
internal data class NadelRenameTransformOperationContext(
25+
override val parentContext: NadelOperationExecutionContext,
26+
) : NadelTransformOperationContext()
27+
28+
internal data class NadelRenameTransformFieldContext(
29+
override val parentContext: NadelRenameTransformOperationContext,
30+
override val overallField: ExecutableNormalizedField,
31+
val instructionsByObjectTypeNames: Map<String, NadelRenameFieldInstruction>,
32+
val objectTypesWithoutRename: Set<String>,
33+
val aliasHelper: NadelAliasHelper,
34+
) : NadelTransformFieldContext<NadelRenameTransformOperationContext>()
35+
36+
internal class NadelRenameTransform : NadelTransform<
37+
NadelRenameTransformOperationContext,
38+
NadelRenameTransformFieldContext
39+
> {
3940
override suspend fun getTransformOperationContext(
4041
operationExecutionContext: NadelOperationExecutionContext,
41-
): TransformOperationContext {
42-
return TransformOperationContext(operationExecutionContext)
42+
): NadelRenameTransformOperationContext {
43+
return NadelRenameTransformOperationContext(operationExecutionContext)
4344
}
4445

4546
override suspend fun getTransformFieldContext(
46-
transformContext: TransformOperationContext,
47+
transformContext: NadelRenameTransformOperationContext,
4748
overallField: ExecutableNormalizedField,
48-
): TransformFieldContext? {
49+
): NadelRenameTransformFieldContext? {
4950
val renameInstructions = transformContext.executionBlueprint
5051
.getTypeNameToInstructionMap<NadelRenameFieldInstruction>(overallField)
5152
if (renameInstructions.isEmpty()) {
@@ -57,7 +58,7 @@ internal class NadelRenameTransform : NadelTransform<TransformOperationContext,
5758
.filterNot { it in renameInstructions }
5859
.toHashSet()
5960

60-
return TransformFieldContext(
61+
return NadelRenameTransformFieldContext(
6162
transformContext,
6263
overallField,
6364
renameInstructions,
@@ -67,7 +68,7 @@ internal class NadelRenameTransform : NadelTransform<TransformOperationContext,
6768
}
6869

6970
override suspend fun transformField(
70-
transformContext: TransformFieldContext,
71+
transformContext: NadelRenameTransformFieldContext,
7172
transformer: NadelQueryTransformer,
7273
field: ExecutableNormalizedField,
7374
): NadelTransformFieldResult {
@@ -90,7 +91,7 @@ internal class NadelRenameTransform : NadelTransform<TransformOperationContext,
9091
}
9192

9293
/**
93-
* Read [TransformFieldContext.instructionsByObjectTypeNames]
94+
* Read [NadelRenameTransformFieldContext.instructionsByObjectTypeNames]
9495
*
9596
* In the case that there are multiple [FieldCoordinates] for a single [ExecutableNormalizedField]
9697
* we need to know which type we are dealing with, so we use this to add a `__typename`
@@ -99,7 +100,7 @@ internal class NadelRenameTransform : NadelTransform<TransformOperationContext,
99100
* This detail is omitted from most examples in this file for simplicity.
100101
*/
101102
private fun makeTypeNameField(
102-
transformContext: TransformFieldContext,
103+
transformContext: NadelRenameTransformFieldContext,
103104
field: ExecutableNormalizedField,
104105
): ExecutableNormalizedField? {
105106
// No need for typename on top level field
@@ -121,7 +122,7 @@ internal class NadelRenameTransform : NadelTransform<TransformOperationContext,
121122
}
122123

123124
private suspend fun makeRenamedFields(
124-
transformContext: TransformFieldContext,
125+
transformContext: NadelRenameTransformFieldContext,
125126
transformer: NadelQueryTransformer,
126127
field: ExecutableNormalizedField,
127128
): List<ExecutableNormalizedField> {
@@ -146,7 +147,7 @@ internal class NadelRenameTransform : NadelTransform<TransformOperationContext,
146147
}
147148

148149
private suspend fun makeRenamedField(
149-
transformContext: TransformFieldContext,
150+
transformContext: NadelRenameTransformFieldContext,
150151
transformer: NadelQueryTransformer,
151152
field: ExecutableNormalizedField,
152153
overallTypeName: String,
@@ -169,7 +170,7 @@ internal class NadelRenameTransform : NadelTransform<TransformOperationContext,
169170
}
170171

171172
override suspend fun transformResult(
172-
transformContext: TransformFieldContext,
173+
transformContext: NadelRenameTransformFieldContext,
173174
underlyingParentField: ExecutableNormalizedField?,
174175
resultNodes: JsonNodes,
175176
): List<NadelResultInstruction> {
@@ -203,7 +204,7 @@ internal class NadelRenameTransform : NadelTransform<TransformOperationContext,
203204
}
204205

205206
private fun getInstructionForNode(
206-
transformContext: TransformFieldContext,
207+
transformContext: NadelRenameTransformFieldContext,
207208
parentNode: JsonNode,
208209
): NadelRenameFieldInstruction? {
209210
// There can't be multiple instructions for a top level field

0 commit comments

Comments
 (0)