mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 03:21:12 +07:00
IDEA-138071 Completion shouldn't show private symbols from compiled code
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
public class Foo {
|
||||
|
||||
void foo() {
|
||||
registerNat<caret>
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user