Add property for precise version of Java tracking in Gradle IC
The flag name is kotlin.incremental.usePreciseJavaTracking By default precise version is disabled #KT-17621 Fixed
This commit is contained in:
+6
-3
@@ -1,7 +1,7 @@
|
||||
package org.jetbrains.kotlin.gradle
|
||||
|
||||
import org.gradle.api.logging.LogLevel
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import org.gradle.api.logging.LogLevel
|
||||
import org.jetbrains.kotlin.gradle.util.*
|
||||
import org.junit.After
|
||||
import org.junit.AfterClass
|
||||
@@ -146,7 +146,9 @@ abstract class BaseGradleIT {
|
||||
val debug: Boolean = false,
|
||||
val freeCommandLineArgs: List<String> = emptyList(),
|
||||
val kotlinVersion: String = KOTLIN_VERSION,
|
||||
val kotlinDaemonDebugPort: Int? = null)
|
||||
val kotlinDaemonDebugPort: Int? = null,
|
||||
val usePreciseJavaTracking: Boolean? = null
|
||||
)
|
||||
|
||||
open inner class Project(
|
||||
val projectName: String,
|
||||
@@ -441,6 +443,7 @@ abstract class BaseGradleIT {
|
||||
|
||||
add("-Pkotlin_version=" + options.kotlinVersion)
|
||||
options.incremental?.let { add("-Pkotlin.incremental=$it") }
|
||||
options.usePreciseJavaTracking?.let { add("-Pkotlin.incremental.usePreciseJavaTracking=$it") }
|
||||
options.androidGradlePluginVersion?.let { add("-Pandroid_tools_version=$it")}
|
||||
if (options.debug) {
|
||||
add("-Dorg.gradle.debug=true")
|
||||
@@ -486,4 +489,4 @@ abstract class BaseGradleIT {
|
||||
}
|
||||
|
||||
private fun String.normalizePath() = replace("\\", "/")
|
||||
}
|
||||
}
|
||||
|
||||
+86
-39
@@ -88,44 +88,6 @@ open class A {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testModifyJavaInLib() {
|
||||
val project = Project("incrementalMultiproject", GRADLE_VERSION)
|
||||
project.build("build") {
|
||||
assertSuccessful()
|
||||
}
|
||||
|
||||
val javaClassJava = project.projectDir.getFileByName("JavaClass.java")
|
||||
javaClassJava.modify { it.replace("String getString", "Object getString") }
|
||||
|
||||
project.build("build") {
|
||||
assertSuccessful()
|
||||
val affectedSources = project.projectDir.getFilesByNames("JavaClassChild.kt", "useJavaClass.kt", "useJavaClassFooMethodUsage.kt")
|
||||
val relativePaths = project.relativize(affectedSources)
|
||||
assertCompiledKotlinSources(relativePaths, weakTesting = false)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testModifyTrackedJavaClassInLib() {
|
||||
val project = Project("incrementalMultiproject", GRADLE_VERSION)
|
||||
project.build("build") {
|
||||
assertSuccessful()
|
||||
}
|
||||
|
||||
val javaClassJava = project.projectDir.getFileByName("TrackedJavaClass.java")
|
||||
javaClassJava.modify { it.replace("String getString", "Object getString") }
|
||||
|
||||
project.build("build") {
|
||||
assertSuccessful()
|
||||
val affectedSources = project.projectDir.getFilesByNames(
|
||||
"TrackedJavaClassChild.kt", "useTrackedJavaClass.kt", "useTrackedJavaClassSameModule.kt"
|
||||
)
|
||||
val relativePaths = project.relativize(affectedSources)
|
||||
assertCompiledKotlinSources(relativePaths, weakTesting = false)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCleanBuildLib() {
|
||||
val project = Project("incrementalMultiproject", GRADLE_VERSION)
|
||||
@@ -231,4 +193,89 @@ open class A {
|
||||
assertCompiledKotlinSources(project.relativize(affectedSources), weakTesting = false)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class IncrementalJavaChangeDefaultIT : IncrementalCompilationJavaChangesBase(usePreciseJavaTracking = null) {
|
||||
@Test
|
||||
override fun testModifySignatureTrackedJavaInLib() {
|
||||
doTest(trackedJavaClass, changeSignature,
|
||||
expectedAffectedSources = listOf(
|
||||
"TrackedJavaClassChild.kt", "useTrackedJavaClass.kt", "useTrackedJavaClassFooMethodUsage.kt",
|
||||
"useTrackedJavaClassSameModule.kt"))
|
||||
}
|
||||
|
||||
@Test
|
||||
override fun testModifyBodyTrackedJavaInLib() {
|
||||
doTest(trackedJavaClass, changeBody,
|
||||
expectedAffectedSources = listOf(
|
||||
"TrackedJavaClassChild.kt", "useTrackedJavaClass.kt", "useTrackedJavaClassFooMethodUsage.kt",
|
||||
"useTrackedJavaClassSameModule.kt"
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
class IncrementalJavaChangePreciseIT : IncrementalCompilationJavaChangesBase(usePreciseJavaTracking = true) {
|
||||
@Test
|
||||
override fun testModifySignatureTrackedJavaInLib() {
|
||||
doTest(trackedJavaClass, changeSignature, expectedAffectedSources = listOf("TrackedJavaClassChild.kt", "useTrackedJavaClass.kt"))
|
||||
}
|
||||
|
||||
@Test
|
||||
override fun testModifyBodyTrackedJavaInLib() {
|
||||
doTest(trackedJavaClass, changeBody, expectedAffectedSources = listOf())
|
||||
}
|
||||
}
|
||||
|
||||
abstract class IncrementalCompilationJavaChangesBase(val usePreciseJavaTracking: Boolean?) : BaseGradleIT() {
|
||||
companion object {
|
||||
protected val GRADLE_VERSION = "2.10"
|
||||
}
|
||||
|
||||
override fun defaultBuildOptions(): BuildOptions =
|
||||
super.defaultBuildOptions().copy(withDaemon = true, incremental = true)
|
||||
|
||||
protected val trackedJavaClass = "TrackedJavaClass.java"
|
||||
private val javaClass = "JavaClass.java"
|
||||
protected val changeBody: (String)->String = { it.replace("Hello, World!", "Hello, World!!!!") }
|
||||
protected val changeSignature: (String)->String = { it.replace("String getString", "Object getString") }
|
||||
|
||||
@Test
|
||||
fun testModifySignatureJavaInLib() {
|
||||
doTest(javaClass, changeBody,
|
||||
expectedAffectedSources = listOf("JavaClassChild.kt", "useJavaClass.kt", "useJavaClassFooMethodUsage.kt")
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testModifyBodyJavaInLib() {
|
||||
doTest(javaClass, changeBody,
|
||||
expectedAffectedSources = listOf("JavaClassChild.kt", "useJavaClass.kt", "useJavaClassFooMethodUsage.kt")
|
||||
)
|
||||
}
|
||||
|
||||
abstract fun testModifySignatureTrackedJavaInLib()
|
||||
abstract fun testModifyBodyTrackedJavaInLib()
|
||||
|
||||
protected fun doTest(
|
||||
fileToModify: String,
|
||||
transformFile: (String)->String,
|
||||
expectedAffectedSources: Collection<String>
|
||||
) {
|
||||
val project = Project("incrementalMultiproject", GRADLE_VERSION)
|
||||
|
||||
val options = defaultBuildOptions().copy(usePreciseJavaTracking = usePreciseJavaTracking)
|
||||
project.build("build", options = options) {
|
||||
assertSuccessful()
|
||||
}
|
||||
|
||||
val javaClassJava = project.projectDir.getFileByName(fileToModify)
|
||||
javaClassJava.modify(transformFile)
|
||||
|
||||
project.build("build", options = options) {
|
||||
assertSuccessful()
|
||||
val affectedSources = project.projectDir.getFilesByNames(*expectedAffectedSources.toTypedArray())
|
||||
val relativePaths = project.relativize(affectedSources)
|
||||
assertCompiledKotlinSources(relativePaths, weakTesting = false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
package bar
|
||||
|
||||
private fun useTrackedJavaClass() {
|
||||
TrackedJavaClass().getString()
|
||||
TrackedJavaClass().foo()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user