From 49ccfa0ec4f47fcf596181af327e96a77e9be182 Mon Sep 17 00:00:00 2001 From: Sergey Mashkov Date: Mon, 6 Jun 2016 14:47:44 +0300 Subject: [PATCH] KT-12558 Configure Kotlin in Project: Maven: Undo could revert changes in all poms --- .../kotlin/idea/maven/KotlinMavenImporter.kt | 6 +- .../configuration/KotlinMavenConfigurator.kt | 70 +++++++++---------- .../KotlinMavenPluginPhaseInspection.kt | 1 - ...avenUnresolvedReferenceQuickFixProvider.kt | 10 --- .../KotlinMavenArchetypesProviderTest.kt | 5 +- ...MavenConfigureProjectByChangingFileTest.kt | 8 +-- 6 files changed, 45 insertions(+), 55 deletions(-) diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt index 7c4e38e85ab..326a15a128a 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt @@ -16,7 +16,10 @@ package org.jetbrains.kotlin.idea.maven -import com.intellij.openapi.components.* +import com.intellij.openapi.components.PersistentStateComponent +import com.intellij.openapi.components.State +import com.intellij.openapi.components.Storage +import com.intellij.openapi.components.StoragePathMacros import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider import com.intellij.openapi.module.Module import com.intellij.openapi.roots.OrderEnumerator @@ -30,7 +33,6 @@ import org.jetbrains.idea.maven.model.MavenPlugin import org.jetbrains.idea.maven.project.* import org.jetbrains.jps.model.java.JavaSourceRootType import org.jetbrains.jps.model.module.JpsModuleSourceRootType -import org.jetbrains.kotlin.idea.util.projectStructure.findLibrary import java.io.File import java.util.* diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinMavenConfigurator.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinMavenConfigurator.kt index 64b21e3c79d..5c38bf5f26f 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinMavenConfigurator.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinMavenConfigurator.kt @@ -80,18 +80,20 @@ abstract class KotlinMavenConfigurator protected constructor(private val stdlibA dialog.show() if (!dialog.isOK) return - val collector = createConfigureKotlinNotificationCollector(project) - for (module in excludeMavenChildrenModules(project, dialog.modulesToConfigure)) { - val file = findModulePomFile(module) - if (file != null && canConfigureFile(file)) { - changePomFile(module, file, dialog.kotlinVersion, collector) - OpenFileAction.openFile(file.virtualFile, project) - } - else { - showErrorMessage(project, "Cannot find pom.xml for module " + module.name) + WriteCommandAction.runWriteCommandAction(project) { + val collector = createConfigureKotlinNotificationCollector(project) + for (module in excludeMavenChildrenModules(project, dialog.modulesToConfigure)) { + val file = findModulePomFile(module) + if (file != null && canConfigureFile(file)) { + changePomFile(module, file, dialog.kotlinVersion, collector) + OpenFileAction.openFile(file.virtualFile, project) + } + else { + showErrorMessage(project, "Cannot find pom.xml for module " + module.name) + } } + collector.showNotification() } - collector.showNotification() } protected abstract fun isKotlinModule(module: Module): Boolean @@ -112,33 +114,31 @@ abstract class KotlinMavenConfigurator protected constructor(private val stdlibA return } - WriteCommandAction.runWriteCommandAction(module.project) { - val pom = PomFile(file as XmlFile) - pom.addProperty(KOTLIN_VERSION_PROPERTY, version) + val pom = PomFile(file as XmlFile) + pom.addProperty(KOTLIN_VERSION_PROPERTY, version) - pom.addDependency(MavenId(GROUP_ID, stdlibArtifactId, "\${$KOTLIN_VERSION_PROPERTY}"), MavenArtifactScope.COMPILE, null, false, null) - if (testArtifactId != null) { - pom.addDependency(MavenId(GROUP_ID, testArtifactId, "\${$KOTLIN_VERSION_PROPERTY}"), MavenArtifactScope.TEST, null, false, null) - } - if (addJunit) { - // TODO currently it is always disabled: junit version selection could be shown in the configurator dialog - pom.addDependency(MavenId("junit", "junit", "4.12"), MavenArtifactScope.TEST, null, false, null) - } - - if (isSnapshot(version)) { - pom.addLibraryRepository(SNAPSHOT_REPOSITORY) - pom.addPluginRepository(SNAPSHOT_REPOSITORY) - } - if (isEap(version)) { - pom.addLibraryRepository(EAP_REPOSITORY) - pom.addPluginRepository(EAP_REPOSITORY) - } - - val plugin = pom.addPlugin(MavenId(GROUP_ID, MAVEN_PLUGIN_ID, "\${$KOTLIN_VERSION_PROPERTY}")) - createExecutions(pom, plugin, module) - - CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(file) + pom.addDependency(MavenId(GROUP_ID, stdlibArtifactId, "\${$KOTLIN_VERSION_PROPERTY}"), MavenArtifactScope.COMPILE, null, false, null) + if (testArtifactId != null) { + pom.addDependency(MavenId(GROUP_ID, testArtifactId, "\${$KOTLIN_VERSION_PROPERTY}"), MavenArtifactScope.TEST, null, false, null) } + if (addJunit) { + // TODO currently it is always disabled: junit version selection could be shown in the configurator dialog + pom.addDependency(MavenId("junit", "junit", "4.12"), MavenArtifactScope.TEST, null, false, null) + } + + if (isSnapshot(version)) { + pom.addLibraryRepository(SNAPSHOT_REPOSITORY) + pom.addPluginRepository(SNAPSHOT_REPOSITORY) + } + if (isEap(version)) { + pom.addLibraryRepository(EAP_REPOSITORY) + pom.addPluginRepository(EAP_REPOSITORY) + } + + val plugin = pom.addPlugin(MavenId(GROUP_ID, MAVEN_PLUGIN_ID, "\${$KOTLIN_VERSION_PROPERTY}")) + createExecutions(pom, plugin, module) + + CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(file) collector.addMessage(virtualFile.path + " was modified") } diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenPluginPhaseInspection.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenPluginPhaseInspection.kt index 766167e4623..ecf2ce70c2e 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenPluginPhaseInspection.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenPluginPhaseInspection.kt @@ -199,5 +199,4 @@ private fun MavenPlugin.isKotlinMavenPlugin() = groupId == KotlinMavenConfigurat private fun MavenDomGoal.isJsGoal() = rawText == PomFile.KotlinGoals.Js || rawText == PomFile.KotlinGoals.TestJs -private fun List.atPhase(phase: String) = filter { it.phase.stringValue == phase } private fun List.notAtPhase(phase: String) = filter { it.phase.stringValue != phase } diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenUnresolvedReferenceQuickFixProvider.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenUnresolvedReferenceQuickFixProvider.kt index 398cfe89f0c..b45a870bded 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenUnresolvedReferenceQuickFixProvider.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenUnresolvedReferenceQuickFixProvider.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.maven.inspections -import com.intellij.codeInsight.daemon.HighlightDisplayKey import com.intellij.codeInsight.daemon.QuickFixActionRegistrar import com.intellij.codeInsight.intention.IntentionAction import com.intellij.codeInsight.intention.LowPriorityAction @@ -25,8 +24,6 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.module.ModuleUtilCore import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ProjectRootManager -import com.intellij.openapi.util.Condition -import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiFile import com.intellij.psi.PsiManager import com.intellij.psi.SmartPsiElementPointer @@ -35,21 +32,14 @@ import org.jetbrains.idea.maven.dom.MavenDomUtil import org.jetbrains.idea.maven.indices.MavenArtifactSearchDialog import org.jetbrains.idea.maven.project.MavenProjectsManager import org.jetbrains.idea.maven.utils.MavenArtifactScope -import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.maven.PomFile -import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil -import org.jetbrains.kotlin.idea.quickfix.IntentionActionPriority -import org.jetbrains.kotlin.idea.quickfix.KotlinIntentionActionFactoryWithDelegate -import org.jetbrains.kotlin.idea.quickfix.QuickFixWithDelegateFactory import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.psi.KtImportDirective -import org.jetbrains.kotlin.psi.KtNameReferenceExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.KtTypeReference import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import org.jetbrains.kotlin.psi.psiUtil.getParentOfType -import java.util.* class KotlinMavenUnresolvedReferenceQuickFixProvider : UnresolvedReferenceQuickFixProvider() { override fun getReferenceClass(): Class = KtSimpleNameReference::class.java diff --git a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenArchetypesProviderTest.kt b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenArchetypesProviderTest.kt index b48b9bc2999..7d485175572 100644 --- a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenArchetypesProviderTest.kt +++ b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenArchetypesProviderTest.kt @@ -18,10 +18,9 @@ package org.jetbrains.kotlin.idea.maven import com.google.gson.JsonParser import org.jetbrains.idea.maven.model.MavenArchetype -import org.jetbrains.kotlin.idea.maven.KotlinMavenArchetypesProvider +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue import org.junit.Test - -import org.junit.Assert.* import java.io.File class KotlinMavenArchetypesProviderTest { diff --git a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/configuration/AbstractMavenConfigureProjectByChangingFileTest.kt b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/configuration/AbstractMavenConfigureProjectByChangingFileTest.kt index c4215fa193f..64f4ff67d9e 100644 --- a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/configuration/AbstractMavenConfigureProjectByChangingFileTest.kt +++ b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/configuration/AbstractMavenConfigureProjectByChangingFileTest.kt @@ -16,14 +16,12 @@ package org.jetbrains.kotlin.idea.maven.configuration +import com.intellij.openapi.command.WriteCommandAction import com.intellij.openapi.module.Module import com.intellij.psi.PsiFile import org.jetbrains.idea.maven.model.MavenConstants import org.jetbrains.kotlin.idea.configuration.AbstractConfigureProjectByChangingFileTest import org.jetbrains.kotlin.idea.configuration.NotificationMessageCollector -import org.jetbrains.kotlin.idea.maven.configuration.KotlinJavaMavenConfigurator -import org.jetbrains.kotlin.idea.maven.configuration.KotlinJavascriptMavenConfigurator -import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator abstract class AbstractMavenConfigureProjectByChangingFileTest : AbstractConfigureProjectByChangingFileTest() { fun doTestWithMaven(path: String) { @@ -37,6 +35,8 @@ abstract class AbstractMavenConfigureProjectByChangingFileTest : AbstractConfigu } override fun runConfigurator(module: Module, file: PsiFile, configurator: KotlinMavenConfigurator, version: String, collector: NotificationMessageCollector) { - configurator.changePomFile(module, file, version, collector) + WriteCommandAction.runWriteCommandAction(module.project) { + configurator.changePomFile(module, file, version, collector) + } } }