protected Match conditionalLoopStatementsMatch(@NotNull PsiConditionalLoopStatement statement1,
                                                 @NotNull PsiConditionalLoopStatement statement2) {
    markDeclarationsAsEquivalent(statement1, statement2);
    if (statement1 instanceof PsiForStatement) {
      final PsiStatement initialization1 = ((PsiForStatement)statement1).getInitialization();
      final PsiStatement initialization2 = ((PsiForStatement)statement2).getInitialization();
      if (!statementsMatch(initialization1, initialization2).isExactMatch()) {
        return EXACT_MISMATCH;
      }
      final PsiStatement update1 = ((PsiForStatement)statement1).getUpdate();
      final PsiStatement update2 = ((PsiForStatement)statement2).getUpdate();
      if (!statementsMatch(update1, update2).isExactMatch()) {
        return EXACT_MISMATCH;
      }
    }
    final PsiExpression condition1 = statement1.getCondition();
    final PsiExpression condition2 = statement2.getCondition();
    final PsiStatement body1 = statement1.getBody();
    final PsiStatement body2 = statement2.getBody();
    final Match conditionEquivalence = expressionsMatch(condition1, condition2);
    final Match bodyEquivalence = statementsMatch(body1, body2);

    return getComplexElementDecision(bodyEquivalence, conditionEquivalence, body1, body2, condition1, condition2);
  }
protected Match conditionalLoopStatementsMatch(@NotNull PsiConditionalLoopStatement statement1,
                                                 @NotNull PsiConditionalLoopStatement statement2)