mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
unused class when used through import only should not be treated as used (IDEA-99444)
This commit is contained in:
+18
-3
@@ -43,7 +43,10 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.lang.ref.Reference;
|
||||
import java.lang.ref.SoftReference;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
class RefCountHolder {
|
||||
@@ -172,8 +175,20 @@ class RefCountHolder {
|
||||
}
|
||||
|
||||
private void registerLocalRef(@NotNull PsiReference ref, PsiElement refElement) {
|
||||
if (refElement instanceof PsiMethod && PsiTreeUtil.isAncestor(refElement, ref.getElement(), true)) return; // filter self-recursive calls
|
||||
if (refElement instanceof PsiClass && PsiTreeUtil.isAncestor(refElement, ref.getElement(), true)) return; // filter inner use of itself
|
||||
PsiElement element = ref.getElement();
|
||||
if (refElement instanceof PsiMethod && PsiTreeUtil.isAncestor(refElement, element, true)) return; // filter self-recursive calls
|
||||
if (refElement instanceof PsiClass) {
|
||||
if (PsiTreeUtil.isAncestor(refElement, element, true)) {
|
||||
return; // filter inner use of itself
|
||||
}
|
||||
PsiImportStatementBase importStmt = PsiTreeUtil.getParentOfType(element, PsiImportStatementBase.class);
|
||||
if (importStmt != null) {
|
||||
PsiElement resolve = importStmt.resolve();
|
||||
if (resolve != null && PsiTreeUtil.isAncestor(refElement, resolve, false)) {
|
||||
return;//filter refs on inner members in imports
|
||||
}
|
||||
}
|
||||
}
|
||||
synchronized (myLocalRefsMap) {
|
||||
myLocalRefsMap.putValue(refElement, ref);
|
||||
}
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package p;
|
||||
|
||||
import static p.Outer.Inner;
|
||||
import java.util.*;
|
||||
|
||||
abstract class <warning descr="Class 'Outer' is never used">Outer</warning> implements List<Inner> {
|
||||
public static class Inner {}
|
||||
}
|
||||
+4
@@ -107,4 +107,8 @@ public class LightAdvHighlightingJdk6Test extends LightDaemonAnalyzerTestCase {
|
||||
public void testPrivateClassReferencedInAnnotationOnSibling() {
|
||||
doTest(false, false);
|
||||
}
|
||||
|
||||
public void testInnerClassImportShouldNotLeadToClassUsage() {
|
||||
enableInspectionTool(new UnusedDeclarationInspection(true));
|
||||
doTest(true, false); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user