Skip to content

Commit e28e51c

Browse files
committed
You can now set your own ANTLR converter in the parse - NOT API
1 parent cfd210b commit e28e51c

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

src/main/java/graphql/parser/Parser.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int
7474
ExtendedBailStrategy bailStrategy = new ExtendedBailStrategy(multiSourceReader);
7575
parser.setErrorHandler(bailStrategy);
7676

77-
GraphqlAntlrToLanguage toLanguage = new GraphqlAntlrToLanguage(tokens, multiSourceReader);
77+
GraphqlAntlrToLanguage toLanguage = getAntlrToLanguage(tokens, multiSourceReader);
7878
GraphqlParser.DocumentContext documentContext = parser.document();
7979

8080
Document doc = toLanguage.createDocument(documentContext);
@@ -96,4 +96,7 @@ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int
9696
return doc;
9797
}
9898

99+
protected GraphqlAntlrToLanguage getAntlrToLanguage(CommonTokenStream tokens, MultiSourceReader multiSourceReader) {
100+
return new GraphqlAntlrToLanguage(tokens, multiSourceReader);
101+
}
99102
}

src/test/groovy/graphql/parser/ParserTest.groovy

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import graphql.language.IntValue
2121
import graphql.language.InterfaceTypeDefinition
2222
import graphql.language.ListType
2323
import graphql.language.Node
24+
import graphql.language.NodeBuilder
2425
import graphql.language.NonNullType
2526
import graphql.language.NullValue
2627
import graphql.language.ObjectField
@@ -36,6 +37,8 @@ import graphql.language.TypeName
3637
import graphql.language.UnionTypeDefinition
3738
import graphql.language.VariableDefinition
3839
import graphql.language.VariableReference
40+
import org.antlr.v4.runtime.CommonTokenStream
41+
import org.antlr.v4.runtime.ParserRuleContext
3942
import spock.lang.Specification
4043
import 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

Comments
 (0)