void (@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())); } } } }