diff --git a/Changelog.md b/Changelog.md index 52665b2752e..2b4840ce1b9 100644 --- a/Changelog.md +++ b/Changelog.md @@ -35,6 +35,9 @@ - Show error message when debug info for some local variable is corrupted - [KT-11638](https://youtrack.jetbrains.com/issue/KT-11638) Fixed hashCode() implementation in "Generate equals/hashCode" action +### Tools.Gradle +- Added project property 'kotlin.incremental' + ## 1.0.1-2 ### Compiler diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index f969ebb1408..2a78c96292e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -106,6 +106,7 @@ abstract class KotlinSourceSetProcessor( javaBasePlugin.configureForSourceSet(sourceSet, kotlinTask) kotlinTask.description = taskDescription kotlinTask.source(kotlinDirSet) + mapKotlinTaskProperties(project, kotlinTask) } } @@ -376,6 +377,7 @@ open class KotlinAndroidPlugin @Inject constructor(val scriptHandler: ScriptHand val kotlinTaskName = "compile${variantDataName.capitalize()}Kotlin" val kotlinTask = tasksProvider.createKotlinJVMTask(project, kotlinTaskName) + mapKotlinTaskProperties(project, kotlinTask) kotlinTask.extensions.extraProperties.set("defaultModuleName", "${project.name}-$kotlinTaskName") if (kotlinOptions != null) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt new file mode 100644 index 00000000000..a8f091358d5 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt @@ -0,0 +1,28 @@ +package org.jetbrains.kotlin.gradle.plugin + +import org.gradle.api.Project +import org.gradle.api.tasks.compile.AbstractCompile + +fun mapKotlinTaskProperties(project: Project, task: AbstractCompile) { + for (mapping in propertyMappings) { + mapping.apply(project, task) + } +} + +private val propertyMappings = listOf( + KotlinPropertyMapping("kotlin.incremental", "experimentalIncremental", String::toBoolean) +) + +private class KotlinPropertyMapping( + private val projectPropName: String, + private val taskPropName: String, + private val transform: (String) -> T +) { + fun apply(project: Project, task: AbstractCompile) { + if (!project.hasProperty(projectPropName)) return + + val value = project.property(projectPropName) as? String ?: return + val transformedValue = transform(value) ?: return + task.setProperty(taskPropName, transformedValue) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt index b49de931737..575554998e2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt @@ -70,6 +70,7 @@ abstract class BaseGradleIT { data class BuildOptions( val withDaemon: Boolean = false, val daemonOptionSupported: Boolean = true, + val incremental: Boolean? = null, /** * @see [ThreadTracker] */ @@ -201,8 +202,8 @@ abstract class BaseGradleIT { private fun Project.createBuildCommand(params: Array, options: BuildOptions): List = createGradleCommand(createGradleTailParameters(options, params)) - protected fun Project.createGradleTailParameters(options: BuildOptions, tasks: Array = arrayOf()): List = - tasks.toMutableList().apply { + private fun Project.createGradleTailParameters(options: BuildOptions, params: Array = arrayOf()): List = + params.toMutableList().apply { add("--stacktrace") add("--${minLogLevel.name.toLowerCase()}") if (options.daemonOptionSupported) { @@ -213,6 +214,8 @@ abstract class BaseGradleIT { if (options.assertThreadLeaks) { add("-P${ThreadTracker.ASSERT_THREAD_LEAKS_PROPERTY}=true") } + options.incremental?.let { add("-Pkotlin.incremental=$it") } + } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index e127e4f7463..7bc57395a0d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -127,13 +127,14 @@ class KotlinGradleIT: BaseGradleIT() { @Test fun testSimpleMultiprojectIncremental() { - fun Project.modify(body: Project.() -> Unit): Project { this.body() return this } - Project("multiprojectWithDependency", "1.6").build("-PincrementalOption=true", "assemble") { + val incremental = defaultBuildOptions().copy(incremental = true) + + Project("multiprojectWithDependency", "1.6").build("assemble", options = incremental) { assertSuccessful() assertReportExists("projA") assertContains(":projA:compileKotlin") @@ -148,7 +149,7 @@ class KotlinGradleIT: BaseGradleIT() { assertTrue { oldSrc.exists() } assertTrue { newSrc.exists() } newSrc.copyTo(oldSrc, overwrite = true) - }.build("-PincrementalOption=true", "assemble") { + }.build("assemble", options = incremental) { assertSuccessful() assertReportExists("projA") assertContains(":projA:compileKotlin") diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginJpsParametrizedCLIOnly.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginJpsParametrizedCLIOnly.kt index 84682d6c5f0..1ae618526da 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginJpsParametrizedCLIOnly.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginJpsParametrizedCLIOnly.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlin.gradle -import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.Parameterized @@ -24,7 +23,8 @@ class KotlinGradlePluginJpsParametrizedCLIOnly : BaseIncrementalGradleIT() { JpsTestProject(jpsResourcesPath, relativePath).performAndAssertBuildStages(weakTesting = true) } - override fun defaultBuildOptions(): BuildOptions = BuildOptions(withDaemon = true) + override fun defaultBuildOptions(): BuildOptions = + BuildOptions(withDaemon = true, incremental = true) companion object { diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/incrementalGradleProject/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/incrementalGradleProject/build.gradle index 5c250b4ed92..8fcdd49188d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/resources/incrementalGradleProject/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/incrementalGradleProject/build.gradle @@ -22,10 +22,6 @@ sourceSets { } } -compileKotlin { - experimentalIncremental = true -} - repositories { maven { url 'file://' + pathToKotlinPlugin diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/build.gradle index e34e4a3ccbb..5ec3dc08aac 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/build.gradle @@ -7,7 +7,3 @@ repositories { } } -compileKotlin { - experimentalIncremental = incrementalOption -} - diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projB/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projB/build.gradle index 239cabdaa45..fc7a8d5d75f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projB/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projB/build.gradle @@ -9,8 +9,4 @@ repositories { dependencies { compile project(':projA') -} - -compileKotlin { - experimentalIncremental = incrementalOption -} +} \ No newline at end of file