IDEA-138071 Completion shouldn't show private symbols from compiled code

This commit is contained in:
peter
2015-03-24 15:43:30 +01:00
parent d660ad71fb
commit 409070a176
4 changed files with 25 additions and 5 deletions

View File

@@ -48,6 +48,7 @@ import java.util.*;
*/
public class JavaCompletionProcessor extends BaseScopeProcessor implements ElementClassHint {
private final boolean myInJavaDoc;
private boolean myStatic = false;
private PsiElement myDeclarationHolder = null;
private final Set<Object> myResultNames = new THashSet<Object>(new TObjectHashingStrategy<Object>() {
@@ -87,7 +88,8 @@ public class JavaCompletionProcessor extends BaseScopeProcessor implements Eleme
myMatcher = nameCondition;
myFilter = filter;
PsiElement scope = element;
if (JavaResolveUtil.isInJavaDoc(myElement)) myMembersFlag = true;
myInJavaDoc = JavaResolveUtil.isInJavaDoc(myElement);
if (myInJavaDoc) myMembersFlag = true;
while(scope != null && !(scope instanceof PsiFile) && !(scope instanceof PsiClass)){
scope = scope.getContext();
}
@@ -308,13 +310,16 @@ public class JavaCompletionProcessor extends BaseScopeProcessor implements Eleme
}
public boolean isAccessible(@Nullable final PsiElement element) {
if (!myOptions.checkAccess) return true;
if (!myOptions.checkAccess && myInJavaDoc) return true;
if (!(element instanceof PsiMember)) return true;
PsiMember member = (PsiMember)element;
PsiClass accessObjectClass = myQualified ? myQualifierClass : null;
return JavaPsiFacade.getInstance(element.getProject()).getResolveHelper().isAccessible(member, member.getModifierList(), myElement,
accessObjectClass, myDeclarationHolder);
if (JavaPsiFacade.getInstance(element.getProject()).getResolveHelper().isAccessible(member, member.getModifierList(), myElement,
accessObjectClass, myDeclarationHolder)) {
return true;
}
return !myOptions.checkAccess && !(element instanceof PsiCompiledElement);
}
public void setCompletionElements(@NotNull Object[] elements) {

View File

@@ -0,0 +1,7 @@
public class Foo {
void foo() {
registerNat<caret>
}
}

View File

@@ -110,7 +110,7 @@ public class NormalCompletionOrderingTest extends CompletionSortingTestCase {
final String path = getTestName(false) + ".java";
myFixture.configureByFile(path);
myFixture.complete(CompletionType.BASIC, 2);
assertPreferredItems(0, "BOOLEAN", "booleanMethod", "AN_OBJECT", "voidMethod", "registerNatives");
assertPreferredItems(0, "BOOLEAN", "booleanMethod", "AN_OBJECT", "voidMethod");
}
public void testDispreferDeclared() throws Throwable {

View File

@@ -1493,6 +1493,14 @@ class Bar {
myFixture.assertPreferredCompletionItems(0, "xcreateZoo", "xcreateElephant");
}
public void testNoInaccessibleCompiledElements() {
configure()
myFixture.complete(CompletionType.BASIC, 2)
checkResultByFile(getTestName(false) + ".java");
assertEmpty(myItems);
assertNull(getLookup());
}
public void "test code cleanup during completion generation"() {
myFixture.configureByText "a.java", "class Foo {int i; ge<caret>}"
myFixture.enableInspections(new UnqualifiedFieldAccessInspection())