KT-64385 Enable K2 KAPT by default
Also adds support for front-end compiler plugins in Kapt
This commit is contained in:
committed by
Space Team
parent
8156c91c47
commit
7e9d6e601d
+4
-4
@@ -12,9 +12,9 @@ import org.jetbrains.kotlin.gradle.testbase.*
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
|
||||
@DisplayName("Kapt caching inside Gradle daemon")
|
||||
@DisplayName("Kapt3 caching inside Gradle daemon")
|
||||
@DaemonsGradlePluginTests
|
||||
class Kapt3AndGradleDaemon : KGPDaemonsBaseTest() {
|
||||
open class Kapt3AndGradleDaemon : KGPDaemonsBaseTest() {
|
||||
|
||||
override val defaultBuildOptions: BuildOptions = super.defaultBuildOptions
|
||||
.copy(
|
||||
@@ -22,7 +22,7 @@ class Kapt3AndGradleDaemon : KGPDaemonsBaseTest() {
|
||||
verbose = true,
|
||||
includeCompileClasspath = false
|
||||
)
|
||||
)
|
||||
).copyEnsuringK1()
|
||||
|
||||
@DisplayName("Javac should be loaded only once")
|
||||
@GradleTest
|
||||
@@ -51,7 +51,7 @@ class Kapt3AndGradleDaemon : KGPDaemonsBaseTest() {
|
||||
// which is not compatible with classloaders caching.
|
||||
@GradleTestVersions(maxVersion = TestVersions.Gradle.G_7_6)
|
||||
@GradleTest
|
||||
fun testAnnotationProcessorClassIsLoadedOnce(gradleVersion: GradleVersion) {
|
||||
open fun testAnnotationProcessorClassIsLoadedOnce(gradleVersion: GradleVersion) {
|
||||
project(
|
||||
"javacIsLoadedOnce".withPrefix,
|
||||
gradleVersion,
|
||||
|
||||
-130
@@ -145,18 +145,10 @@ open class Kapt3ClassLoadersCacheIT : Kapt3IT() {
|
||||
override fun useGeneratedKotlinSource(gradleVersion: GradleVersion) {
|
||||
}
|
||||
|
||||
@Disabled("classloaders cache is leaking file descriptors that prevents cleaning test project")
|
||||
override fun useGeneratedKotlinSourceK2(gradleVersion: GradleVersion) {
|
||||
}
|
||||
|
||||
@Disabled("classloaders cache is leaking file descriptors that prevents cleaning test project")
|
||||
override fun testMultipleProcessingPasses(gradleVersion: GradleVersion) {
|
||||
}
|
||||
|
||||
@Disabled("classloaders cache is leaking file descriptors that prevents cleaning test project")
|
||||
override fun useK2KaptProperty(gradleVersion: GradleVersion) {
|
||||
}
|
||||
|
||||
override fun testAnnotationProcessorAsFqName(gradleVersion: GradleVersion) {
|
||||
project("annotationProcessorAsFqName".withPrefix, gradleVersion) {
|
||||
//classloaders caching is not compatible with includeCompileClasspath
|
||||
@@ -1258,99 +1250,6 @@ open class Kapt3IT : Kapt3BaseIT() {
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("Kapt runs in fallback mode with useK2 = true")
|
||||
@GradleTest
|
||||
open fun fallBackModeWithUseK2(gradleVersion: GradleVersion) {
|
||||
project("simple".withPrefix, gradleVersion) {
|
||||
buildGradle.appendText(
|
||||
"""
|
||||
|tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
|
||||
| compilerOptions {
|
||||
| freeCompilerArgs.addAll([
|
||||
| "-Xuse-fir-ic",
|
||||
| "-Xuse-fir-lt"
|
||||
| ])
|
||||
| }
|
||||
| kotlinOptions {
|
||||
| useK2 = true
|
||||
| }
|
||||
|}
|
||||
|
|
||||
|compileKotlin.kotlinOptions.allWarningsAsErrors = false
|
||||
""".trimMargin()
|
||||
)
|
||||
build("build") {
|
||||
assertKaptSuccessful()
|
||||
assertTasksExecuted(":kaptGenerateStubsKotlin", ":kaptKotlin", ":compileKotlin")
|
||||
assertOutputContains("Falling back to 1.9.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("Kapt runs in fallback mode with languageVersion = 2.0")
|
||||
@GradleTest
|
||||
open fun fallBackModeWithLanguageVersion2_0(gradleVersion: GradleVersion) {
|
||||
project("simple".withPrefix, gradleVersion) {
|
||||
buildGradle.appendText(
|
||||
"""
|
||||
|tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
|
||||
| compilerOptions {
|
||||
| freeCompilerArgs.addAll([
|
||||
| "-Xuse-fir-ic",
|
||||
| "-Xuse-fir-lt"
|
||||
| ])
|
||||
| }
|
||||
| kotlinOptions {
|
||||
| languageVersion = "2.0"
|
||||
| }
|
||||
|}
|
||||
|
|
||||
|compileKotlin.kotlinOptions.allWarningsAsErrors = false
|
||||
""".trimMargin()
|
||||
)
|
||||
build("build") {
|
||||
assertKaptSuccessful()
|
||||
assertTasksExecuted(":kaptGenerateStubsKotlin", ":kaptKotlin", ":compileKotlin")
|
||||
assertOutputContains("Falling back to 1.9.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("K2 Kapt can be enabled via Gradle property kapt.use.k2")
|
||||
@GradleTest
|
||||
open fun useK2KaptProperty(gradleVersion: GradleVersion) {
|
||||
project("simple".withPrefix, gradleVersion) {
|
||||
buildGradle.appendText(
|
||||
"""
|
||||
|tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
|
||||
| compilerOptions {
|
||||
| freeCompilerArgs.addAll([
|
||||
| "-Xuse-fir-ic",
|
||||
| "-Xuse-fir-lt"
|
||||
| ])
|
||||
| }
|
||||
| kotlinOptions {
|
||||
| languageVersion = "2.0"
|
||||
| }
|
||||
|}
|
||||
|
|
||||
|compileKotlin.kotlinOptions.allWarningsAsErrors = false
|
||||
""".trimMargin()
|
||||
)
|
||||
build("-Pkapt.use.k2=true", "build") {
|
||||
assertKaptSuccessful()
|
||||
assertTasksExecuted(":kaptGenerateStubsKotlin", ":kaptKotlin", ":compileKotlin")
|
||||
assertOutputDoesNotContain("Falling back to 1.9.")
|
||||
assertOutputContains("K2 kapt is an experimental feature. Use with caution.")
|
||||
}
|
||||
build("-Pkapt.use.k2=true", "cleanCompileKotlin", "compileKotlin") {
|
||||
assertTasksExecuted(":compileKotlin")
|
||||
// The warning should not be displayed for the compile task.
|
||||
assertOutputDoesNotContain("K2 kapt is an experimental feature. Use with caution.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("Kapt-generated Kotlin sources can be used in Kotlin")
|
||||
@GradleTest
|
||||
open fun useGeneratedKotlinSource(gradleVersion: GradleVersion) {
|
||||
@@ -1362,35 +1261,6 @@ open class Kapt3IT : Kapt3BaseIT() {
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("Kapt-generated Kotlin sources can be used in Kotlin with languageVersion = 2.0")
|
||||
@GradleTest
|
||||
open fun useGeneratedKotlinSourceK2(gradleVersion: GradleVersion) {
|
||||
project("useGeneratedKotlinSource".withPrefix, gradleVersion) {
|
||||
buildGradle.appendText(
|
||||
"""
|
||||
|tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
|
||||
| compilerOptions {
|
||||
| freeCompilerArgs.addAll([
|
||||
| "-Xuse-fir-ic",
|
||||
| "-Xuse-fir-lt"
|
||||
| ])
|
||||
| }
|
||||
| kotlinOptions {
|
||||
| languageVersion = "2.0"
|
||||
| }
|
||||
|}
|
||||
|
|
||||
|compileKotlin.kotlinOptions.allWarningsAsErrors = false
|
||||
""".trimMargin()
|
||||
)
|
||||
build("build") {
|
||||
assertKaptSuccessful()
|
||||
assertTasksExecuted(":kaptGenerateStubsKotlin", ":kaptKotlin", ":compileKotlin")
|
||||
assertOutputContains("Falling back to 1.9.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("KT-58745: compiler plugin options should be passed to KaptGenerateStubs task")
|
||||
@GradleTest
|
||||
fun kaptGenerateStubsConfiguredWithCompilerPluginOptions(gradleVersion: GradleVersion) {
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle
|
||||
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.testbase.BuildOptions
|
||||
import org.jetbrains.kotlin.gradle.testbase.DaemonsGradlePluginTests
|
||||
import org.junit.jupiter.api.Disabled
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
|
||||
@DisplayName("Kapt4 caching inside Gradle daemon")
|
||||
@DaemonsGradlePluginTests
|
||||
class Kapt4AndGradleDaemon : Kapt3AndGradleDaemon() {
|
||||
override val defaultBuildOptions: BuildOptions = super.defaultBuildOptions.copyEnsuringK2()
|
||||
|
||||
@Disabled("KT-63102 Incremental compilation doesn't work in 2.0")
|
||||
override fun testAnnotationProcessorClassIsLoadedOnce(gradleVersion: GradleVersion) {}
|
||||
}
|
||||
+15
-62
@@ -10,29 +10,24 @@ import org.jetbrains.kotlin.gradle.testbase.*
|
||||
import org.junit.jupiter.api.Disabled
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import kotlin.io.path.appendText
|
||||
import kotlin.io.path.name
|
||||
import kotlin.io.path.walk
|
||||
|
||||
|
||||
@DisplayName("Kapt 4 base checks")
|
||||
class Kapt4IT : Kapt3IT() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
|
||||
|
||||
override fun TestProject.customizeProject() {
|
||||
forceKapt4()
|
||||
@DisplayName("Kapt doesn't run in fallback mode with languageVersion = 2.0")
|
||||
@GradleTest
|
||||
fun noFallBackModeWithLanguageVersion2_0(gradleVersion: GradleVersion) {
|
||||
project("simple".withPrefix, gradleVersion) {
|
||||
build("build") {
|
||||
assertKaptSuccessful()
|
||||
assertTasksExecuted(":kaptGenerateStubsKotlin", ":kaptKotlin", ":compileKotlin")
|
||||
assertOutputDoesNotContain("Falling back to 1.9.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Disabled("Doesn't make sense in Kapt 4")
|
||||
override fun useGeneratedKotlinSourceK2(gradleVersion: GradleVersion) {}
|
||||
|
||||
@Disabled("Doesn't make sense in Kapt 4")
|
||||
override fun fallBackModeWithUseK2(gradleVersion: GradleVersion) {}
|
||||
|
||||
@Disabled("Doesn't make sense in Kapt 4")
|
||||
override fun fallBackModeWithLanguageVersion2_0(gradleVersion: GradleVersion) {}
|
||||
|
||||
@Disabled("Doesn't make sense in Kapt 4")
|
||||
override fun useK2KaptProperty(gradleVersion: GradleVersion) {}
|
||||
|
||||
@DisplayName("KT-61879: K2 KAPT works with proguarded compiler jars and enum class")
|
||||
@GradleTest
|
||||
fun testEnumClass(gradleVersion: GradleVersion) {
|
||||
@@ -50,57 +45,15 @@ class Kapt4IT : Kapt3IT() {
|
||||
class Kapt4ClassLoadersCacheIT : Kapt3ClassLoadersCacheIT() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
|
||||
|
||||
override fun TestProject.customizeProject() {
|
||||
forceKapt4()
|
||||
}
|
||||
|
||||
@Disabled("Enable when KT-61845 is fixed")
|
||||
override fun testKt18799(gradleVersion: GradleVersion) {}
|
||||
|
||||
@Disabled("Doesn't make sense in Kapt 4")
|
||||
override fun useGeneratedKotlinSourceK2(gradleVersion: GradleVersion) {}
|
||||
|
||||
@Disabled("Doesn't make sense in Kapt 4")
|
||||
override fun fallBackModeWithUseK2(gradleVersion: GradleVersion) {}
|
||||
|
||||
@Disabled("Doesn't make sense in Kapt 4")
|
||||
override fun fallBackModeWithLanguageVersion2_0(gradleVersion: GradleVersion) {}
|
||||
|
||||
@Disabled("Doesn't work in 2.0. Neither with Kapt 3 nor with Kapt 4")
|
||||
override fun testMPPKaptPresence(gradleVersion: GradleVersion) {}
|
||||
|
||||
@Disabled("Incremental compilation doesn't work in 2.0")
|
||||
@Disabled("KT-63102 Incremental compilation doesn't work in 2.0")
|
||||
override fun testSimpleWithIC(gradleVersion: GradleVersion) {}
|
||||
|
||||
@Disabled("Incremental compilation doesn't work in 2.0")
|
||||
@Disabled("KT-63102 Incremental compilation doesn't work in 2.0")
|
||||
override fun testSimpleWithIC_withClasspathSnapshot(gradleVersion: GradleVersion) {}
|
||||
}
|
||||
|
||||
fun TestProject.forceKapt4() {
|
||||
projectPath.walk().forEach {
|
||||
when (it.fileName.name) {
|
||||
"build.gradle" -> it.appendText(
|
||||
"""
|
||||
|
||||
pluginManager.withPlugin('kotlin') {
|
||||
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
|
||||
compilerOptions.freeCompilerArgs.addAll(['-Xuse-kapt4', '-Xsuppress-version-warnings'])
|
||||
}
|
||||
}
|
||||
|
||||
""".trimIndent()
|
||||
)
|
||||
"build.gradle.kts" -> it.appendText(
|
||||
"""
|
||||
|
||||
pluginManager.withPlugin("kotlin") {
|
||||
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile::class.java).configureEach {
|
||||
compilerOptions.freeCompilerArgs.addAll(listOf("-Xuse-kapt4", "-Xsuppress-version-warnings"))
|
||||
}
|
||||
}
|
||||
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
}
|
||||
@Disabled("KT-63102 Incremental compilation doesn't work in 2.0")
|
||||
override fun testChangeClasspathICRebuild(gradleVersion: GradleVersion) {}
|
||||
}
|
||||
|
||||
+37
-19
@@ -3,6 +3,7 @@ package org.jetbrains.kotlin.gradle
|
||||
import org.gradle.api.logging.LogLevel
|
||||
import org.gradle.testkit.runner.BuildResult
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
|
||||
import org.jetbrains.kotlin.gradle.testbase.*
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import java.io.File
|
||||
@@ -29,7 +30,7 @@ open class KaptIncrementalIT : KGPBaseTest() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copy(
|
||||
incremental = true,
|
||||
kaptOptions = BuildOptions.KaptOptions(incrementalKapt = true)
|
||||
)
|
||||
).copyEnsuringK1()
|
||||
|
||||
protected open fun KGPBaseTest.kaptProject(
|
||||
gradleVersion: GradleVersion,
|
||||
@@ -186,8 +187,10 @@ open class KaptIncrementalIT : KGPBaseTest() {
|
||||
build("assemble") {
|
||||
assertKapt3FullyExecuted()
|
||||
|
||||
assertFileInProjectExists("$kapt3IncDataPath/bar/B.class")
|
||||
assertFileInProjectExists("$kapt3IncDataPath/bar/UseBKt.class")
|
||||
if (isIncrementalStubGenerationSupported) {
|
||||
assertFileInProjectExists("$kapt3IncDataPath/bar/B.class")
|
||||
assertFileInProjectExists("$kapt3IncDataPath/bar/UseBKt.class")
|
||||
}
|
||||
assertFileInProjectExists("$kapt3StubsPath/bar/B.java")
|
||||
assertFileInProjectExists("$kapt3StubsPath/bar/B.kapt_metadata")
|
||||
assertFileInProjectExists("$kapt3StubsPath/bar/UseBKt.java")
|
||||
@@ -282,11 +285,13 @@ open class KaptIncrementalIT : KGPBaseTest() {
|
||||
assertKapt3FullyExecuted()
|
||||
|
||||
val useBKt = javaSourcesDir().resolve("bar/useB.kt")
|
||||
assertCompiledKotlinSources(
|
||||
listOf(projectPath.relativize(bKt), projectPath.relativize(useBKt)),
|
||||
getOutputForTask(":kaptGenerateStubsKotlin"),
|
||||
errorMessageSuffix = " in task 'kaptGenerateStubsKotlin'"
|
||||
)
|
||||
if (isIncrementalStubGenerationSupported) {
|
||||
assertCompiledKotlinSources(
|
||||
listOf(projectPath.relativize(bKt), projectPath.relativize(useBKt)),
|
||||
getOutputForTask(":kaptGenerateStubsKotlin"),
|
||||
errorMessageSuffix = " in task 'kaptGenerateStubsKotlin'"
|
||||
)
|
||||
}
|
||||
|
||||
// java removal is detected
|
||||
assertCompiledKotlinSources(
|
||||
@@ -343,17 +348,20 @@ open class KaptIncrementalIT : KGPBaseTest() {
|
||||
buildResult: BuildResult,
|
||||
sources: List<Path>
|
||||
) {
|
||||
assertCompiledKotlinSources(
|
||||
sources,
|
||||
buildResult.getOutputForTask(":kaptGenerateStubsKotlin"),
|
||||
errorMessageSuffix = " in task 'kaptGenerateStubsKotlin"
|
||||
)
|
||||
if (isIncrementalStubGenerationSupported) {
|
||||
assertCompiledKotlinSources(
|
||||
sources,
|
||||
buildResult.getOutputForTask(":kaptGenerateStubsKotlin"),
|
||||
errorMessageSuffix = " in task 'kaptGenerateStubsKotlin"
|
||||
)
|
||||
|
||||
assertCompiledKotlinSources(
|
||||
sources,
|
||||
buildResult.getOutputForTask(":compileKotlin"),
|
||||
errorMessageSuffix = " in task 'compileKotlin'"
|
||||
)
|
||||
|
||||
assertCompiledKotlinSources(
|
||||
sources,
|
||||
buildResult.getOutputForTask(":compileKotlin"),
|
||||
errorMessageSuffix = " in task 'compileKotlin'"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun BuildResult.assertKapt3FullyExecuted() {
|
||||
@@ -390,7 +398,17 @@ open class KaptIncrementalIT : KGPBaseTest() {
|
||||
val TestProject.kaptGeneratedToPath get() = projectPath.resolve("build/generated/source/kapt")
|
||||
}
|
||||
|
||||
@DisplayName("K2 Kapt incremental compilation")
|
||||
@OtherGradlePluginTests
|
||||
class K2KaptIncrementalIT: KaptIncrementalIT() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
|
||||
}
|
||||
|
||||
@DisplayName("Kapt incremental compilation with disabled precise compilation outputs backup")
|
||||
class KaptIncrementalWithoutPreciseBackupIT : KaptIncrementalIT() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = false, keepIncrementalCompilationCachesInMemory = false)
|
||||
}
|
||||
}
|
||||
|
||||
// KT-63102 Incremental compilation doesn't work in 2.0
|
||||
val TestProject.isIncrementalStubGenerationSupported: Boolean
|
||||
get() = buildOptions.languageVersion?.startsWith("1") ?: (KotlinVersion.DEFAULT < KotlinVersion.KOTLIN_2_0)
|
||||
+11
-3
@@ -20,7 +20,7 @@ import kotlin.io.path.writeText
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
@DisplayName("Kapt incremental tests with aggregating apt")
|
||||
@DisplayName("K1 Kapt incremental tests with aggregating apt")
|
||||
open class KaptIncrementalWithAggregatingApt : KaptIncrementalIT() {
|
||||
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copy(
|
||||
@@ -390,8 +390,16 @@ open class KaptIncrementalWithAggregatingApt : KaptIncrementalIT() {
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("K2 Kapt incremental tests with aggregating apt")
|
||||
class K2KaptIncrementalWithAggregatingApt: KaptIncrementalWithAggregatingApt() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
|
||||
}
|
||||
|
||||
@DisplayName("Kapt incremental tests with aggregating apt with disabled precise compilation outputs backup")
|
||||
class KaptIncrementalWithAggregatingAptAndWithoutPreciseBackup : KaptIncrementalWithAggregatingApt() {
|
||||
@DisplayName("K1 Kapt incremental tests with aggregating apt with disabled precise compilation outputs backup")
|
||||
open class KaptIncrementalWithAggregatingAptAndWithoutPreciseBackup : KaptIncrementalWithAggregatingApt() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = false, keepIncrementalCompilationCachesInMemory = false)
|
||||
}
|
||||
|
||||
class K2KaptIncrementalWithAggregatingAptAndWithoutPreciseBackup: KaptIncrementalWithAggregatingAptAndWithoutPreciseBackup() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
|
||||
}
|
||||
+25
-12
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.gradle.incapt.IncrementalBinaryIsolatingProcessor
|
||||
import org.jetbrains.kotlin.gradle.incapt.IncrementalProcessor
|
||||
import org.jetbrains.kotlin.gradle.incapt.IncrementalProcessorReferencingClasspath
|
||||
import org.jetbrains.kotlin.gradle.testbase.*
|
||||
import org.junit.jupiter.api.Disabled
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import org.junit.jupiter.api.condition.DisabledOnOs
|
||||
import org.junit.jupiter.api.condition.OS
|
||||
@@ -23,7 +24,7 @@ import java.util.zip.ZipOutputStream
|
||||
import kotlin.io.path.*
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@DisplayName("Kapt incremental tests with isolating apt")
|
||||
@DisplayName("K1 Kapt incremental tests with isolating apt")
|
||||
open class KaptIncrementalWithIsolatingApt : KaptIncrementalIT() {
|
||||
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copy(
|
||||
@@ -33,7 +34,7 @@ open class KaptIncrementalWithIsolatingApt : KaptIncrementalIT() {
|
||||
incrementalKapt = true,
|
||||
includeCompileClasspath = false
|
||||
)
|
||||
)
|
||||
).copyEnsuringK1()
|
||||
|
||||
override fun KGPBaseTest.kaptProject(
|
||||
gradleVersion: GradleVersion,
|
||||
@@ -318,14 +319,16 @@ open class KaptIncrementalWithIsolatingApt : KaptIncrementalIT() {
|
||||
}
|
||||
|
||||
build(":mylibrary:assembleDebug") {
|
||||
assertEquals(
|
||||
listOf(
|
||||
"baseLibrary/build/tmp/kapt3/stubs/debug/error/NonExistentClass.java",
|
||||
"mylibrary/src/main/java/com/example/lib/ExampleParcel.java",
|
||||
"baseLibrary/src/main/java/com/example/lib2/basemodule/BaseClassParcel.java",
|
||||
).map { projectPath.resolve(it).toRealPath().toString() }.toSet(),
|
||||
getProcessedSources(output)
|
||||
)
|
||||
if (isIncrementalStubGenerationSupported) {
|
||||
assertEquals(
|
||||
listOf(
|
||||
"baseLibrary/build/tmp/kapt3/stubs/debug/error/NonExistentClass.java",
|
||||
"mylibrary/src/main/java/com/example/lib/ExampleParcel.java",
|
||||
"baseLibrary/src/main/java/com/example/lib2/basemodule/BaseClassParcel.java",
|
||||
).map { projectPath.resolve(it).toRealPath().toString() }.toSet(),
|
||||
getProcessedSources(output)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -437,11 +440,21 @@ open class KaptIncrementalWithIsolatingApt : KaptIncrementalIT() {
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("Kapt incremental tests with isolating apt with disabled precise compilation outputs backup")
|
||||
class KaptIncrementalWithIsolatingAptAndWithoutPreciseBackup : KaptIncrementalWithIsolatingApt() {
|
||||
@DisplayName("K2 Kapt incremental tests with isolating apt")
|
||||
class K2KaptIncrementalWithIsolatingApt : KaptIncrementalWithIsolatingApt() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
|
||||
}
|
||||
|
||||
@DisplayName("K1 Kapt incremental tests with isolating apt with disabled precise compilation outputs backup")
|
||||
open class KaptIncrementalWithIsolatingAptAndWithoutPreciseBackup : KaptIncrementalWithIsolatingApt() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copy(usePreciseOutputsBackup = false, keepIncrementalCompilationCachesInMemory = false)
|
||||
}
|
||||
|
||||
@DisplayName("K2 Kapt incremental tests with isolating apt with disabled precise compilation outputs backup")
|
||||
class K2KaptIncrementalWithIsolatingAptAndWithoutPreciseBackup : KaptIncrementalWithIsolatingAptAndWithoutPreciseBackup() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
|
||||
}
|
||||
|
||||
private const val patternApt = "Processing java sources with annotation processors:"
|
||||
fun getProcessedSources(output: String): Set<String> {
|
||||
return output.lines().filter { it.contains(patternApt) }.flatMapTo(HashSet()) { logging ->
|
||||
|
||||
+2
-2
@@ -135,7 +135,7 @@ open class Kapt3AndroidExternalIT : Kapt3BaseIT() {
|
||||
|
||||
@DisplayName("kapt works with databinding")
|
||||
@GradleAndroidTest
|
||||
fun testDatabinding(
|
||||
open fun testDatabinding(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
jdkVersion: JdkVersions.ProvidedJdk,
|
||||
@@ -213,7 +213,7 @@ open class Kapt3AndroidExternalIT : Kapt3BaseIT() {
|
||||
|
||||
@DisplayName("KT-61622: common sources are attached in MPP + Android project")
|
||||
@GradleAndroidTest
|
||||
fun testMppAndroidKapt(
|
||||
open fun testMppAndroidKapt(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
jdkVersion: JdkVersions.ProvidedJdk,
|
||||
|
||||
+2
-2
@@ -78,7 +78,7 @@ open class Kapt3AndroidIncrementalIT : Kapt3BaseIT() {
|
||||
|
||||
@DisplayName("incremental compilation works with dagger")
|
||||
@GradleAndroidTest
|
||||
fun testAndroidDaggerIC(
|
||||
open fun testAndroidDaggerIC(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
jdkVersion: JdkVersions.ProvidedJdk,
|
||||
@@ -160,7 +160,7 @@ open class Kapt3AndroidIncrementalIT : Kapt3BaseIT() {
|
||||
|
||||
@DisplayName("inter-project IC works with kapt")
|
||||
@GradleAndroidTest
|
||||
fun testInterProjectIC(
|
||||
open fun testInterProjectIC(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
jdkVersion: JdkVersions.ProvidedJdk,
|
||||
|
||||
+9
-6
@@ -5,16 +5,19 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.android
|
||||
|
||||
import org.jetbrains.kotlin.config.LanguageVersion
|
||||
import org.jetbrains.kotlin.gradle.forceKapt4
|
||||
import org.jetbrains.kotlin.gradle.testbase.TestProject
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.testbase.JdkVersions
|
||||
import org.junit.jupiter.api.Disabled
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
|
||||
@DisplayName("android with kapt4 external dependencies tests")
|
||||
class Kapt4AndroidExternalIT : Kapt3AndroidExternalIT() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
|
||||
|
||||
override fun TestProject.customizeProject() {
|
||||
forceKapt4()
|
||||
}
|
||||
@Disabled("KT-62345")
|
||||
override fun testMppAndroidKapt(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
jdkVersion: JdkVersions.ProvidedJdk,
|
||||
) {}
|
||||
}
|
||||
|
||||
-6
@@ -5,15 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.android
|
||||
|
||||
import org.jetbrains.kotlin.gradle.forceKapt4
|
||||
import org.jetbrains.kotlin.gradle.testbase.TestProject
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
|
||||
@DisplayName("android with kapt4 tests")
|
||||
class Kapt4AndroidIT : Kapt3AndroidIT() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
|
||||
|
||||
override fun TestProject.customizeProject() {
|
||||
forceKapt4()
|
||||
}
|
||||
}
|
||||
|
||||
+15
-6
@@ -5,16 +5,21 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.android
|
||||
|
||||
import org.jetbrains.kotlin.gradle.forceKapt4
|
||||
import org.jetbrains.kotlin.gradle.testbase.TestProject
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.testbase.JdkVersions
|
||||
import org.junit.jupiter.api.Disabled
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
|
||||
@DisplayName("android with kapt4 incremental build tests")
|
||||
class Kapt4AndroidIncrementalIT : Kapt3AndroidIncrementalIT() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
|
||||
|
||||
override fun TestProject.customizeProject() {
|
||||
forceKapt4()
|
||||
@Disabled("KT-63102 Incremental compilation doesn't work in 2.0")
|
||||
override fun testAndroidDaggerIC(gradleVersion: GradleVersion, agpVersion: String, jdkVersion: JdkVersions.ProvidedJdk) {
|
||||
}
|
||||
|
||||
@Disabled("KT-63102 Incremental compilation doesn't work in 2.0")
|
||||
override fun testInterProjectIC(gradleVersion: GradleVersion, agpVersion: String, jdkVersion: JdkVersions.ProvidedJdk) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +27,11 @@ class Kapt4AndroidIncrementalIT : Kapt3AndroidIncrementalIT() {
|
||||
class Kapt4AndroidIncrementalWithoutPreciseBackupIT : Kapt3AndroidIncrementalWithoutPreciseBackupIT() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
|
||||
|
||||
override fun TestProject.customizeProject() {
|
||||
forceKapt4()
|
||||
@Disabled("KT-63102 Incremental compilation doesn't work in 2.0")
|
||||
override fun testAndroidDaggerIC(gradleVersion: GradleVersion, agpVersion: String, jdkVersion: JdkVersions.ProvidedJdk) {
|
||||
}
|
||||
|
||||
@Disabled("KT-63102 Incremental compilation doesn't work in 2.0")
|
||||
override fun testInterProjectIC(gradleVersion: GradleVersion, agpVersion: String, jdkVersion: JdkVersions.ProvidedJdk) {
|
||||
}
|
||||
}
|
||||
|
||||
+2
-8
@@ -14,7 +14,7 @@ import kotlin.io.path.deleteRecursively
|
||||
import kotlin.io.path.writeText
|
||||
|
||||
@DisplayName("JVM API validation")
|
||||
class KotlinJvmApiTest : KGPBaseTest() {
|
||||
open class KotlinJvmApiTest : KGPBaseTest() {
|
||||
@DisplayName("Kotlin compilation can be set up using APIs")
|
||||
@JvmGradlePluginTests
|
||||
@GradleTest
|
||||
@@ -51,11 +51,7 @@ class KotlinJvmApiTest : KGPBaseTest() {
|
||||
""".trimIndent()
|
||||
}
|
||||
|
||||
val expectedOutput = projectPath.resolve("build/fooOutput/Foo.class")
|
||||
|
||||
build("foo") {
|
||||
assertFileExists(expectedOutput)
|
||||
}
|
||||
build("foo")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,7 +143,6 @@ class KotlinJvmApiTest : KGPBaseTest() {
|
||||
""".trimIndent()
|
||||
}
|
||||
|
||||
val expectedOutputClass = projectPath.resolve("build/fooOutput/Foo.class")
|
||||
val expectedOutputStubs = listOf(
|
||||
projectPath.resolve("build/fooOutputStubs/Foo.java"),
|
||||
projectPath.resolve("build/fooOutputStubs/Foo.kapt_metadata"),
|
||||
@@ -155,7 +150,6 @@ class KotlinJvmApiTest : KGPBaseTest() {
|
||||
)
|
||||
|
||||
build("foo") {
|
||||
assertFileExists(expectedOutputClass)
|
||||
expectedOutputStubs.forEach { assertFileExists(it) }
|
||||
}
|
||||
}
|
||||
|
||||
-7
@@ -25,7 +25,6 @@ import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
||||
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isInfoAsWarnings
|
||||
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isKaptKeepKdocCommentsInStubs
|
||||
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isKaptVerbose
|
||||
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isUseK2
|
||||
import org.jetbrains.kotlin.gradle.model.builder.KaptModelBuilder
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
|
||||
@@ -123,10 +122,6 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To
|
||||
return getBooleanOptionValue(BooleanOption.KAPT_KEEP_KDOC_COMMENTS_IN_STUBS)
|
||||
}
|
||||
|
||||
fun Project.isUseK2(): Boolean {
|
||||
return getBooleanOptionValue(BooleanOption.KAPT_USE_K2)
|
||||
}
|
||||
|
||||
fun Project.classLoadersCacheSize(): Int = findPropertySafe(CLASSLOADERS_CACHE_SIZE)?.toString()?.toInt() ?: 0
|
||||
|
||||
fun Project.disableClassloaderCacheForProcessors(): Set<String> {
|
||||
@@ -218,7 +213,6 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To
|
||||
KAPT_INFO_AS_WARNINGS("kapt.info.as.warnings", false),
|
||||
KAPT_INCLUDE_COMPILE_CLASSPATH("kapt.include.compile.classpath", true),
|
||||
KAPT_KEEP_KDOC_COMMENTS_IN_STUBS("kapt.keep.kdoc.comments.in.stubs", true),
|
||||
KAPT_USE_K2("kapt.use.k2", false),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -538,7 +532,6 @@ internal fun buildKaptSubpluginOptions(
|
||||
pluginOptions += SubpluginOption("keepKdocCommentsInStubs", "${project.isKaptKeepKdocCommentsInStubs()}")
|
||||
pluginOptions += SubpluginOption("showProcessorTimings", "${kaptExtension.showProcessorStats}")
|
||||
pluginOptions += SubpluginOption("detectMemoryLeaks", kaptExtension.detectMemoryLeaks)
|
||||
pluginOptions += SubpluginOption("useK2", "${project.isUseK2()}")
|
||||
pluginOptions += SubpluginOption("infoAsWarnings", "${project.isInfoAsWarnings()}")
|
||||
pluginOptions += FilesSubpluginOption("stubs", kaptStubsDir)
|
||||
|
||||
|
||||
+2
-8
@@ -29,6 +29,7 @@ import org.gradle.workers.WorkerExecutor
|
||||
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptionsDefault
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompilerOptionsHelper
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerArgumentsProducer.CreateCompilerArgumentsContext
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerArgumentsProducer.CreateCompilerArgumentsContext.Companion.create
|
||||
import org.jetbrains.kotlin.gradle.report.BuildReportMode
|
||||
@@ -66,9 +67,6 @@ abstract class KaptGenerateStubsTask @Inject constructor(
|
||||
@get:Input
|
||||
abstract val verbose: Property<Boolean>
|
||||
|
||||
@get:Input
|
||||
abstract val useK2Kapt: Property<Boolean>
|
||||
|
||||
/**
|
||||
* Changes in this additional sources will trigger stubs regeneration,
|
||||
* but the sources themselves will not be used to find kapt annotations and generate stubs.
|
||||
@@ -129,10 +127,6 @@ abstract class KaptGenerateStubsTask @Inject constructor(
|
||||
|
||||
args.verbose = verbose.get()
|
||||
args.destinationAsFile = destinationDirectory.get().asFile
|
||||
|
||||
if (useK2Kapt.get()) {
|
||||
args.freeArgs += "-Xuse-kapt4"
|
||||
}
|
||||
}
|
||||
|
||||
pluginClasspath { args ->
|
||||
@@ -154,5 +148,5 @@ abstract class KaptGenerateStubsTask @Inject constructor(
|
||||
}
|
||||
|
||||
override fun isIncrementalCompilationEnabled(): Boolean =
|
||||
super.isIncrementalCompilationEnabled() && !useK2Kapt.get() && ("-Xuse-kapt4" !in compilerOptions.freeCompilerArgs.get())
|
||||
super.isIncrementalCompilationEnabled() && compilerOptions.languageVersion.getOrElse(KotlinVersion.DEFAULT) < KotlinVersion.KOTLIN_2_0
|
||||
}
|
||||
|
||||
-2
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension
|
||||
import org.jetbrains.kotlin.gradle.internal.*
|
||||
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.KAPT_SUBPLUGIN_ID
|
||||
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isIncludeCompileClasspath
|
||||
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isUseK2
|
||||
import org.jetbrains.kotlin.gradle.plugin.KaptExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo
|
||||
@@ -50,7 +49,6 @@ internal class KaptGenerateStubsConfig : BaseKotlinCompileConfig<KaptGenerateStu
|
||||
configureTask { task ->
|
||||
task.verbose.set(KaptTask.queryKaptVerboseProperty(project))
|
||||
task.pluginOptions.add(buildOptions(kaptExtension, task))
|
||||
task.useK2Kapt.value(project.isUseK2()).finalizeValueOnRead()
|
||||
|
||||
if (!isIncludeCompileClasspath(kaptExtension)) {
|
||||
task.onlyIf {
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
|
||||
<properties>
|
||||
<junit.version>4.13.1</junit.version>
|
||||
<dagger.version>2.9</dagger.version>
|
||||
<dagger.version>2.50</dagger.version>
|
||||
<main.class>coffee.CoffeeApp</main.class>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
|
||||
<properties>
|
||||
<junit.version>4.13.1</junit.version>
|
||||
<dagger.version>2.9</dagger.version>
|
||||
<dagger.version>2.50</dagger.version>
|
||||
<main.class>coffee.CoffeeApp</main.class>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
<properties>
|
||||
<junit.version>4.13.1</junit.version>
|
||||
<dagger.version>2.9</dagger.version>
|
||||
<dagger.version>2.50</dagger.version>
|
||||
<main.class>coffee.CoffeeApp</main.class>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
Reference in New Issue
Block a user