Skip to content

Commit bb8b158

Browse files
authored
Make AST type reference resolution optional (#725)
* Make AST type reference resolution optional * Fix
1 parent 7853616 commit bb8b158

2 files changed

Lines changed: 36 additions & 7 deletions

File tree

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

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

33
import graphql.Directives
4+
import graphql.language.Definition
45
import graphql.language.Document
5-
import graphql.language.NamedNode
66
import graphql.nadel.engine.util.AnySDLDefinition
7+
import graphql.nadel.engine.util.AnySDLNamedDefinition
78
import graphql.nadel.engine.util.unwrapAll
89
import graphql.nadel.schema.NadelSchemaDefinitionTraverser
910
import graphql.nadel.schema.NadelSchemaDefinitionTraverserElement
@@ -62,22 +63,33 @@ class NadelSchemaMemberCoordinatesFactory {
6263

6364
fun create(
6465
schema: Document,
66+
resolveTypeReferences: Boolean,
6567
): Set<NadelSchemaMemberCoordinates> {
66-
val definitions = schema.definitions
68+
return create(
69+
schema = schema.definitions,
70+
resolveTypeReferences = resolveTypeReferences,
71+
)
72+
}
73+
74+
fun create(
75+
schema: Iterable<Definition<*>>,
76+
resolveTypeReferences: Boolean,
77+
): Set<NadelSchemaMemberCoordinates> {
78+
val definitions = schema
6779
.asSequence()
68-
.filterIsInstance<AnySDLDefinition>()
80+
.filterIsInstance<AnySDLNamedDefinition>()
6981

7082
// There can be multiple definitions per name, but in this scenario we don't care
7183
val definitionByName = definitions
7284
.associateBy {
73-
(it as NamedNode<*>).name
85+
it.name
7486
}
7587

7688
val roots = definitions
7789
.mapNotNull(NadelSchemaDefinitionTraverserElement::from)
7890
.toList()
7991

80-
return createImpl(roots, definitionByName)
92+
return createImpl(roots, definitionByName, resolveTypeReferences)
8193
}
8294

8395
private fun createImpl(
@@ -97,13 +109,18 @@ class NadelSchemaMemberCoordinatesFactory {
97109
private fun createImpl(
98110
roots: List<NadelSchemaDefinitionTraverserElement>,
99111
definitionByName: Map<String, AnySDLDefinition>,
112+
resolveTypeReferences: Boolean,
100113
): Set<NadelSchemaMemberCoordinates> {
101114
val coordinates = mutableSetOf<NadelSchemaMemberCoordinates>()
102115

103116
NadelSchemaDefinitionTraverser()
104117
.traverse(
105118
roots,
106-
NadelSchemaDefinitionCoordinateCollectorTraverserVisitor(coordinates, definitionByName),
119+
NadelSchemaDefinitionCoordinateCollectorTraverserVisitor(
120+
coordinates,
121+
definitionByName,
122+
resolveTypeReferences,
123+
),
107124
)
108125

109126
return coordinates
@@ -225,6 +242,7 @@ internal class NadelSchemaCoordinateCollectorTraverserVisitor(
225242
internal class NadelSchemaDefinitionCoordinateCollectorTraverserVisitor(
226243
private val coordinates: MutableCollection<NadelSchemaMemberCoordinates>,
227244
private val definitionByName: Map<String, AnySDLDefinition>,
245+
private val resolveTypeReferences: Boolean,
228246
) : NadelSchemaDefinitionTraverserVisitor {
229247
override fun visitGraphQLAppliedDirective(element: NadelSchemaDefinitionTraverserElement.AppliedDirective): Boolean {
230248
coordinates.add(element.coordinates())
@@ -302,6 +320,14 @@ internal class NadelSchemaDefinitionCoordinateCollectorTraverserVisitor(
302320
}
303321

304322
override fun visitTypeReference(element: NadelSchemaDefinitionTraverserElement.TypeReference): Boolean {
323+
return if (resolveTypeReferences) {
324+
resolveTypeReference(element)
325+
} else {
326+
false
327+
}
328+
}
329+
330+
private fun resolveTypeReference(element: NadelSchemaDefinitionTraverserElement.TypeReference): Boolean {
305331
// Resolve definition then traverse
306332
val typeName = element.node.unwrapAll().name
307333

lib/src/test/kotlin/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactoryTest.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@ abstract class NadelSchemaMemberCoordinatesFactoryTest {
3030

3131
class DocumentDefinitionExtractorTest : NadelSchemaMemberCoordinatesFactoryTest() {
3232
override fun extractCoordinates(schema: String): Set<NadelSchemaMemberCoordinates> {
33-
return NadelSchemaMemberCoordinatesFactory().create(Parser().parseDocument(schema))
33+
return NadelSchemaMemberCoordinatesFactory().create(
34+
Parser().parseDocument(schema),
35+
resolveTypeReferences = true,
36+
)
3437
}
3538

3639
@Test

0 commit comments

Comments
 (0)