mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-48622 Duplicated static fields in smart completion list
This commit is contained in:
@@ -26,6 +26,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.filters.TrueFilter;
|
||||
import com.intellij.psi.scope.processor.FilterScopeProcessor;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -104,6 +105,15 @@ public class MembersGetter {
|
||||
final boolean acceptMethods, PsiType expectedType) {
|
||||
if (where == null) return;
|
||||
|
||||
PsiClass current = PsiTreeUtil.getContextOfType(context, PsiClass.class);
|
||||
while (current != null) {
|
||||
current = JavaCompletionUtil.getOriginalElement(current);
|
||||
if (InheritanceUtil.isInheritorOrSelf(current, where, true)) {
|
||||
return;
|
||||
}
|
||||
current = PsiTreeUtil.getContextOfType(current, PsiClass.class);
|
||||
}
|
||||
|
||||
final FilterScopeProcessor<PsiElement> processor = new FilterScopeProcessor<PsiElement>(TrueFilter.INSTANCE);
|
||||
where.processDeclarations(processor, ResolveState.initial(), null, context);
|
||||
|
||||
@@ -111,9 +121,7 @@ public class MembersGetter {
|
||||
for (final PsiElement result : processor.getResults()) {
|
||||
if (result instanceof PsiMember && !(result instanceof PsiClass)) {
|
||||
final PsiMember member = (PsiMember)result;
|
||||
if (member.hasModifierProperty(PsiModifier.STATIC) &&
|
||||
!PsiTreeUtil.isAncestor(member.getContainingClass(), context, false) &&
|
||||
resolveHelper.isAccessible(member, context, null)) {
|
||||
if (member.hasModifierProperty(PsiModifier.STATIC) && resolveHelper.isAccessible(member, context, null)) {
|
||||
if (result instanceof PsiField && !member.hasModifierProperty(PsiModifier.FINAL)) continue;
|
||||
if (result instanceof PsiMethod && acceptMethods) continue;
|
||||
final LookupItem item = (LookupItem)LookupItemUtil.objectToLookupItem(result);
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
class Super {
|
||||
public static final Super FOO = null;
|
||||
}
|
||||
|
||||
class Intermediate extends Super {
|
||||
|
||||
Super s = FOO;<caret>
|
||||
}
|
||||
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
class Super {
|
||||
public static final Super FOO = null;
|
||||
}
|
||||
|
||||
class Intermediate extends Super {
|
||||
|
||||
Super s = F<caret>
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -985,6 +985,8 @@ public class SmartTypeCompletionTest extends LightCompletionTestCase {
|
||||
doItemTest();
|
||||
}
|
||||
|
||||
public void testDuplicateMembersFromSuperClass() throws Throwable { doActionTest(); }
|
||||
|
||||
public void testInsideGenericClassLiteral() throws Throwable {
|
||||
configureByTestName();
|
||||
testByCount(3, "String.class", "StringBuffer.class", "StringBuilder.class");
|
||||
|
||||
Reference in New Issue
Block a user