Skip to content

Commit 11d3f8e

Browse files
committed
Make AST type reference resolution optional
1 parent 7853616 commit 11d3f8e

1 file changed

Lines changed: 33 additions & 5 deletions

File tree

lib/src/main/java/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactory.kt

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package graphql.nadel.definition.coordinates
22

33
import graphql.Directives
4+
import graphql.language.Definition
45
import graphql.language.Document
56
import graphql.language.NamedNode
7+
import graphql.language.SDLNamedDefinition
68
import graphql.nadel.engine.util.AnySDLDefinition
9+
import graphql.nadel.engine.util.AnySDLNamedDefinition
710
import graphql.nadel.engine.util.unwrapAll
811
import graphql.nadel.schema.NadelSchemaDefinitionTraverser
912
import graphql.nadel.schema.NadelSchemaDefinitionTraverserElement
@@ -62,22 +65,33 @@ class NadelSchemaMemberCoordinatesFactory {
6265

6366
fun create(
6467
schema: Document,
68+
resolveTypeReferences: Boolean,
6569
): Set<NadelSchemaMemberCoordinates> {
66-
val definitions = schema.definitions
70+
return create(
71+
schema = schema.definitions,
72+
resolveTypeReferences = resolveTypeReferences,
73+
)
74+
}
75+
76+
fun create(
77+
schema: Iterable<Definition<*>>,
78+
resolveTypeReferences: Boolean,
79+
): Set<NadelSchemaMemberCoordinates> {
80+
val definitions = schema
6781
.asSequence()
68-
.filterIsInstance<AnySDLDefinition>()
82+
.filterIsInstance<AnySDLNamedDefinition>()
6983

7084
// There can be multiple definitions per name, but in this scenario we don't care
7185
val definitionByName = definitions
7286
.associateBy {
73-
(it as NamedNode<*>).name
87+
it.name
7488
}
7589

7690
val roots = definitions
7791
.mapNotNull(NadelSchemaDefinitionTraverserElement::from)
7892
.toList()
7993

80-
return createImpl(roots, definitionByName)
94+
return createImpl(roots, definitionByName, resolveTypeReferences)
8195
}
8296

8397
private fun createImpl(
@@ -97,13 +111,18 @@ class NadelSchemaMemberCoordinatesFactory {
97111
private fun createImpl(
98112
roots: List<NadelSchemaDefinitionTraverserElement>,
99113
definitionByName: Map<String, AnySDLDefinition>,
114+
resolveTypeReferences: Boolean,
100115
): Set<NadelSchemaMemberCoordinates> {
101116
val coordinates = mutableSetOf<NadelSchemaMemberCoordinates>()
102117

103118
NadelSchemaDefinitionTraverser()
104119
.traverse(
105120
roots,
106-
NadelSchemaDefinitionCoordinateCollectorTraverserVisitor(coordinates, definitionByName),
121+
NadelSchemaDefinitionCoordinateCollectorTraverserVisitor(
122+
coordinates,
123+
definitionByName,
124+
resolveTypeReferences,
125+
),
107126
)
108127

109128
return coordinates
@@ -225,6 +244,7 @@ internal class NadelSchemaCoordinateCollectorTraverserVisitor(
225244
internal class NadelSchemaDefinitionCoordinateCollectorTraverserVisitor(
226245
private val coordinates: MutableCollection<NadelSchemaMemberCoordinates>,
227246
private val definitionByName: Map<String, AnySDLDefinition>,
247+
private val resolveTypeReferences: Boolean,
228248
) : NadelSchemaDefinitionTraverserVisitor {
229249
override fun visitGraphQLAppliedDirective(element: NadelSchemaDefinitionTraverserElement.AppliedDirective): Boolean {
230250
coordinates.add(element.coordinates())
@@ -302,6 +322,14 @@ internal class NadelSchemaDefinitionCoordinateCollectorTraverserVisitor(
302322
}
303323

304324
override fun visitTypeReference(element: NadelSchemaDefinitionTraverserElement.TypeReference): Boolean {
325+
return if (resolveTypeReferences) {
326+
resolveTypeReference(element)
327+
} else {
328+
false
329+
}
330+
}
331+
332+
private fun resolveTypeReference(element: NadelSchemaDefinitionTraverserElement.TypeReference): Boolean {
305333
// Resolve definition then traverse
306334
val typeName = element.node.unwrapAll().name
307335

0 commit comments

Comments
 (0)