@NotNull
  private static Match getComplexElementDecision(Match equivalence1,
                                                 Match equivalence2,
                                                 PsiElement left1,
                                                 PsiElement right1,
                                                 PsiElement left2,
                                                 PsiElement right2) {
    if (equivalence2 == EXACT_MATCH) {
      if (equivalence1 == EXACT_MATCH) {
        return EXACT_MATCH;
      }
      else if (equivalence1 == EXACT_MISMATCH) {
        return new Match(left1, right1);
      }
      else {
        return equivalence1;
      }
    }
    else if (equivalence2 == EXACT_MISMATCH) {
      if (equivalence1 == EXACT_MISMATCH) {
        return EXACT_MISMATCH;
      }
      else if (equivalence1 == EXACT_MATCH) {
        return new Match(left2, right2);
      }
    }
    return equivalence1 == EXACT_MATCH ? equivalence2 : EXACT_MISMATCH;
  }
@NotNull
  private static Match getComplexElementDecision(Match equivalence1,
                                                 Match equivalence2,
                                                 PsiElement left1,
                                                 PsiElement right1,
                                                 PsiElement left2,
                                                 PsiElement right2)