From e47fb9177a2efe067101d9d2c45606cd11006608 Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Mon, 31 Oct 2016 19:45:18 +0300 Subject: [PATCH] Java: Quick fix that adds "requires" statement to the module info - code cleanup, improved messages (IDEA-162762) --- .../impl/quickfix/AddRequiredModuleFix.java | 19 ++++--------------- .../daemon/quickFix/AddRequiredModuleTest.kt | 7 +++++-- .../src/messages/QuickFixBundle.properties | 4 ++-- 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddRequiredModuleFix.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddRequiredModuleFix.java index b793fea0af59..3221a37a80cd 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddRequiredModuleFix.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddRequiredModuleFix.java @@ -23,6 +23,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -85,27 +86,15 @@ public class AddRequiredModuleFix implements IntentionAction { @Nullable private static PsiElement findAddingPlace(@NotNull PsiJavaModule module) { - PsiElement addingPlace = null; - for (PsiRequiresStatement requires : module.getRequires()) { - addingPlace = requires; - } - if (addingPlace != null) { - return addingPlace; - } - for (PsiExportsStatement exports : module.getExports()) { - addingPlace = exports; - } - if (addingPlace != null) { - return addingPlace; - } - return getLBrace(module); + PsiElement addingPlace = ContainerUtil.iterateAndGetLastItem(module.getRequires()); + return addingPlace != null ? addingPlace : getLBrace(module); } @Nullable private static PsiElement getLBrace(@NotNull PsiJavaModule module) { PsiJavaModuleReferenceElement nameElement = module.getNameElement(); for (PsiElement element = nameElement.getNextSibling(); element != null; element = element.getNextSibling()) { - if (element instanceof PsiJavaToken && ((PsiJavaToken)element).getTokenType() == JavaTokenType.LBRACE) { + if (PsiUtil.isJavaToken(element, JavaTokenType.LBRACE)) { return element; } } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/AddRequiredModuleTest.kt b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/AddRequiredModuleTest.kt index c8dcf3d90f07..52cbffae1a29 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/AddRequiredModuleTest.kt +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/AddRequiredModuleTest.kt @@ -16,6 +16,7 @@ package com.intellij.codeInsight.daemon.quickFix import com.intellij.JavaTestUtil +import com.intellij.codeInsight.daemon.QuickFixBundle import com.intellij.testFramework.fixtures.LightJava9ModulesCodeInsightFixtureTestCase import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor.* @@ -23,6 +24,8 @@ import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.Mod * @author Pavel.Dolgov */ class AddRequiredModuleTest : LightJava9ModulesCodeInsightFixtureTestCase() { + val messageM2 = QuickFixBundle.message("module.info.add.requires.name", "M2")!! + override fun setUp() { super.setUp() addFile("module-info.java", "module M2 { exports pkgA; }", M2) @@ -36,7 +39,7 @@ class AddRequiredModuleTest : LightJava9ModulesCodeInsightFixtureTestCase() { "public class B { A a; }", MAIN) myFixture.configureFromExistingVirtualFile(editedFile) - val action = myFixture.findSingleIntention("Add 'M2' as required module") + val action = myFixture.findSingleIntention(messageM2) assertNotNull(action) myFixture.launchAction(action) @@ -51,7 +54,7 @@ class AddRequiredModuleTest : LightJava9ModulesCodeInsightFixtureTestCase() { "public class B { A a; }", M3) myFixture.configureFromExistingVirtualFile(editedFile) - val actions = myFixture.filterAvailableIntentions("Add 'M2' as required module") + val actions = myFixture.filterAvailableIntentions(messageM2) assertEmpty(actions) } diff --git a/resources-en/src/messages/QuickFixBundle.properties b/resources-en/src/messages/QuickFixBundle.properties index b7dfe436634d..0f15c79817bf 100644 --- a/resources-en/src/messages/QuickFixBundle.properties +++ b/resources-en/src/messages/QuickFixBundle.properties @@ -300,5 +300,5 @@ move.file.to.source.root.text=Move file to a source root delete.element.fix.text=Delete element -module.info.add.requires.family.name=Add required module -module.info.add.requires.name=Add ''{0}'' as required module \ No newline at end of file +module.info.add.requires.family.name=Add 'requires' statement to module-info.java +module.info.add.requires.name=Add ''requires {0}'' statement \ No newline at end of file