From 163cef6457baf52e1386e22759e9cd764e6aac44 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 26 Jan 2017 12:34:44 +0100 Subject: [PATCH] Configuring project with Maven adds kotlin-stdlib-jre7 or kotlin-stdlib-jre8 if the selected JDK is of a high enough version #KT-15712 Fixed --- .../src/org/jetbrains/kotlin/idea/maven/PomFile.kt | 3 ++- .../maven/configuration/KotlinJavaMavenConfigurator.kt | 8 +++++++- .../configuration/KotlinJavascriptMavenConfigurator.kt | 4 +++- .../idea/maven/configuration/KotlinMavenConfigurator.kt | 6 +++--- .../testData/configurator/jvm/fixExisting/pom_after.xml | 2 +- .../testData/configurator/jvm/libraryMissed/pom_after.xml | 2 +- .../testData/configurator/jvm/pluginMissed/pom_after.xml | 2 +- .../testData/configurator/jvm/simpleProject/pom_after.xml | 2 +- .../configurator/jvm/simpleProjectEAP/pom_after.xml | 2 +- .../configurator/jvm/simpleProjectRc/pom_after.xml | 2 +- .../configurator/jvm/simpleProjectSnapshot/pom_after.xml | 2 +- 11 files changed, 22 insertions(+), 13 deletions(-) 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 298cb9a8e48..ac829af6b71 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 @@ -99,7 +99,7 @@ class PomFile(val xmlFile: XmlFile) { require(artifact.artifactId != null) { "artifactId shouldn't be null" } ensureDependencies() - val versionless = artifact.withNoVersion() + val versionless = artifact.withNoVersion().withoutJreSuffix() val dependency = domModel.dependencies.dependencies.firstOrNull { it.matches(versionless) } ?: domModel.dependencies.addDependency() dependency.groupId.stringValue = artifact.groupId dependency.artifactId.stringValue = artifact.artifactId @@ -367,6 +367,7 @@ class PomFile(val xmlFile: XmlFile) { && (artifact.version == null || version.stringValue == artifact.version) private fun MavenId.withNoVersion() = MavenId(groupId, artifactId, null) + private fun MavenId.withoutJreSuffix() = MavenId(groupId, artifactId?.substringBeforeLast("-jre"), null) private fun MavenDomElement.createChildTag(name: String, value: String? = null) = xmlTag.createChildTag(name, value) private fun XmlTag.createChildTag(name: String, value: String? = null) = createChildTag(name, namespace, value, false)!! diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavaMavenConfigurator.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavaMavenConfigurator.kt index 36e9baee550..28b58b0454c 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavaMavenConfigurator.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavaMavenConfigurator.kt @@ -17,14 +17,16 @@ package org.jetbrains.kotlin.idea.maven.configuration import com.intellij.openapi.module.Module +import com.intellij.openapi.roots.ModuleRootManager import org.jetbrains.idea.maven.dom.model.MavenDomPlugin import org.jetbrains.kotlin.idea.configuration.hasKotlinJvmRuntimeInScope import org.jetbrains.kotlin.idea.maven.PomFile import org.jetbrains.kotlin.idea.versions.MAVEN_STDLIB_ID +import org.jetbrains.kotlin.idea.versions.getStdlibArtifactId import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform -class KotlinJavaMavenConfigurator : KotlinMavenConfigurator(MAVEN_STDLIB_ID, KotlinJavaMavenConfigurator.TEST_LIB_ID, false, KotlinJavaMavenConfigurator.NAME, KotlinJavaMavenConfigurator.PRESENTABLE_TEXT) { +class KotlinJavaMavenConfigurator : KotlinMavenConfigurator(KotlinJavaMavenConfigurator.TEST_LIB_ID, false, KotlinJavaMavenConfigurator.NAME, KotlinJavaMavenConfigurator.PRESENTABLE_TEXT) { override fun isKotlinModule(module: Module): Boolean { return hasKotlinJvmRuntimeInScope(module) @@ -34,6 +36,10 @@ class KotlinJavaMavenConfigurator : KotlinMavenConfigurator(MAVEN_STDLIB_ID, Kot return goalName == PomFile.KotlinGoals.Compile } + override fun getStdlibArtifactId(module: Module): String { + return getStdlibArtifactId(ModuleRootManager.getInstance(module).sdk) + } + override fun createExecutions(pomFile: PomFile, kotlinPlugin: MavenDomPlugin, module: Module) { createExecution(pomFile, kotlinPlugin, PomFile.DefaultPhases.Compile, PomFile.KotlinGoals.Compile, module, false) createExecution(pomFile, kotlinPlugin, PomFile.DefaultPhases.TestCompile, PomFile.KotlinGoals.TestCompile, module, true) diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavascriptMavenConfigurator.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavascriptMavenConfigurator.kt index 61efa679952..52a8e59c075 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavascriptMavenConfigurator.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinJavascriptMavenConfigurator.kt @@ -24,7 +24,9 @@ import org.jetbrains.kotlin.idea.versions.MAVEN_JS_STDLIB_ID import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.resolve.TargetPlatform -class KotlinJavascriptMavenConfigurator : KotlinMavenConfigurator(MAVEN_JS_STDLIB_ID, null, false, KotlinJavascriptMavenConfigurator.NAME, KotlinJavascriptMavenConfigurator.PRESENTABLE_TEXT) { +class KotlinJavascriptMavenConfigurator : KotlinMavenConfigurator(null, false, KotlinJavascriptMavenConfigurator.NAME, KotlinJavascriptMavenConfigurator.PRESENTABLE_TEXT) { + + override fun getStdlibArtifactId(module: Module) = MAVEN_JS_STDLIB_ID override fun isKotlinModule(module: Module): Boolean { return hasKotlinJsRuntimeInScope(module) 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 032b0db3a91..d183decdc79 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 @@ -43,8 +43,7 @@ import org.jetbrains.kotlin.idea.maven.excludeMavenChildrenModules import org.jetbrains.kotlin.idea.maven.kotlinPluginId abstract class KotlinMavenConfigurator - protected constructor(private val stdlibArtifactId: String, - private val testArtifactId: String?, + protected constructor(private val testArtifactId: String?, private val addJunit: Boolean, override val name: String, override val presentableText: String) : KotlinProjectConfigurator { @@ -103,6 +102,7 @@ abstract class KotlinMavenConfigurator protected abstract fun isRelevantGoal(goalName: String): Boolean protected abstract fun createExecutions(pomFile: PomFile, kotlinPlugin: MavenDomPlugin, module: Module) + protected abstract fun getStdlibArtifactId(module: Module): String fun changePomFile( module: Module, @@ -120,7 +120,7 @@ abstract class KotlinMavenConfigurator 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) + pom.addDependency(MavenId(GROUP_ID, getStdlibArtifactId(module), "\${$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) } diff --git a/idea/idea-maven/testData/configurator/jvm/fixExisting/pom_after.xml b/idea/idea-maven/testData/configurator/jvm/fixExisting/pom_after.xml index 84d3a090cee..6e8c30f37fd 100644 --- a/idea/idea-maven/testData/configurator/jvm/fixExisting/pom_after.xml +++ b/idea/idea-maven/testData/configurator/jvm/fixExisting/pom_after.xml @@ -13,7 +13,7 @@ org.jetbrains.kotlin - kotlin-stdlib + kotlin-stdlib-jre7 ${kotlin.version} diff --git a/idea/idea-maven/testData/configurator/jvm/libraryMissed/pom_after.xml b/idea/idea-maven/testData/configurator/jvm/libraryMissed/pom_after.xml index 7a2200793c1..c7a784fb0ee 100644 --- a/idea/idea-maven/testData/configurator/jvm/libraryMissed/pom_after.xml +++ b/idea/idea-maven/testData/configurator/jvm/libraryMissed/pom_after.xml @@ -40,7 +40,7 @@ org.jetbrains.kotlin - kotlin-stdlib + kotlin-stdlib-jre7 ${kotlin.version} diff --git a/idea/idea-maven/testData/configurator/jvm/pluginMissed/pom_after.xml b/idea/idea-maven/testData/configurator/jvm/pluginMissed/pom_after.xml index 8989bf8cc30..399034abd02 100644 --- a/idea/idea-maven/testData/configurator/jvm/pluginMissed/pom_after.xml +++ b/idea/idea-maven/testData/configurator/jvm/pluginMissed/pom_after.xml @@ -13,7 +13,7 @@ org.jetbrains.kotlin - kotlin-stdlib + kotlin-stdlib-jre7 ${kotlin.version} diff --git a/idea/idea-maven/testData/configurator/jvm/simpleProject/pom_after.xml b/idea/idea-maven/testData/configurator/jvm/simpleProject/pom_after.xml index 16c5f820f96..db9e5f1e1de 100644 --- a/idea/idea-maven/testData/configurator/jvm/simpleProject/pom_after.xml +++ b/idea/idea-maven/testData/configurator/jvm/simpleProject/pom_after.xml @@ -15,7 +15,7 @@ org.jetbrains.kotlin - kotlin-stdlib + kotlin-stdlib-jre7 ${kotlin.version} diff --git a/idea/idea-maven/testData/configurator/jvm/simpleProjectEAP/pom_after.xml b/idea/idea-maven/testData/configurator/jvm/simpleProjectEAP/pom_after.xml index 7deefcb3d8c..24975a87cba 100644 --- a/idea/idea-maven/testData/configurator/jvm/simpleProjectEAP/pom_after.xml +++ b/idea/idea-maven/testData/configurator/jvm/simpleProjectEAP/pom_after.xml @@ -15,7 +15,7 @@ org.jetbrains.kotlin - kotlin-stdlib + kotlin-stdlib-jre7 ${kotlin.version} diff --git a/idea/idea-maven/testData/configurator/jvm/simpleProjectRc/pom_after.xml b/idea/idea-maven/testData/configurator/jvm/simpleProjectRc/pom_after.xml index dc699aec285..c940822ae6a 100644 --- a/idea/idea-maven/testData/configurator/jvm/simpleProjectRc/pom_after.xml +++ b/idea/idea-maven/testData/configurator/jvm/simpleProjectRc/pom_after.xml @@ -15,7 +15,7 @@ org.jetbrains.kotlin - kotlin-stdlib + kotlin-stdlib-jre7 ${kotlin.version} diff --git a/idea/idea-maven/testData/configurator/jvm/simpleProjectSnapshot/pom_after.xml b/idea/idea-maven/testData/configurator/jvm/simpleProjectSnapshot/pom_after.xml index 9630418dc36..1026114e64b 100644 --- a/idea/idea-maven/testData/configurator/jvm/simpleProjectSnapshot/pom_after.xml +++ b/idea/idea-maven/testData/configurator/jvm/simpleProjectSnapshot/pom_after.xml @@ -15,7 +15,7 @@ org.jetbrains.kotlin - kotlin-stdlib + kotlin-stdlib-jre7 ${kotlin.version}