@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
      if (reportInstanceOf && OBJECT_GET_CLASS.test(call)) {
        PsiExpression other = ExpressionUtils.getExpressionComparedTo(call);
        if (other instanceof PsiClassObjectAccessExpression) {
          PsiTypeElement typeElement = ((PsiClassObjectAccessExpression)other).getOperand();
          if (typeIsConcreteClass(typeElement)) {
            PsiMethod method = PsiTreeUtil.getParentOfType(call, PsiMethod.class, true, PsiClass.class, PsiLambdaExpression.class);
            if (!MethodUtils.isEquals(method)) {
              registerError(typeElement, InspectionGadgetsBundle.message("instanceof.concrete.class.equality.problem.descriptor"));
            }
          }
        }
      }
      else if (reportCast && CLASS_CAST.test(call)) {
        PsiExpression qualifier = call.getMethodExpression().getQualifierExpression();
        if (qualifier != null) {
          PsiType qualifierType = qualifier.getType();
          PsiType targetClass = PsiUtil.substituteTypeParameter(qualifierType, CommonClassNames.JAVA_LANG_CLASS, 0, false);
          if (!typeIsConcreteClass(targetClass)) return;
          PsiMethod method = PsiTreeUtil.getParentOfType(call, PsiMethod.class, true, PsiClass.class, PsiLambdaExpression.class);
          if (!MethodUtils.isEquals(method) && !CloneUtils.isClone(method)) {
            registerMethodCallError(call, InspectionGadgetsBundle
              .message("cast.to.concrete.class.problem.descriptor", targetClass.getPresentableText()));
          }
        }
      }
    }
@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call)