IDEA-168879 IDEA should not suggest not exported packages from JDK9

This commit is contained in:
peter
2017-07-03 19:13:45 +02:00
parent 4c12aea862
commit 64d65111e7
2 changed files with 28 additions and 5 deletions
@@ -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);
@@ -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)