mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-168879 IDEA should not suggest not exported packages from JDK9
This commit is contained in:
+18
-5
@@ -246,17 +246,30 @@ public class JavaCompletionProcessor extends BaseScopeProcessor implements Eleme
|
||||
// if checkAccess is false, we only show inaccessible source elements because their access modifiers can be changed later by the user.
|
||||
// compiled element can't be changed so we don't pollute the completion with them. In Javadoc, everything is allowed.
|
||||
if (!myOptions.checkAccess && myInJavaDoc) return true;
|
||||
if (!(element instanceof PsiMember)) return true;
|
||||
|
||||
PsiMember member = (PsiMember)element;
|
||||
PsiClass accessObjectClass = myQualified ? myQualifierClass : null;
|
||||
if (JavaPsiFacade.getInstance(element.getProject()).getResolveHelper().isAccessible(member, member.getModifierList(), myElement,
|
||||
accessObjectClass, myDeclarationHolder)) {
|
||||
if (isAccessibleForResolve(element)) {
|
||||
return true;
|
||||
}
|
||||
return !myOptions.checkAccess && !(element instanceof PsiCompiledElement);
|
||||
}
|
||||
|
||||
private boolean isAccessibleForResolve(@Nullable PsiElement element) {
|
||||
if (element instanceof PsiMember) {
|
||||
PsiClass accessObjectClass = myQualified ? myQualifierClass : null;
|
||||
PsiMember member = (PsiMember)element;
|
||||
return getResolveHelper().isAccessible(member, member.getModifierList(), myElement, accessObjectClass, myDeclarationHolder);
|
||||
}
|
||||
if (element instanceof PsiPackage) {
|
||||
return getResolveHelper().isAccessible((PsiPackage)element, myElement);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private PsiResolveHelper getResolveHelper() {
|
||||
return JavaPsiFacade.getInstance(myElement.getProject()).getResolveHelper();
|
||||
}
|
||||
|
||||
public void setCompletionElements(@NotNull Object[] elements) {
|
||||
for (Object element: elements) {
|
||||
CompletionElement completion = new CompletionElement(element, PsiSubstitutor.EMPTY);
|
||||
|
||||
+10
@@ -59,6 +59,16 @@ class ModuleCompletionTest : LightJava9ModulesCodeInsightFixtureTestCase() {
|
||||
complete("module M { provides pkg.main.MySvc with MSI<caret> }", "module M { provides pkg.main.MySvc with pkg.main.MySvcImpl;<caret> }")
|
||||
}
|
||||
|
||||
fun testImports() {
|
||||
addFile("module-info.java", "module M { requires M2; }")
|
||||
addFile("module-info.java", "module M2 { exports pkg.m2; }", M2)
|
||||
addFile("pkg/m2/C2.java", "package pkg.m2;\npublic class C2 { }", M2)
|
||||
addFile("pkg/m2/impl/C2Impl.java", "package pkg.m2.impl;\npublic class C2Impl { }", M2)
|
||||
myFixture.configureByText("test.java", "import pkg.m2.<caret>")
|
||||
myFixture.completeBasic()
|
||||
assertOrderedEquals(myFixture.lookupElementStrings!!, "*", "C2") // no 'impl'
|
||||
}
|
||||
|
||||
//<editor-fold desc="Helpers.">
|
||||
private fun complete(text: String, expected: String) {
|
||||
myFixture.configureByText("module-info.java", text)
|
||||
|
||||
Reference in New Issue
Block a user