From 0a5db2fea401b97be325b826346abf3ab213243c Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Thu, 31 Mar 2016 19:28:27 +0300 Subject: [PATCH] Load kotlin.incremental from local.properties file too --- .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 3 ++- .../kotlin/gradle/plugin/KotlinProperties.kt | 21 ++++++++++++++++--- .../kotlin/gradle/KotlinGradlePluginIT.kt | 14 +++++++++++++ 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 40a5504bf4f..d5c55f0c2f7 100644 --- a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -53,6 +53,7 @@ const val ANNOTATIONS_PLUGIN_NAME = "org.jetbrains.kotlin.kapt" const val KOTLIN_BUILD_DIR_NAME = "kotlin" const val CACHES_DIR_NAME = "caches" const val DIRTY_SOURCES_FILE_NAME = "dirty-sources.txt" +const val USING_EXPERIMENTAL_INCREMENTAL_MESSAGE = "Using experimental kotlin incremental compilation" abstract class AbstractKotlinCompile() : AbstractCompile() { abstract protected val compiler: CLICompiler @@ -360,7 +361,7 @@ open class KotlinCompile() : AbstractKotlinCompile() { return } - logger.warn("Using experimental kotlin incremental compilation") + logger.warn(USING_EXPERIMENTAL_INCREMENTAL_MESSAGE) anyClassesCompiled = false // TODO: decide what to do if no files are considered dirty - rebuild or skip the module var (sourcesToCompile, isIncrementalDecided) = calculateSourcesToCompile() 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 index f69c0fc8a1f..c713ad45bdd 100644 --- 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 @@ -2,10 +2,16 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.Project import org.gradle.api.tasks.compile.AbstractCompile +import java.util.* fun mapKotlinTaskProperties(project: Project, task: AbstractCompile) { - for (mapping in propertyMappings) { - mapping.apply(project, task) + propertyMappings.forEach { it.apply(project, task) } + + val localPropertiesFile = project.rootProject.file("local.properties") + if (localPropertiesFile.isFile) { + val properties = Properties() + properties.load(localPropertiesFile.inputStream()) + propertyMappings.forEach { it.apply(properties, task) } } } @@ -21,7 +27,16 @@ private class KotlinPropertyMapping( fun apply(project: Project, task: AbstractCompile) { if (!project.hasProperty(projectPropName)) return - val value = project.property(projectPropName) as? String ?: return + setPropertyValue(task, project.property(projectPropName)) + } + + fun apply(properties: Properties, task: AbstractCompile) { + setPropertyValue(task, properties.getProperty(projectPropName)) + } + + private fun setPropertyValue(task: AbstractCompile, value: Any?) { + if (value !is String) return + val transformedValue = transform(value) ?: return task.setProperty(taskPropName, transformedValue) } 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 7bc57395a0d..4cfc6853bbb 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 @@ -2,6 +2,7 @@ package org.jetbrains.kotlin.gradle import org.gradle.api.logging.LogLevel import org.jetbrains.kotlin.gradle.plugin.CleanUpBuildListener +import org.jetbrains.kotlin.gradle.tasks.USING_EXPERIMENTAL_INCREMENTAL_MESSAGE import org.junit.Test import java.io.File import kotlin.test.assertTrue @@ -269,4 +270,17 @@ class KotlinGradleIT: BaseGradleIT() { assertFileExists("build/classes/main/example/TestClassCustomized.class") } } + + @Test + fun testIncrementalPropertyFromLocalPropertiesFile() { + val project = Project("kotlinProject", "2.10") + project.setupWorkingDir() + + val localPropertyFile = File(project.projectDir, "local.properties") + localPropertyFile.writeText("kotlin.incremental=true") + + project.build("build") { + assertContains(USING_EXPERIMENTAL_INCREMENTAL_MESSAGE) + } + } } \ No newline at end of file