From 0ea7716eb18f2e0b9c1770892ce68b34c3c4f0fe Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Tue, 11 Dec 2018 20:11:58 +0300 Subject: [PATCH] Test that javac is loaded once when worker is reused --- .../org/jetbrains/kotlin/gradle/Kapt3IT.kt | 14 ++++++++++++++ .../kapt2/javacIsLoadedOnce/build.gradle | 16 ++++++++++++++++ .../kapt2/javacIsLoadedOnce/gradle.properties | 2 ++ .../javacIsLoadedOnce/module1/build.gradle | 8 ++++++++ .../src/main/kotlin/module1/Module1Class.kt | 12 ++++++++++++ .../javacIsLoadedOnce/module2/build.gradle | 9 +++++++++ .../src/main/kotlin/module2/Module2Class.kt | 18 ++++++++++++++++++ .../kapt2/javacIsLoadedOnce/settings.gradle | 1 + .../internal/kapt/KaptWithoutKotlincTask.kt | 4 ++++ 9 files changed, 84 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/gradle.properties create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module1/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module1/src/main/kotlin/module1/Module1Class.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module2/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module2/src/main/kotlin/module2/Module2Class.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/settings.gradle diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt index fbfc1ddb908..fbf73f0b4e1 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt @@ -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() { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/build.gradle new file mode 100644 index 00000000000..f37b00da1c9 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/build.gradle @@ -0,0 +1,16 @@ +buildscript { + repositories { + mavenLocal() + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +subprojects { + repositories { + mavenLocal() + mavenCentral() + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/gradle.properties new file mode 100644 index 00000000000..a27a66c28e8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/gradle.properties @@ -0,0 +1,2 @@ +kapt.verbose=true +kapt.workers.log.classloading=true \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module1/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module1/build.gradle new file mode 100644 index 00000000000..76311bd4dc3 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module1/build.gradle @@ -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" +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module1/src/main/kotlin/module1/Module1Class.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module1/src/main/kotlin/module1/Module1Class.kt new file mode 100644 index 00000000000..1e377deca16 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module1/src/main/kotlin/module1/Module1Class.kt @@ -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() +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module2/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module2/build.gradle new file mode 100644 index 00000000000..c0d6a83114f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module2/build.gradle @@ -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" +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module2/src/main/kotlin/module2/Module2Class.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module2/src/main/kotlin/module2/Module2Class.kt new file mode 100644 index 00000000000..594ca1082a5 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/module2/src/main/kotlin/module2/Module2Class.kt @@ -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() + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/settings.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/settings.gradle new file mode 100644 index 00000000000..b3b8e14904e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/javacIsLoadedOnce/settings.gradle @@ -0,0 +1 @@ +include 'module1', 'module2' \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithoutKotlincTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithoutKotlincTask.kt index 617ba6fde91..dc64c511c68 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithoutKotlincTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithoutKotlincTask.kt @@ -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}") }