KT-64385 Enable K2 KAPT by default

Also adds support for front-end compiler plugins in Kapt
This commit is contained in:
strangepleasures
2024-01-15 10:22:32 +00:00
committed by Space Team
parent 8156c91c47
commit 7e9d6e601d
58 changed files with 218 additions and 476 deletions
@@ -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,
@@ -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) {
@@ -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) {}
}
@@ -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) {}
}
@@ -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)
@@ -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()
}
@@ -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 ->
@@ -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,
@@ -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,
@@ -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,
) {}
}
@@ -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()
}
}
@@ -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) {
}
}
@@ -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) }
}
}
@@ -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)
@@ -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
}
@@ -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 {
@@ -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>
@@ -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>