Refactor version checking

This commit is contained in:
Alexey Tsvetkov
2016-08-10 19:13:48 +03:00
parent eea01f468b
commit 4ceec37bfe
4 changed files with 27 additions and 21 deletions
@@ -1,10 +1,11 @@
package org.jetbrains.kotlin.gradle.plugin
import org.gradle.api.Project
import org.gradle.api.tasks.compile.AbstractCompile
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.util.*
import kotlin.reflect.KMutableProperty1
fun mapKotlinTaskProperties(project: Project, task: AbstractCompile) {
fun mapKotlinTaskProperties(project: Project, task: KotlinCompile) {
propertyMappings.forEach { it.apply(project, task) }
val localPropertiesFile = project.rootProject.file("local.properties")
@@ -16,28 +17,28 @@ fun mapKotlinTaskProperties(project: Project, task: AbstractCompile) {
}
private val propertyMappings = listOf(
KotlinPropertyMapping("kotlin.incremental", "incremental", String::toBoolean)
KotlinPropertyMapping("kotlin.incremental", KotlinCompile::incremental, String::toBoolean)
)
private class KotlinPropertyMapping<T>(
private val projectPropName: String,
private val taskPropName: String,
private val taskProperty: KMutableProperty1<KotlinCompile, T>,
private val transform: (String) -> T
) {
fun apply(project: Project, task: AbstractCompile) {
fun apply(project: Project, task: KotlinCompile) {
if (!project.hasProperty(projectPropName)) return
setPropertyValue(task, project.property(projectPropName))
}
fun apply(properties: Properties, task: AbstractCompile) {
fun apply(properties: Properties, task: KotlinCompile) {
setPropertyValue(task, properties.getProperty(projectPropName))
}
private fun setPropertyValue(task: AbstractCompile, value: Any?) {
private fun setPropertyValue(task: KotlinCompile, value: Any?) {
if (value !is String) return
val transformedValue = transform(value) ?: return
task.setProperty(taskPropName, transformedValue)
taskProperty.set(task, transformedValue)
}
}
@@ -10,6 +10,7 @@ open class KotlinTasksProvider {
return project.tasks.create(name, KotlinCompile::class.java).apply {
friendTaskName = taskToFriendTaskMapper[this]
mapKotlinTaskProperties(project, this)
outputs.upToDateWhen { isCacheFormatUpToDate }
}
}
@@ -1,7 +1,5 @@
package org.jetbrains.kotlin.gradle
import org.jetbrains.kotlin.gradle.util.getFileByName
import org.jetbrains.kotlin.gradle.util.modify
import org.junit.Test
import java.io.File
import kotlin.test.assertNotEquals
@@ -43,25 +41,19 @@ class CacheVersionChangedIT : BaseGradleIT() {
val modifiedVersion = "777"
versionFile.writeText(modifiedVersion)
// gradle won't call kotlin task if no file is changed
val dummyKtFile = project.projectDir.getFileByName("Dummy.kt")
dummyKtFile.modify { it + " " }
project.build("build", options = options) {
assertSuccessful()
assertNotEquals(modifiedVersion, versionFile.readText(), "${versionFile.projectPath()} was not rewritten by build")
val mainDir = File(project.projectDir, "src/main")
val mainKotlinFiles = mainDir.walk().filter { it.isFile && it.extension.equals("kt", ignoreCase = true) }
val mainKotlinRelativePaths = mainKotlinFiles.map { it.projectPath() }.toList()
val mainKotlinRelativePaths = mainKotlinFiles.map(File::projectPath).toList()
assertCompiledKotlinSources(mainKotlinRelativePaths)
}
dummyKtFile.modify { it + " " }
project.build("build", options = options) {
assertSuccessful()
assertCompiledKotlinSources(listOf(dummyKtFile.projectPath()))
assertCompiledKotlinSources(listOf(), weakTesting = false)
}
}
}