void (@NotNull PsiMethod method) { super.visitMethod(method); final PsiCodeBlock body = method.getBody(); if (body == null) { return; } if (method.getNameIdentifier() == null) { return; } final PsiMethod superMethod = getDirectSuperMethod(method); if (superMethod == null) { return; } final String methodName = method.getName(); if (!HardcodedMethodConstants.CLONE.equals(methodName)) { final PsiClass superClass = superMethod.getContainingClass(); if (superClass != null) { final String superClassName = superClass.getQualifiedName(); if (CommonClassNames.JAVA_LANG_OBJECT.equals(superClassName)) { return; } } } if (ignoreEmptySuperMethods && isTrivial(superMethod)) { return; } final boolean isClone = CloneUtils.isClone(method); if (onlyReportWhenAnnotated && !AnnotationUtil.isAnnotated(superMethod, annotations, 0)) { if (!isClone && !isJUnitSetUpOrTearDown(method) && !MethodUtils.isFinalize(method) || isTrivial(superMethod)) { return; } } if (isClone && ClassUtils.isSingleton(method.getContainingClass())) { return; } if (MethodCallUtils.containsSuperMethodCall(method) || ControlFlowUtils.methodAlwaysThrowsException(method)) { return; } registerMethodError(method); }