From 471c7ebd7f1207bbf8122b8a23caf212c082bf83 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 23 Aug 2016 15:26:31 +0300 Subject: [PATCH] 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) --- .../codeInspection/reference/RefFieldImpl.java | 8 ++++---- .../codeInspection/reference/RefMethodImpl.java | 2 -- .../deadCode/UnusedDeclarationInspection.java | 2 +- .../deadCode/UnusedDeclarationPresentation.java | 14 ++++++++------ .../inspection/deadCode/packageLocal/expected.xml | 7 +++++++ 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefFieldImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefFieldImpl.java index 9c2285f3a3db..6d023cbb7464 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefFieldImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefFieldImpl.java @@ -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); diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefMethodImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefMethodImpl.java index 7e5b8d9ab2ff..fb80967fdb21 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefMethodImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefMethodImpl.java @@ -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; diff --git a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java index 97141a6578d5..d3047fe3166c 100644 --- a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java @@ -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); diff --git a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationPresentation.java b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationPresentation.java index 858b40ea04c9..9b97df5b814f 100644 --- a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationPresentation.java +++ b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationPresentation.java @@ -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(); diff --git a/java/java-tests/testData/inspection/deadCode/packageLocal/expected.xml b/java/java-tests/testData/inspection/deadCode/packageLocal/expected.xml index 77f16e9c5fd3..10b6d88487c3 100644 --- a/java/java-tests/testData/inspection/deadCode/packageLocal/expected.xml +++ b/java/java-tests/testData/inspection/deadCode/packageLocal/expected.xml @@ -6,5 +6,12 @@ unused declaration Class is not instantiated. + + A.java + 4 + <default> + <ul><li>Method owner class is never instantiated OR</li><li>An instantiation is not reachable from entry points.</li></ul> + +