IDEA-67939 Smart completion completes private field from parent class inside a static inner inheritor

This commit is contained in:
peter
2011-04-12 20:29:08 +02:00
parent ab638476d1
commit e83810e358
3 changed files with 23 additions and 1 deletions

View File

@@ -48,6 +48,7 @@ public class JavaCompletionProcessor extends BaseScopeProcessor implements Eleme
public static final Key<Boolean> JAVA_COMPLETION = Key.create("JAVA_COMPLETION");
private boolean myStatic = false;
private PsiElement myDeclarationHolder = null;
private final Set<Object> myResultNames = new THashSet<Object>();
private final List<CompletionElement> myResults;
private final PsiElement myElement;
@@ -182,6 +183,9 @@ public class JavaCompletionProcessor extends BaseScopeProcessor implements Eleme
if(event == JavaScopeProcessorEvent.CHANGE_LEVEL){
myMembersFlag = true;
}
if (event == JavaScopeProcessorEvent.SET_CURRENT_FILE_CONTEXT) {
myDeclarationHolder = (PsiElement)associated;
}
}
public boolean execute(PsiElement element, ResolveState state) {
@@ -242,7 +246,8 @@ public class JavaCompletionProcessor extends BaseScopeProcessor implements Eleme
if (!myCheckAccess) return true;
if (!(element instanceof PsiMember)) return true;
return JavaPsiFacade.getInstance(element.getProject()).getResolveHelper().isAccessible((PsiMember)element, myElement, myQualifierClass);
PsiMember member = (PsiMember)element;
return JavaPsiFacade.getInstance(element.getProject()).getResolveHelper().isAccessible(member, member.getModifierList(), myElement, myQualifierClass, myDeclarationHolder);
}
public void setCompletionElements(@NotNull Object[] elements) {

View File

@@ -0,0 +1,15 @@
public class SmartCompletionTest {
interface SmartCompletionType {}
private SmartCompletionType myNonStaticField;
private static void staticMethod(SmartCompletionType type) {}
private static class StaticInnerClass extends SmartCompletionTest {
private void method() {
staticMethod(myNon<caret>);
}
}
}

View File

@@ -1029,6 +1029,8 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
doFirstItemTest('\t');
}
public void testNonStaticField() throws Exception { doAntiTest(); }
private void doActionTest() throws Exception {
configureByTestName();
checkResultByTestName();