Java: Quick fix that adds "requires" statement to the module info - code cleanup, improved messages (IDEA-162762)

This commit is contained in:
Pavel Dolgov
2016-10-31 19:48:09 +03:00
parent b073108701
commit e47fb9177a
3 changed files with 11 additions and 19 deletions
@@ -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;
}
}
@@ -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)
}
@@ -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
module.info.add.requires.family.name=Add 'requires' statement to module-info.java
module.info.add.requires.name=Add ''requires {0}'' statement