public static SemanticContext and(SemanticContext a, SemanticContext b) {
		if ( a == null || a == Empty.Instance ) return b;
		if ( b == null || b == Empty.Instance ) return a;
		AND result = new AND(a, b);
		if (result.opnds.length == 1) {
			return result.opnds[0];
		}

		return result;
	}
{@inheritDoc}

<p>
The evaluation of predicates by this context is short-circuiting, but
unordered.</p>
runtime/Java/src/org/antlr/v4/runtime/atn/SemanticContext.java