diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt index 265661e9b2d..72c88ef6b21 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt @@ -41,6 +41,9 @@ import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType import java.util.* +fun kotlinPluginId(version: String?) = MavenId(KotlinMavenConfigurator.GROUP_ID, KotlinMavenConfigurator.MAVEN_PLUGIN_ID, version) + + class PomFile(val xmlFile: XmlFile) { val domModel = MavenDomUtil.getMavenDomProjectModel(xmlFile.project, xmlFile.virtualFile) ?: throw IllegalStateException("No DOM model found for pom ${xmlFile.name}") private val nodesByName = HashMap() @@ -117,13 +120,13 @@ class PomFile(val xmlFile: XmlFile) { return dependency } - fun addKotlinPlugin(version: String?) = addPlugin(MavenId(KotlinMavenConfigurator.GROUP_ID, KotlinMavenConfigurator.MAVEN_PLUGIN_ID, version)) + fun addKotlinPlugin(version: String?) = addPlugin(kotlinPluginId(version)) fun addPlugin(artifact: MavenId): MavenDomPlugin { ensureBuild() val groupArtifact = artifact.withNoVersion() - val plugin = domModel.build.plugins.plugins.firstOrNull { it.matches(groupArtifact) } ?: domModel.build.plugins.addPlugin() + val plugin = findPlugin(groupArtifact) ?: domModel.build.plugins.addPlugin() plugin.groupId.stringValue = artifact.groupId plugin.artifactId.stringValue = artifact.artifactId if (artifact.version != null) { @@ -134,6 +137,8 @@ class PomFile(val xmlFile: XmlFile) { return plugin } + fun findPlugin(groupArtifact: MavenId) = domModel.build.plugins.plugins.firstOrNull { it.matches(groupArtifact) } + fun isPluginAfter(plugin: MavenDomPlugin, referencePlugin: MavenDomPlugin): Boolean { require(plugin.parent === referencePlugin.parent) { "Plugins should be siblings" } require(plugin !== referencePlugin) 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 422b1b06877..e70b739d527 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 @@ -33,7 +33,6 @@ import com.intellij.psi.xml.XmlFile import org.jetbrains.idea.maven.dom.MavenDomUtil import org.jetbrains.idea.maven.dom.model.MavenDomPlugin import org.jetbrains.idea.maven.model.MavenId -import org.jetbrains.idea.maven.project.MavenProject import org.jetbrains.idea.maven.project.MavenProjectsManager import org.jetbrains.idea.maven.utils.MavenArtifactScope import org.jetbrains.kotlin.idea.KotlinPluginUtil @@ -41,6 +40,7 @@ import org.jetbrains.kotlin.idea.configuration.* import org.jetbrains.kotlin.idea.framework.ui.ConfigureDialogWithModulesAndVersion import org.jetbrains.kotlin.idea.maven.PomFile import org.jetbrains.kotlin.idea.maven.excludeMavenChildrenModules +import org.jetbrains.kotlin.idea.maven.kotlinPluginId abstract class KotlinMavenConfigurator protected constructor(private val stdlibArtifactId: String, @@ -57,23 +57,24 @@ abstract class KotlinMavenConfigurator if (psi == null || !psi.isValid || psi !is XmlFile - || psi.virtualFile == null - || MavenDomUtil.getMavenDomProjectModel(module.project, psi.virtualFile) == null) { + || psi.virtualFile == null) { return ConfigureKotlinStatus.BROKEN } - val mavenProject = MavenProjectsManager.getInstance(module.project).findProject(module) ?: return ConfigureKotlinStatus.BROKEN + val pom = PomFile(psi) - if (isKotlinModule(module) && hasKotlinPlugin(mavenProject)) { + if (isKotlinModule(module) && hasKotlinPlugin(pom)) { return ConfigureKotlinStatus.CONFIGURED } return ConfigureKotlinStatus.CAN_BE_CONFIGURED } - private fun hasKotlinPlugin(mavenProject: MavenProject): Boolean { - val plugin = mavenProject.findPlugin(GROUP_ID, MAVEN_PLUGIN_ID) ?: return false + private fun hasKotlinPlugin(pom: PomFile): Boolean { + val plugin = pom.findPlugin(kotlinPluginId(null)) ?: return false - return plugin.executions?.any { it.goals?.any { it != null && isRelevantGoal(it) } ?: false } ?: false + return plugin.executions.executions.any { + it.goals.goals.any { isRelevantGoal(it.stringValue ?: "") } + } } override fun configure(project: Project, excludeModules: Collection) {