diff --git a/runtime/Java/src/org/antlr/v4/runtime/atn/ATN.java b/runtime/Java/src/org/antlr/v4/runtime/atn/ATN.java index 96f71f8d3f..22b007a742 100644 --- a/runtime/Java/src/org/antlr/v4/runtime/atn/ATN.java +++ b/runtime/Java/src/org/antlr/v4/runtime/atn/ATN.java @@ -180,7 +180,12 @@ public IntervalSet getExpectedTokens(int stateNumber, RuleContext context) { expected.remove(Token.EPSILON); while (ctx != null && ctx.invokingState >= 0 && following.contains(Token.EPSILON)) { ATNState invokingState = states.get(ctx.invokingState); - RuleTransition rt = (RuleTransition)invokingState.transition(0); + Transition t = invokingState.transition(0); + while (t instanceof EpsilonTransition) { + EpsilonTransition et = (EpsilonTransition) t; + t = et.target.transition(0); + } + RuleTransition rt = (RuleTransition) t; following = nextTokens(rt.followState); expected.addAll(following); expected.remove(Token.EPSILON);