@Override
	protected ATNConfigSet computeReachSet(ATNConfigSet closure, int t, boolean fullCtx) {
		if (fullCtx) {
			// this method is called after each time the input position advances
			// during full context prediction
			_llStopIndex = _input.index();
		}

		ATNConfigSet reachConfigs = super.computeReachSet(closure, t, fullCtx);
		if (fullCtx) {
			decisions[currentDecision].LL_ATNTransitions++; // count computation even if error
			if ( reachConfigs!=null ) {
			}
			else { // no reach on current lookahead symbol. ERROR.
				// TODO: does not handle delayed errors per getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule()
				decisions[currentDecision].errors.add(
					new ErrorInfo(currentDecision, closure, _input, _startIndex, _llStopIndex, true)
				);
			}
		}
		else {
			decisions[currentDecision].SLL_ATNTransitions++;
			if ( reachConfigs!=null ) {
			}
			else { // no reach on current lookahead symbol. ERROR.
				decisions[currentDecision].errors.add(
					new ErrorInfo(currentDecision, closure, _input, _startIndex, _sllStopIndex, false)
				);
			}
		}
		return reachConfigs;
	}
At the point of LL failover, we record how SLL would resolve the conflict so that
 we can determine whether or not a decision / input pair is context-sensitive.
 If LL gives a different result than SLL's predicted alternative, we have a
 context sensitivity for sure. The converse is not necessarily true, however.
 It's possible that after conflict resolution chooses minimum alternatives,
 SLL could get the same answer as LL. Regardless of whether or not the result indicates
 an ambiguity, it is not treated as a context sensitivity because LL prediction
 was not required in order to produce a correct prediction for this decision and input sequence.
 It may in fact still be a context sensitivity but we don't know by looking at the
 minimum alternatives for the current input.
runtime/Java/src/org/antlr/v4/runtime/atn/ProfilingATNSimulator.java