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
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.*
@@ -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<PsiFile>(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<PsiFile>(file)
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 List<MavenDomPluginExecution>.atPhase(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
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<KtSimpleNameReference>() {
override fun getReferenceClass(): Class<KtSimpleNameReference> = KtSimpleNameReference::class.java
@@ -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 {
@@ -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<KotlinMavenConfigurator>() {
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)
}
}
}