Test that javac is loaded once when worker is reused

This commit is contained in:
Alexey Tsvetkov
2018-12-11 20:11:58 +03:00
parent 6c627fa5c1
commit 0ea7716eb1
9 changed files with 84 additions and 0 deletions
@@ -42,6 +42,20 @@ abstract class Kapt3BaseIT : BaseGradleIT() {
class Kapt3WorkersIT : Kapt3IT() {
override fun kaptOptions(): KaptOptions =
super.kaptOptions().copy(useWorkers = true)
@Test
fun testJavacIsLoadedOnce() {
// todo: actual minimum version is 4.3, but I had some problems. Investigate later.
// todo: consider minimum version for the whole class, with Gradle <4.3 all tests duplicate tests without workers
val gradleVersionRequired = GradleVersionRequired.AtLeast("4.5.1")
val project =
Project("javacIsLoadedOnce", directoryPrefix = "kapt2", gradleVersionRequirement = gradleVersionRequired)
project.build("build") {
assertSuccessful()
assertSubstringCount("Loaded com.sun.tools.javac.util.Context from", 1)
}
}
}
open class Kapt3IT : Kapt3BaseIT() {
@@ -0,0 +1,16 @@
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
subprojects {
repositories {
mavenLocal()
mavenCentral()
}
}
@@ -0,0 +1,2 @@
kapt.verbose=true
kapt.workers.log.classloading=true
@@ -0,0 +1,8 @@
apply plugin: "kotlin"
apply plugin: "kotlin-kapt"
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.jetbrains.kotlin:annotation-processor-example:$kotlin_version"
kapt "org.jetbrains.kotlin:annotation-processor-example:$kotlin_version"
}
@@ -0,0 +1,12 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package module1
@example.ExampleAnnotation
class Module1Class {
@example.ExampleAnnotation
fun testFunction(): Module1ClassGenerated = Module1ClassGenerated()
}
@@ -0,0 +1,9 @@
apply plugin: "kotlin"
apply plugin: "kotlin-kapt"
dependencies {
compile project(":module1")
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.jetbrains.kotlin:annotation-processor-example:$kotlin_version"
kapt "org.jetbrains.kotlin:annotation-processor-example:$kotlin_version"
}
@@ -0,0 +1,18 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package module2
import module1.Module1Class
@example.ExampleAnnotation
class Module2Class {
@example.ExampleAnnotation
fun testFunction(): Module2ClassGenerated = Module2ClassGenerated()
fun useModule1Class(m: Module1Class) {
m.testFunction()
}
}
@@ -84,6 +84,10 @@ open class KaptWithoutKotlincTask @Inject constructor(private val workerExecutor
workerExecutor.submit(KaptExecution::class.java) { config ->
config.isolationMode = IsolationMode.PROCESS
config.params(optionsForWorker, findToolsJar(), kaptClasspath)
if (project.findProperty("kapt.workers.log.classloading") == "true") {
// for tests
config.forkOptions.jvmArgs("-verbose:class")
}
logger.info("Kapt worker classpath: ${config.classpath}")
}