From 34f04f348251728dad1545e2a5e6f0d09b4b3033 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Mon, 30 Jan 2017 23:40:32 +0300 Subject: [PATCH] Fix downgrading from 1.1 to 1.0.x in Gradle If @Input property is added in new plugin version and this property has a new type (a class/enum which is not presented in previous plugin) then downgrading leads to an exception, because Gradle tries to deserialize the property value from its caches, but the type of value does not exist. Workaround: add new String property. --- .../org/jetbrains/kotlin/gradle/BaseGradleIT.kt | 5 +++-- .../kotlin/gradle/KotlinGradlePluginIT.kt | 14 ++++++++++++++ .../testProject/kotlinProject/build.gradle | 1 + .../org/jetbrains/kotlin/gradle/tasks/Tasks.kt | 5 ++++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt index b6b8c60cb0a..9452e00b276 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt @@ -103,7 +103,8 @@ abstract class BaseGradleIT { val androidGradlePluginVersion: String? = null, val forceOutputToStdout: Boolean = false, val debug: Boolean = false, - val freeCommandLineArgs: List = emptyList()) + val freeCommandLineArgs: List = emptyList(), + val kotlinVersion: String = KOTLIN_VERSION) open inner class Project( val projectName: String, @@ -302,7 +303,7 @@ abstract class BaseGradleIT { add(if (options.withDaemon) "--daemon" else "--no-daemon") } - add("-Pkotlin_version=" + KOTLIN_VERSION) + add("-Pkotlin_version=" + options.kotlinVersion) options.incremental?.let { add("-Pkotlin.incremental=$it") } options.androidGradlePluginVersion?.let { add("-Pandroid_tools_version=$it")} if (options.debug) { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index 1ef9e87a8dd..48741e22ef3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -365,4 +365,18 @@ class KotlinGradleIT: BaseGradleIT() { assertSuccessful() } } + + @Test + fun testDowngradeTo106() { + val project = Project("kotlinProject", GRADLE_VERSION) + val options = defaultBuildOptions().copy(incremental = true, withDaemon = false) + + project.build("assemble", options = options) { + assertSuccessful() + } + + project.build("clean", "assemble", options = options.copy(kotlinVersion = "1.0.6")) { + assertSuccessful() + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlinProject/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlinProject/build.gradle index 57f99eef42c..645bfeda307 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlinProject/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlinProject/build.gradle @@ -1,6 +1,7 @@ buildscript { repositories { mavenLocal() + mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 17494371482..4f635a8ba8a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -79,7 +79,10 @@ abstract class AbstractKotlinCompile() : AbstractCo internal var coroutinesFromGradleProperties: Coroutines? = null // Input is needed to force rebuild even if source files are not changed @get:Input - val coroutines: Coroutines + internal val coroutinesStr: String + get() = coroutines.name + + private val coroutines: Coroutines get() = kotlinExt.experimental.coroutines ?: coroutinesFromGradleProperties ?: Coroutines.DEFAULT