private static boolean elvisExpressionsAreEquivalent( @NotNull GrElvisExpression condExp1, @NotNull GrElvisExpression condExp2) { final GrExpression condition1 = condExp1.getCondition(); final GrExpression condition2 = condExp2.getCondition(); final GrExpression elseExpression1 = condExp1.getElseBranch(); final GrExpression elseExpression2 = condExp2.getElseBranch(); return expressionsAreEquivalent(condition1, condition2) && expressionsAreEquivalent(elseExpression1, elseExpression2); }
@Override public void visitElvisExpression(GrElvisExpression expression) { GrExpression condition = expression.getCondition(); GrExpression elseBranch = expression.getElseBranch(); condition.accept(this); List<GotoInstruction> negations = collectAndRemoveAllPendingNegations(expression); InstructionImpl head = myHead; handlePossibleReturn(condition); addPendingEdge(expression, myHead); myHead = head; if (elseBranch != null) { head = reduceAllNegationsIntoInstruction(expression, negations); if (head != null) myHead = head; elseBranch.accept(this); handlePossibleReturn(elseBranch); } }