if (states.size() > 300) return Collections.emptyList(); // too complex
if (expr instanceof PsiPolyadicExpression) {
PsiExpression[] operands = ((PsiPolyadicExpression)expr).getOperands();
IElementType op = ((PsiPolyadicExpression)expr).getOperationTokenType();
if (operands.length == 2 && (op == JavaTokenType.EQEQ || op == JavaTokenType.NE)) {
<BUG>return visitEqualityComparison(states, operands[0], operands[1], op == JavaTokenType.EQEQ);
</BUG>
}
if (op == JavaTokenType.ANDAND || op == JavaTokenType.OROR) {
<BUG>return visitLogicalOperation(operands, op == JavaTokenType.ANDAND, states);
</BUG>
}

if (states.size() > 300) return Collections.emptyList(); // too complex
if (expr instanceof PsiPolyadicExpression) {
PsiExpression[] operands = ((PsiPolyadicExpression)expr).getOperands();
IElementType op = ((PsiPolyadicExpression)expr).getOperationTokenType();
if (operands.length == 2 && (op == JavaTokenType.EQEQ || op == JavaTokenType.NE)) {
return asPreContracts(visitEqualityComparison(states, operands[0], operands[1], op == JavaTokenType.EQEQ));
}
if (op == JavaTokenType.ANDAND || op == JavaTokenType.OROR) {
return asPreContracts(visitLogicalOperation(operands, op == JavaTokenType.ANDAND, states));
