@Override
  public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
    super.visitMethodCallExpression(expression);
    final PsiExpression[] arguments = expression.getArgumentList().getExpressions();
    if (OBJECT_EQUALS.test(expression)) {
      PsiExpression expression1 =
        PsiUtil.skipParenthesizedExprDown(ExpressionUtils.getEffectiveQualifier(expression.getMethodExpression()));
      PsiExpression expression2 = PsiUtil.skipParenthesizedExprDown(arguments[0]);
      checkTypes(expression, expression1, expression2);
    }
    else if (STATIC_EQUALS.test(expression)) {
      PsiExpression expression1 = PsiUtil.skipParenthesizedExprDown(arguments[0]);
      PsiExpression expression2 = PsiUtil.skipParenthesizedExprDown(arguments[1]);
      checkTypes(expression, expression1, expression2);
    }
    else if (PREDICATE_IS_EQUAL.test(expression)) {
      PsiExpression expression1 = PsiUtil.skipParenthesizedExprDown(arguments[0]);
      PsiType psiType1 = getType(expression1);
      PsiType psiType2 = resolveIsEqualPredicateType(expression);
      if (psiType1 == null || psiType2 == null) {
        return;
      }
      checkTypes(expression.getMethodExpression(), psiType1, psiType2);
    }
  }
@Override
  public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression)