@@ -21,6 +21,7 @@ import graphql.language.IntValue
2121import graphql.language.InterfaceTypeDefinition
2222import graphql.language.ListType
2323import graphql.language.Node
24+ import graphql.language.NodeBuilder
2425import graphql.language.NonNullType
2526import graphql.language.NullValue
2627import graphql.language.ObjectField
@@ -36,6 +37,8 @@ import graphql.language.TypeName
3637import graphql.language.UnionTypeDefinition
3738import graphql.language.VariableDefinition
3839import graphql.language.VariableReference
40+ import org.antlr.v4.runtime.CommonTokenStream
41+ import org.antlr.v4.runtime.ParserRuleContext
3942import spock.lang.Specification
4043import spock.lang.Unroll
4144
@@ -772,5 +775,33 @@ triple3 : """edge cases \\""" "" " \\"" \\" edge cases"""
772775 operationDefinition. getComments()[0 ]. content == " Represents the 😕 emoji."
773776 }
774777
778+ def " can override antlr to ast" () {
775779
780+ def query = '''
781+ query {
782+ field
783+ }
784+ '''
785+ when :
786+ Parser parser = new Parser () {
787+ @Override
788+ protected GraphqlAntlrToLanguage getAntlrToLanguage (CommonTokenStream tokens , MultiSourceReader multiSourceReader ) {
789+ // this pattern is used in Nadel - its backdoor but needed
790+ return new GraphqlAntlrToLanguage (tokens,multiSourceReader) {
791+ @Override
792+ protected void addCommonData (NodeBuilder nodeBuilder , ParserRuleContext parserRuleContext ) {
793+ super . addCommonData(nodeBuilder, parserRuleContext)
794+ nodeBuilder. additionalData(" key" , " value" )
795+ }
796+ }
797+ }
798+ }
799+
800+ def document = parser. parseDocument(query)
801+
802+ then :
803+ document. getAdditionalData(). get(" key" ) == " value"
804+ document. children[0 ]. getAdditionalData(). get(" key" ) == " value"
805+
806+ }
776807}
0 commit comments