KT-12558 Configure Kotlin in Project: Maven: Undo could revert changes in all poms

This commit is contained in:
Sergey Mashkov
2016-06-06 14:47:44 +03:00
parent f47fd46b7a
commit 49ccfa0ec4
6 changed files with 45 additions and 55 deletions
@@ -16,7 +16,10 @@
package org.jetbrains.kotlin.idea.maven 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.externalSystem.service.project.IdeModifiableModelsProvider
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.roots.OrderEnumerator 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.idea.maven.project.*
import org.jetbrains.jps.model.java.JavaSourceRootType import org.jetbrains.jps.model.java.JavaSourceRootType
import org.jetbrains.jps.model.module.JpsModuleSourceRootType import org.jetbrains.jps.model.module.JpsModuleSourceRootType
import org.jetbrains.kotlin.idea.util.projectStructure.findLibrary
import java.io.File import java.io.File
import java.util.* import java.util.*
@@ -80,18 +80,20 @@ abstract class KotlinMavenConfigurator protected constructor(private val stdlibA
dialog.show() dialog.show()
if (!dialog.isOK) return if (!dialog.isOK) return
val collector = createConfigureKotlinNotificationCollector(project) WriteCommandAction.runWriteCommandAction(project) {
for (module in excludeMavenChildrenModules(project, dialog.modulesToConfigure)) { val collector = createConfigureKotlinNotificationCollector(project)
val file = findModulePomFile(module) for (module in excludeMavenChildrenModules(project, dialog.modulesToConfigure)) {
if (file != null && canConfigureFile(file)) { val file = findModulePomFile(module)
changePomFile(module, file, dialog.kotlinVersion, collector) if (file != null && canConfigureFile(file)) {
OpenFileAction.openFile(file.virtualFile, project) changePomFile(module, file, dialog.kotlinVersion, collector)
} OpenFileAction.openFile(file.virtualFile, project)
else { }
showErrorMessage(project, "Cannot find pom.xml for module " + module.name) else {
showErrorMessage(project, "Cannot find pom.xml for module " + module.name)
}
} }
collector.showNotification()
} }
collector.showNotification()
} }
protected abstract fun isKotlinModule(module: Module): Boolean protected abstract fun isKotlinModule(module: Module): Boolean
@@ -112,33 +114,31 @@ abstract class KotlinMavenConfigurator protected constructor(private val stdlibA
return return
} }
WriteCommandAction.runWriteCommandAction(module.project) { val pom = PomFile(file as XmlFile)
val pom = PomFile(file as XmlFile) pom.addProperty(KOTLIN_VERSION_PROPERTY, version)
pom.addProperty(KOTLIN_VERSION_PROPERTY, version)
pom.addDependency(MavenId(GROUP_ID, stdlibArtifactId, "\${$KOTLIN_VERSION_PROPERTY}"), MavenArtifactScope.COMPILE, null, false, null) pom.addDependency(MavenId(GROUP_ID, stdlibArtifactId, "\${$KOTLIN_VERSION_PROPERTY}"), MavenArtifactScope.COMPILE, null, false, null)
if (testArtifactId != null) { if (testArtifactId != null) {
pom.addDependency(MavenId(GROUP_ID, testArtifactId, "\${$KOTLIN_VERSION_PROPERTY}"), MavenArtifactScope.TEST, null, false, 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<PsiFile>(file)
} }
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<PsiFile>(file)
collector.addMessage(virtualFile.path + " was modified") collector.addMessage(virtualFile.path + " was modified")
} }
@@ -199,5 +199,4 @@ private fun MavenPlugin.isKotlinMavenPlugin() = groupId == KotlinMavenConfigurat
private fun MavenDomGoal.isJsGoal() = rawText == PomFile.KotlinGoals.Js || rawText == PomFile.KotlinGoals.TestJs private fun MavenDomGoal.isJsGoal() = rawText == PomFile.KotlinGoals.Js || rawText == PomFile.KotlinGoals.TestJs
private fun List<MavenDomPluginExecution>.atPhase(phase: String) = filter { it.phase.stringValue == phase }
private fun List<MavenDomPluginExecution>.notAtPhase(phase: String) = filter { it.phase.stringValue != phase } private fun List<MavenDomPluginExecution>.notAtPhase(phase: String) = filter { it.phase.stringValue != phase }
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.idea.maven.inspections package org.jetbrains.kotlin.idea.maven.inspections
import com.intellij.codeInsight.daemon.HighlightDisplayKey
import com.intellij.codeInsight.daemon.QuickFixActionRegistrar import com.intellij.codeInsight.daemon.QuickFixActionRegistrar
import com.intellij.codeInsight.intention.IntentionAction import com.intellij.codeInsight.intention.IntentionAction
import com.intellij.codeInsight.intention.LowPriorityAction 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.module.ModuleUtilCore
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.ProjectRootManager 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.PsiFile
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import com.intellij.psi.SmartPsiElementPointer 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.indices.MavenArtifactSearchDialog
import org.jetbrains.idea.maven.project.MavenProjectsManager import org.jetbrains.idea.maven.project.MavenProjectsManager
import org.jetbrains.idea.maven.utils.MavenArtifactScope 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.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.references.KtSimpleNameReference
import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.psi.KtImportDirective import org.jetbrains.kotlin.psi.KtImportDirective
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression
import org.jetbrains.kotlin.psi.KtTypeReference import org.jetbrains.kotlin.psi.KtTypeReference
import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
import java.util.*
class KotlinMavenUnresolvedReferenceQuickFixProvider : UnresolvedReferenceQuickFixProvider<KtSimpleNameReference>() { class KotlinMavenUnresolvedReferenceQuickFixProvider : UnresolvedReferenceQuickFixProvider<KtSimpleNameReference>() {
override fun getReferenceClass(): Class<KtSimpleNameReference> = KtSimpleNameReference::class.java override fun getReferenceClass(): Class<KtSimpleNameReference> = KtSimpleNameReference::class.java
@@ -18,10 +18,9 @@ package org.jetbrains.kotlin.idea.maven
import com.google.gson.JsonParser import com.google.gson.JsonParser
import org.jetbrains.idea.maven.model.MavenArchetype 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.Test
import org.junit.Assert.*
import java.io.File import java.io.File
class KotlinMavenArchetypesProviderTest { class KotlinMavenArchetypesProviderTest {
@@ -16,14 +16,12 @@
package org.jetbrains.kotlin.idea.maven.configuration package org.jetbrains.kotlin.idea.maven.configuration
import com.intellij.openapi.command.WriteCommandAction
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import org.jetbrains.idea.maven.model.MavenConstants import org.jetbrains.idea.maven.model.MavenConstants
import org.jetbrains.kotlin.idea.configuration.AbstractConfigureProjectByChangingFileTest import org.jetbrains.kotlin.idea.configuration.AbstractConfigureProjectByChangingFileTest
import org.jetbrains.kotlin.idea.configuration.NotificationMessageCollector 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<KotlinMavenConfigurator>() { abstract class AbstractMavenConfigureProjectByChangingFileTest : AbstractConfigureProjectByChangingFileTest<KotlinMavenConfigurator>() {
fun doTestWithMaven(path: String) { 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) { 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)
}
} }
} }