-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Description
Antlr 4.5.3 tool jar.
On a rule containing an action
a : b { System.out.println($c.text); } ;
// Note: $c is an invalid reference
// Also: on $b.hext (invalid attribute)
The tool fails with:
java.lang.NullPointerException at org.antlr.v4.codegen.ActionTranslator.qualifiedAttr(ActionTranslator.java:214) ~[antlr4.jar:?] at org.antlr.v4.parse.ActionSplitter.mQUALIFIED_ATTR(ActionSplitter.java:394) ~[antlr4.jar:?] at org.antlr.v4.parse.ActionSplitter.mTokens(ActionSplitter.java:868) ~[antlr4.jar:?] at org.antlr.v4.parse.ActionSplitter.nextToken(ActionSplitter.java:89) ~[antlr4.jar:?] at org.antlr.v4.parse.ActionSplitter.getActionTokens(ActionSplitter.java:43) ~[antlr4.jar:?] at org.antlr.v4.codegen.ActionTranslator.translateActionChunk(ActionTranslator.java:170) ~[antlr4.jar:?]
Full error trace in
BadAttrName.txt
ActionTranslator.java:214, unlike the other ActionSplitter delegate AttributeChecks.java:115, does not check for the potential null result of node.resolver.resolveToAttribute
, indicating an invalid attribute reference.
The solution may be as simple as replicating the null handling of AttributeChecks in to ActionTranslator (and in the related method attr()
).