From 11d3f8e35fc3eea2539aa2f4a35863bd79c13591 Mon Sep 17 00:00:00 2001 From: Franklin Wang Date: Wed, 13 May 2026 17:02:27 +1000 Subject: [PATCH 1/2] Make AST type reference resolution optional --- .../NadelSchemaMemberCoordinatesFactory.kt | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/lib/src/main/java/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactory.kt b/lib/src/main/java/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactory.kt index afcb1b292..2f97cbead 100644 --- a/lib/src/main/java/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactory.kt +++ b/lib/src/main/java/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactory.kt @@ -1,9 +1,12 @@ package graphql.nadel.definition.coordinates import graphql.Directives +import graphql.language.Definition import graphql.language.Document import graphql.language.NamedNode +import graphql.language.SDLNamedDefinition import graphql.nadel.engine.util.AnySDLDefinition +import graphql.nadel.engine.util.AnySDLNamedDefinition import graphql.nadel.engine.util.unwrapAll import graphql.nadel.schema.NadelSchemaDefinitionTraverser import graphql.nadel.schema.NadelSchemaDefinitionTraverserElement @@ -62,22 +65,33 @@ class NadelSchemaMemberCoordinatesFactory { fun create( schema: Document, + resolveTypeReferences: Boolean, ): Set { - val definitions = schema.definitions + return create( + schema = schema.definitions, + resolveTypeReferences = resolveTypeReferences, + ) + } + + fun create( + schema: Iterable>, + resolveTypeReferences: Boolean, + ): Set { + val definitions = schema .asSequence() - .filterIsInstance() + .filterIsInstance() // There can be multiple definitions per name, but in this scenario we don't care val definitionByName = definitions .associateBy { - (it as NamedNode<*>).name + it.name } val roots = definitions .mapNotNull(NadelSchemaDefinitionTraverserElement::from) .toList() - return createImpl(roots, definitionByName) + return createImpl(roots, definitionByName, resolveTypeReferences) } private fun createImpl( @@ -97,13 +111,18 @@ class NadelSchemaMemberCoordinatesFactory { private fun createImpl( roots: List, definitionByName: Map, + resolveTypeReferences: Boolean, ): Set { val coordinates = mutableSetOf() NadelSchemaDefinitionTraverser() .traverse( roots, - NadelSchemaDefinitionCoordinateCollectorTraverserVisitor(coordinates, definitionByName), + NadelSchemaDefinitionCoordinateCollectorTraverserVisitor( + coordinates, + definitionByName, + resolveTypeReferences, + ), ) return coordinates @@ -225,6 +244,7 @@ internal class NadelSchemaCoordinateCollectorTraverserVisitor( internal class NadelSchemaDefinitionCoordinateCollectorTraverserVisitor( private val coordinates: MutableCollection, private val definitionByName: Map, + private val resolveTypeReferences: Boolean, ) : NadelSchemaDefinitionTraverserVisitor { override fun visitGraphQLAppliedDirective(element: NadelSchemaDefinitionTraverserElement.AppliedDirective): Boolean { coordinates.add(element.coordinates()) @@ -302,6 +322,14 @@ internal class NadelSchemaDefinitionCoordinateCollectorTraverserVisitor( } override fun visitTypeReference(element: NadelSchemaDefinitionTraverserElement.TypeReference): Boolean { + return if (resolveTypeReferences) { + resolveTypeReference(element) + } else { + false + } + } + + private fun resolveTypeReference(element: NadelSchemaDefinitionTraverserElement.TypeReference): Boolean { // Resolve definition then traverse val typeName = element.node.unwrapAll().name From be2d3f0b502c41b65dadcc5e9cf615861b9553eb Mon Sep 17 00:00:00 2001 From: Franklin Wang Date: Thu, 14 May 2026 10:44:21 +1000 Subject: [PATCH 2/2] Fix --- .../coordinates/NadelSchemaMemberCoordinatesFactory.kt | 2 -- .../coordinates/NadelSchemaMemberCoordinatesFactoryTest.kt | 5 ++++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/src/main/java/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactory.kt b/lib/src/main/java/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactory.kt index 2f97cbead..fe34aac48 100644 --- a/lib/src/main/java/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactory.kt +++ b/lib/src/main/java/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactory.kt @@ -3,8 +3,6 @@ package graphql.nadel.definition.coordinates import graphql.Directives import graphql.language.Definition import graphql.language.Document -import graphql.language.NamedNode -import graphql.language.SDLNamedDefinition import graphql.nadel.engine.util.AnySDLDefinition import graphql.nadel.engine.util.AnySDLNamedDefinition import graphql.nadel.engine.util.unwrapAll diff --git a/lib/src/test/kotlin/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactoryTest.kt b/lib/src/test/kotlin/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactoryTest.kt index afea16a97..18d11e4af 100644 --- a/lib/src/test/kotlin/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactoryTest.kt +++ b/lib/src/test/kotlin/graphql/nadel/definition/coordinates/NadelSchemaMemberCoordinatesFactoryTest.kt @@ -30,7 +30,10 @@ abstract class NadelSchemaMemberCoordinatesFactoryTest { class DocumentDefinitionExtractorTest : NadelSchemaMemberCoordinatesFactoryTest() { override fun extractCoordinates(schema: String): Set { - return NadelSchemaMemberCoordinatesFactory().create(Parser().parseDocument(schema)) + return NadelSchemaMemberCoordinatesFactory().create( + Parser().parseDocument(schema), + resolveTypeReferences = true, + ) } @Test