protected Match typeCastExpressionsMatch(@NotNull PsiTypeCastExpression typeCastExpression1,
                                           @NotNull PsiTypeCastExpression typeCastExpression2) {
    final PsiTypeElement typeElement1 = typeCastExpression1.getCastType();
    final PsiTypeElement typeElement2 = typeCastExpression2.getCastType();
    if (!typeElementsAreEquivalent(typeElement1, typeElement2).isExactMatch()) {
      return EXACT_MISMATCH;
    }
    final PsiExpression operand1 = typeCastExpression1.getOperand();
    final PsiExpression operand2 = typeCastExpression2.getOperand();
    if (operand1 instanceof PsiFunctionalExpression || operand2 instanceof PsiFunctionalExpression) {
      return EXACT_MISMATCH;
    }
    return expressionsMatch(operand1, operand2).partialIfExactMismatch(operand1, operand2);
  }
protected Match typeCastExpressionsMatch(@NotNull PsiTypeCastExpression typeCastExpression1,
                                           @NotNull PsiTypeCastExpression typeCastExpression2)