mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-04 23:39:07 +07:00
[java, complete, import-module] Complete module names for Module Import Declarations IDEA-355531
GitOrigin-RevId: 6cf4de84d101370d001fee581474fcd687a5ecc3
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d57dee5d32
commit
9f9f6e0527
@@ -1386,25 +1386,30 @@ public final class JavaCompletionContributor extends CompletionContributor imple
|
||||
|
||||
private static void addModuleReferences(PsiElement moduleRef, PsiFile originalFile, CompletionResultSet result) {
|
||||
PsiElement statement = moduleRef.getParent();
|
||||
boolean requires;
|
||||
if ((requires = statement instanceof PsiRequiresStatement) || statement instanceof PsiPackageAccessibilityStatement) {
|
||||
boolean withAutoModules;
|
||||
if ((withAutoModules = statement instanceof PsiRequiresStatement || statement instanceof PsiImportModuleStatement) || statement instanceof PsiPackageAccessibilityStatement) {
|
||||
PsiElement parent = statement.getParent();
|
||||
if (parent != null) {
|
||||
Project project = moduleRef.getProject();
|
||||
Set<String> filter = new HashSet<>();
|
||||
filter.add(((PsiJavaModule)parent).getName());
|
||||
if (parent instanceof PsiJavaModule psiJavaModule) {
|
||||
filter.add(psiJavaModule.getName());
|
||||
} else {
|
||||
PsiJavaModule psiJavaModule = JavaModuleGraphHelper.getInstance().findDescriptorByElement(originalFile);
|
||||
if (psiJavaModule != null) filter.add(psiJavaModule.getName());
|
||||
}
|
||||
|
||||
JavaModuleNameIndex index = JavaModuleNameIndex.getInstance();
|
||||
GlobalSearchScope scope = ProjectScope.getAllScope(project);
|
||||
for (String name : index.getAllKeys(project)) {
|
||||
if (!index.getModules(name, project, scope).isEmpty() && filter.add(name)) {
|
||||
LookupElement lookup = LookupElementBuilder.create(name).withIcon(AllIcons.Nodes.JavaModule);
|
||||
if (requires) lookup = TailTypeDecorator.withTail(lookup, TailTypes.semicolonType());
|
||||
if (withAutoModules) lookup = TailTypeDecorator.withTail(lookup, TailTypes.semicolonType());
|
||||
result.addElement(lookup);
|
||||
}
|
||||
}
|
||||
|
||||
if (requires) {
|
||||
if (withAutoModules) {
|
||||
Module module = ModuleUtilCore.findModuleForFile(originalFile);
|
||||
if (module != null) {
|
||||
scope = ProjectScope.getAllScope(project);
|
||||
|
||||
@@ -135,17 +135,56 @@ class ModuleCompletionTest : LightJava9ModulesCodeInsightFixtureTestCase() {
|
||||
myFixture.checkResult("package whatever;\nclass Foo<TParam> { TParam<caret> p; }")
|
||||
}
|
||||
|
||||
@NeedsIndex.Full
|
||||
fun testModuleImportDeclarations() = fileComplete("Test.java", """
|
||||
import module M<caret>
|
||||
class Test { }
|
||||
""", """
|
||||
import module M2;<caret>
|
||||
class Test { }
|
||||
""")
|
||||
|
||||
@NeedsIndex.Full
|
||||
fun testAutoModuleImportDeclarations() = fileComplete("Test.java", """
|
||||
import module al<caret>
|
||||
class Test { }
|
||||
""", """
|
||||
import module all.fours;<caret>
|
||||
class Test { }
|
||||
""")
|
||||
|
||||
@NeedsIndex.Full
|
||||
fun testModuleImportDeclarationsBare() =
|
||||
fileVariants("Test.java", """
|
||||
import module <caret>
|
||||
class Test { }
|
||||
""".trimIndent(),
|
||||
"M2", "java.base", "java.non.root", "java.se", "java.xml.bind", "java.xml.ws",
|
||||
"lib.multi.release", "lib.named", "lib.auto", "lib.claimed", "all.fours", "lib.with.module.info")
|
||||
|
||||
@NeedsIndex.Full
|
||||
fun testModuleImportDeclarationsIgnoreCurrentModule() {
|
||||
addFile("module-info.java", "module current.module.name { }")
|
||||
fileVariants("Test.java", """
|
||||
import module current<caret>
|
||||
class Test { }
|
||||
""".trimIndent())
|
||||
}
|
||||
|
||||
//<editor-fold desc="Helpers.">
|
||||
private fun complete(text: String, expected: String) {
|
||||
myFixture.configureByText("module-info.java", text)
|
||||
private fun complete(text: String, expected: String) = fileComplete("module-info.java", text, expected)
|
||||
private fun fileComplete(fileName: String, text: String, expected: String) {
|
||||
myFixture.configureByText(fileName, text)
|
||||
myFixture.completeBasic()
|
||||
myFixture.checkResult(expected)
|
||||
}
|
||||
|
||||
private fun variants(text: String, vararg variants: String) {
|
||||
myFixture.configureByText("module-info.java", text)
|
||||
private fun variants(text: String, vararg variants: String) = fileVariants("module-info.java", text, *variants)
|
||||
private fun fileVariants(fileName: String, text: String, vararg variants: String) {
|
||||
myFixture.configureByText(fileName, text)
|
||||
myFixture.completeBasic()
|
||||
assertThat(myFixture.lookupElementStrings).containsExactlyInAnyOrder(*variants)
|
||||
}
|
||||
|
||||
//</editor-fold>
|
||||
}
|
||||
Reference in New Issue
Block a user