From b5bd5942e7c39d20335c98673ba1e1441c5cfe0c Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 18 Dec 2017 20:43:33 +0300 Subject: [PATCH] Kotlin Facet: Do not auto-advance version in imported projects #KT-21879 Fixed --- .../KotlinGradleSourceSetDataService.kt | 2 ++ .../idea/codeInsight/gradle/GradleFacetImportTest.kt | 12 ++++++++++++ .../kotlin/idea/maven/KotlinMavenImporter.kt | 1 + .../kotlin/idea/maven/KotlinMavenImporterTest.kt | 4 ++++ .../org/jetbrains/kotlin/idea/facet/facetUtils.kt | 7 +++++++ 5 files changed, 26 insertions(+) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt index 7e16bf3eca3..fd534709b00 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt @@ -212,6 +212,8 @@ private fun configureFacetByGradleModule( testOutputPath = getExplicitTestOutputPath(moduleNode, platformKind) } + kotlinFacet.noVersionAutoAdvance() + return kotlinFacet } diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt index 68b5aa9dd29..e9797cc4b48 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt @@ -89,6 +89,8 @@ class GradleFacetImportTest : GradleImportingTestCase() { with (facetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) + Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) + Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertEquals(TargetPlatformKind.Jvm[JvmTarget.JVM_1_8], targetPlatformKind) Assert.assertEquals("1.7", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals("-Xdump-declarations-to=tmp -Xsingle-module", @@ -97,6 +99,8 @@ class GradleFacetImportTest : GradleImportingTestCase() { with (testFacetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString) + Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) + Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertEquals(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6], targetPlatformKind) Assert.assertEquals("1.6", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals("-Xdump-declarations-to=tmpTest", @@ -465,6 +469,8 @@ compileTestKotlin { with (facetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) + Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) + Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertEquals(TargetPlatformKind.JavaScript, targetPlatformKind) with(compilerArguments as K2JSCompilerArguments) { Assert.assertEquals(true, sourceMap) @@ -477,6 +483,8 @@ compileTestKotlin { with (testFacetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString) + Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) + Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertEquals(TargetPlatformKind.JavaScript, targetPlatformKind) with(compilerArguments as K2JSCompilerArguments) { Assert.assertEquals(false, sourceMap) @@ -1713,6 +1721,8 @@ compileTestKotlin { with (facetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString) + Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) + Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertEquals(TargetPlatformKind.Common, targetPlatformKind) Assert.assertEquals("my/classpath", (compilerArguments as K2MetadataCompilerArguments).classpath) Assert.assertEquals("my/destination", (compilerArguments as K2MetadataCompilerArguments).destination) @@ -1721,6 +1731,8 @@ compileTestKotlin { with (facetSettings("project_test")) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString) + Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) + Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertEquals(TargetPlatformKind.Common, targetPlatformKind) Assert.assertEquals("my/test/classpath", (compilerArguments as K2MetadataCompilerArguments).classpath) Assert.assertEquals("my/test/destination", (compilerArguments as K2MetadataCompilerArguments).destination) 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 0c805e10e94..8b5042fe057 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 @@ -207,6 +207,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_ } MavenProjectImportHandler.getInstances(module.project).forEach { it(kotlinFacet, mavenProject) } setImplementedModuleName(kotlinFacet, mavenProject, module) + kotlinFacet.noVersionAutoAdvance() } private fun detectPlatform(mavenProject: MavenProject) = detectPlatformByExecutions(mavenProject) ?: diff --git a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt index f08d7410832..0e331ba2f44 100644 --- a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt +++ b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt @@ -460,6 +460,8 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { Assert.assertEquals("1.1", compilerArguments!!.languageVersion) Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertEquals("1.0", compilerArguments!!.apiVersion) + Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) + Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertEquals(true, compilerArguments!!.suppressWarnings) Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) Assert.assertEquals("JVM 1.8", targetPlatformKind!!.description) @@ -586,6 +588,8 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { Assert.assertEquals("1.1", compilerArguments!!.languageVersion) Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertEquals("1.0", compilerArguments!!.apiVersion) + Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) + Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertEquals(true, compilerArguments!!.suppressWarnings) Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) Assert.assertTrue(targetPlatformKind is TargetPlatformKind.JavaScript) diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt index 8f0e904a146..4ccbe1617cc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt @@ -228,6 +228,13 @@ fun KotlinFacet.configureFacet( } } +fun KotlinFacet.noVersionAutoAdvance() { + configuration.settings.compilerArguments?.let { + it.autoAdvanceLanguageVersion = false + it.autoAdvanceApiVersion = false + } +} + // "Primary" fields are written to argument beans directly and thus not presented in the "additional arguments" string // Update these lists when facet/project settings UI changes val commonUIExposedFields = listOf(CommonCompilerArguments::languageVersion.name,