unused parameters: compare parameter's visibility settings (IDEA-160113);

unused declaration: show all unused instance methods and fields if class is not instantiated (IDEA-160011)
This commit is contained in:
Anna Kozlova
2016-08-23 15:30:10 +03:00
parent dc277b959f
commit 471c7ebd7f
5 changed files with 20 additions and 13 deletions
@@ -155,10 +155,10 @@ public class RefFieldImpl extends RefJavaElementImpl implements RefField {
@Nullable
public static PsiField findPsiField(PsiManager manager, String externalName) {
int classNameDelimeter = externalName.lastIndexOf(' ');
if (classNameDelimeter > 0 && classNameDelimeter < externalName.length() - 1) {
final String className = externalName.substring(0, classNameDelimeter);
final String fieldName = externalName.substring(classNameDelimeter + 1);
int classNameDelimiter = externalName.lastIndexOf(' ');
if (classNameDelimiter > 0 && classNameDelimiter < externalName.length() - 1) {
final String className = externalName.substring(0, classNameDelimiter);
final String fieldName = externalName.substring(classNameDelimiter + 1);
final PsiClass psiClass = ClassUtil.findPsiClass(manager, className);
if (psiClass != null) {
return psiClass.findFieldByName(fieldName, false);
@@ -402,8 +402,6 @@ public class RefMethodImpl extends RefJavaElementImpl implements RefMethod {
// Class isn't instantiated. Most probably we have problem with class, not method.
if (!isStatic() && !isConstructor()) {
if (((RefClassImpl)getOwnerClass()).isSuspicious()) return true;
// Is an override. Probably called via reference to base class.
for (RefMethod refSuper : getSuperMethods()) {
if (((RefMethodImpl)refSuper).isSuspicious()) return true;
@@ -61,7 +61,7 @@ public class UnusedDeclarationInspection extends UnusedDeclarationInspectionBase
@Override public void visitElement(@NotNull RefEntity refEntity) {
if (!(refEntity instanceof RefMethod) ||
!globalContext.shouldCheck(refEntity, UnusedDeclarationInspection.this) ||
!UnusedDeclarationPresentation.compareVisibilities((RefMethod)refEntity, myLocalInspectionBase)) {
!UnusedDeclarationPresentation.compareVisibilities((RefMethod)refEntity, myLocalInspectionBase.getParameterVisibility())) {
return;
}
CommonProblemDescriptor[] descriptors = myUnusedParameters.checkElement(refEntity, scope, manager, globalContext, problemDescriptionsProcessor);
@@ -49,8 +49,6 @@ import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.VisibilityUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.HashMap;
import com.intellij.util.containers.HashSet;
import com.intellij.util.text.CharArrayUtil;
import com.intellij.util.text.DateFormatUtil;
import com.intellij.util.ui.JBUI;
@@ -465,11 +463,15 @@ public class UnusedDeclarationPresentation extends DefaultInspectionToolPresenta
return PsiModifier.PUBLIC;
}
protected static boolean compareVisibilities(RefJavaElement listOwner, UnusedSymbolLocalInspectionBase localInspectionTool) {
final String visibility = getAcceptedVisibility(localInspectionTool, listOwner);
if (visibility != null) {
protected static boolean compareVisibilities(RefJavaElement listOwner,
UnusedSymbolLocalInspectionBase localInspectionTool) {
return compareVisibilities(listOwner, getAcceptedVisibility(localInspectionTool, listOwner));
}
protected static boolean compareVisibilities(RefJavaElement listOwner, final String acceptedVisibility) {
if (acceptedVisibility != null) {
while (listOwner != null) {
if (VisibilityUtil.compare(listOwner.getAccessModifier(), visibility) >= 0) {
if (VisibilityUtil.compare(listOwner.getAccessModifier(), acceptedVisibility) >= 0) {
return true;
}
final RefEntity parent = listOwner.getOwner();
@@ -6,5 +6,12 @@
<problem_class>unused declaration</problem_class>
<description>Class is not instantiated.</description>
</problem>
<problem>
<file>A.java</file>
<line>4</line>
<package>&lt;default&gt;</package>
<description>&lt;ul&gt;&lt;li&gt;Method owner class is never instantiated OR&lt;/li&gt;&lt;li&gt;An instantiation is not reachable from entry points.&lt;/li&gt;&lt;/ul&gt;</description>
</problem>
</problems>