diff --git a/runtime/Java/src/org/antlr/v4/runtime/BaseRecognizer.java b/runtime/Java/src/org/antlr/v4/runtime/BaseRecognizer.java index 3b75131da..5d1d6be4d 100644 --- a/runtime/Java/src/org/antlr/v4/runtime/BaseRecognizer.java +++ b/runtime/Java/src/org/antlr/v4/runtime/BaseRecognizer.java @@ -30,9 +30,7 @@ package org.antlr.v4.runtime; import com.sun.istack.internal.Nullable; import org.antlr.v4.runtime.atn.ATNConfig; -import org.antlr.v4.runtime.atn.ATNState; import org.antlr.v4.runtime.atn.ParserATNSimulator; -import org.antlr.v4.runtime.atn.RuleTransition; import org.antlr.v4.runtime.misc.IntervalSet; import org.antlr.v4.runtime.misc.OrderedHashSet; @@ -242,11 +240,9 @@ public abstract class BaseRecognizer extends Recognizer { String[] ruleNames = getRuleNames(); List stack = new ArrayList(); RuleContext p = _ctx; - while ( p!=null && p.invokingState>=0 ) { + while ( p!=null ) { // compute what follows who invoked us - ATNState invokingState = _interp.atn.states.get(p.invokingState); - RuleTransition rt = (RuleTransition)invokingState.transition(0); - stack.add(ruleNames[rt.ruleIndex]); + stack.add(ruleNames[p.getRuleIndex()]); p = p.parent; } return stack; diff --git a/tool/test/org/antlr/v4/test/TestParseTrees.java b/tool/test/org/antlr/v4/test/TestParseTrees.java index fc6d8122b..3ee5a60a0 100644 --- a/tool/test/org/antlr/v4/test/TestParseTrees.java +++ b/tool/test/org/antlr/v4/test/TestParseTrees.java @@ -3,16 +3,16 @@ package org.antlr.v4.test; import org.junit.Test; public class TestParseTrees extends BaseTest { - @Test public void testToken() throws Exception { + @Test public void testTokenAndRuleContextString() throws Exception { String grammar = "grammar T;\n" + "s\n" + "@init {setBuildParseTrees(true);}\n" + "@after {System.out.println($r.toStringTree(this));}\n" + " :r=a ;\n" + - "a : 'x' ;\n"; + "a : 'x' {System.out.println(getRuleInvocationStack());} ;\n"; String result = execParser("T.g", grammar, "TParser", "TLexer", "s", "x", false); - String expecting = "(a x)\n"; + String expecting = "[a, s]\n(a x)\n"; assertEquals(expecting, result); }