KT-65684: KAPT: (Re)enable fallback to K1 KAPT and make it default
diff --git a/compiler/cli/cli-common/gen/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArgumentsCopyGenerated.kt b/compiler/cli/cli-common/gen/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArgumentsCopyGenerated.kt
index 78005d2..b5f7336 100644
--- a/compiler/cli/cli-common/gen/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArgumentsCopyGenerated.kt
+++ b/compiler/cli/cli-common/gen/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArgumentsCopyGenerated.kt
@@ -77,6 +77,7 @@
to.typeEnhancementImprovementsInStrictMode = from.typeEnhancementImprovementsInStrictMode
to.useFastJarFileSystem = from.useFastJarFileSystem
to.useJavac = from.useJavac
+ to.useKapt4 = from.useKapt4
to.useOldBackend = from.useOldBackend
to.useOldClassFilesReading = from.useOldClassFilesReading
to.useOldInlineClassesManglingScheme = from.useOldInlineClassesManglingScheme
diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt
index aa50435..5654265 100644
--- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt
+++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt
@@ -836,6 +836,16 @@
field = value
}
+ @Argument(
+ value = "-Xuse-kapt4",
+ description = "Enable the experimental KAPT 4."
+ )
+ var useKapt4 = false
+ set(value) {
+ checkFrozen()
+ field = value
+ }
+
override fun configureAnalysisFlags(collector: MessageCollector, languageVersion: LanguageVersion): MutableMap<AnalysisFlag<*>, Any> {
val result = super.configureAnalysisFlags(collector, languageVersion)
result[JvmAnalysisFlags.strictMetadataVersionSemantics] = strictMetadataVersionSemantics
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/arguments.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/arguments.kt
index cc951af..70cd63a 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/arguments.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/arguments.kt
@@ -8,6 +8,7 @@
import com.intellij.ide.highlighter.JavaFileType
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.CommonToolArguments
+import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.ManualLanguageFeatureSetting
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
@@ -47,6 +48,7 @@
}
}
+ switchToFallbackModeIfNecessary(arguments, messageCollector)
setupLanguageVersionSettings(arguments)
val usesK2 = arguments.useK2 || languageVersionSettings.languageVersion.usesK2
@@ -55,6 +57,34 @@
buildHmppModuleStructure(arguments)?.let { put(CommonConfigurationKeys.HMPP_MODULE_STRUCTURE, it) }
}
+private fun switchToFallbackModeIfNecessary(arguments: CommonCompilerArguments, messageCollector: MessageCollector) {
+ fun warn(message: String) {
+ if (!arguments.suppressVersionWarnings) messageCollector.report(CompilerMessageSeverity.STRONG_WARNING, message)
+ }
+
+ if (arguments !is K2JVMCompilerArguments) return
+ val isK2 =
+ arguments.useK2 || (arguments.languageVersion?.startsWith('2') ?: (LanguageVersion.LATEST_STABLE >= LanguageVersion.KOTLIN_2_0))
+ val isKaptUsed = arguments.pluginOptions?.any { it.startsWith("plugin:org.jetbrains.kotlin.kapt3") } == true
+ when {
+ isK2 && isKaptUsed && !arguments.useKapt4 -> {
+ warn("Kapt currently doesn't support language version 2.0+. Falling back to 1.9.")
+ arguments.languageVersion = LanguageVersion.KOTLIN_1_9.versionString
+ if (arguments.apiVersion?.startsWith("2") == true) {
+ arguments.apiVersion = ApiVersion.KOTLIN_1_9.versionString
+ }
+ arguments.useK2 = false
+ arguments.skipMetadataVersionCheck = true
+ arguments.skipPrereleaseCheck = true
+ arguments.allowUnstableDependencies = true
+ }
+ arguments.useKapt4 -> warn(
+ if (isK2) "K2 kapt is an experimental feature. Use with caution."
+ else "-Xuse-kapt4 flag can be only used with language version 2.0+."
+ )
+ }
+}
+
fun CompilerConfiguration.setupLanguageVersionSettings(arguments: CommonCompilerArguments) {
languageVersionSettings = arguments.toLanguageVersionSettings(getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY))
}
diff --git a/compiler/testData/cli/jvm/extraHelp.out b/compiler/testData/cli/jvm/extraHelp.out
index 54cc6bf..11963b4 100644
--- a/compiler/testData/cli/jvm/extraHelp.out
+++ b/compiler/testData/cli/jvm/extraHelp.out
@@ -143,6 +143,7 @@
See KT-45671 for more details.
-Xuse-fast-jar-file-system Use the fast implementation of Jar FS. This may speed up compilation time, but it is experimental.
-Xuse-javac Use javac for Java source and class file analysis.
+ -Xuse-kapt4 Enable the experimental KAPT 4.
-Xuse-old-backend Use the old JVM backend.
-Xuse-old-class-files-reading Use the old implementation for reading class files. This may slow down the compilation and cause problems with Groovy interop.
This can be used in the event of problems with the new implementation.
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 99253fc..8c1606e 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
@@ -148,9 +148,17 @@
}
@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
@@ -1268,6 +1276,99 @@
}
}
+ @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) {
@@ -1279,6 +1380,35 @@
}
}
+ @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) {
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt4IT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt4IT.kt
index 9e854f2..5fc761b 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt4IT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt4IT.kt
@@ -10,24 +10,29 @@
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()
- @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.")
- }
- }
+ override fun TestProject.customizeProject() {
+ forceKapt4()
}
+ @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) {
@@ -45,15 +50,62 @@
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("KT-63102 Incremental compilation doesn't work in 2.0")
+ @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")
override fun testSimpleWithIC(gradleVersion: GradleVersion) {}
- @Disabled("KT-63102 Incremental compilation doesn't work in 2.0")
+ @Disabled("Incremental compilation doesn't work in 2.0")
override fun testSimpleWithIC_withClasspathSnapshot(gradleVersion: GradleVersion) {}
-
- @Disabled("KT-63102 Incremental compilation doesn't work in 2.0")
- override fun testChangeClasspathICRebuild(gradleVersion: GradleVersion) {}
}
+
+fun TestProject.forceKapt4() {
+ projectPath.walk().forEach {
+ when (it.fileName.name) {
+ "build.gradle" -> it.appendText(
+ """
+
+ try {
+ Class.forName('org.jetbrains.kotlin.gradle.tasks.KotlinCompile')
+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
+ compilerOptions.freeCompilerArgs.addAll(['-Xuse-kapt4', '-Xsuppress-version-warnings'])
+ }
+ } catch(ClassNotFoundException ignore) {
+ }
+
+ """.trimIndent()
+ )
+ "build.gradle.kts" -> it.appendText(
+ """
+
+ try {
+ Class.forName("org.jetbrains.kotlin.gradle.tasks.KotlinCompile")
+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile::class.java).configureEach {
+ compilerOptions.freeCompilerArgs.addAll(listOf("-Xuse-kapt4", "-Xsuppress-version-warnings"))
+ }
+ } catch(ignore: ClassNotFoundException) {
+ }
+
+ """.trimIndent()
+ )
+ }
+ }
+}
+
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt
index d9027bf..e3f2780 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt
@@ -402,6 +402,10 @@
@OtherGradlePluginTests
class K2KaptIncrementalIT: KaptIncrementalIT() {
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
+
+ override fun TestProject.customizeProject() {
+ forceKapt4()
+ }
}
@DisplayName("Kapt incremental compilation with disabled precise compilation outputs backup")
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithAggregatingApt.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithAggregatingApt.kt
index 729ce71..e26a48f 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithAggregatingApt.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithAggregatingApt.kt
@@ -393,6 +393,10 @@
@DisplayName("K2 Kapt incremental tests with aggregating apt")
class K2KaptIncrementalWithAggregatingApt: KaptIncrementalWithAggregatingApt() {
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
+
+ override fun TestProject.customizeProject() {
+ forceKapt4()
+ }
}
@DisplayName("K1 Kapt incremental tests with aggregating apt with disabled precise compilation outputs backup")
@@ -402,4 +406,8 @@
class K2KaptIncrementalWithAggregatingAptAndWithoutPreciseBackup: KaptIncrementalWithAggregatingAptAndWithoutPreciseBackup() {
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
+
+ override fun TestProject.customizeProject() {
+ forceKapt4()
+ }
}
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithIsolatingApt.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithIsolatingApt.kt
index 2a89ea5..b98e9e6 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithIsolatingApt.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalWithIsolatingApt.kt
@@ -443,6 +443,10 @@
@DisplayName("K2 Kapt incremental tests with isolating apt")
class K2KaptIncrementalWithIsolatingApt : KaptIncrementalWithIsolatingApt() {
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
+
+ override fun TestProject.customizeProject() {
+ forceKapt4()
+ }
}
@DisplayName("K1 Kapt incremental tests with isolating apt with disabled precise compilation outputs backup")
@@ -453,6 +457,10 @@
@DisplayName("K2 Kapt incremental tests with isolating apt with disabled precise compilation outputs backup")
class K2KaptIncrementalWithIsolatingAptAndWithoutPreciseBackup : KaptIncrementalWithIsolatingAptAndWithoutPreciseBackup() {
override val defaultBuildOptions = super.defaultBuildOptions.copyEnsuringK2()
+
+ override fun TestProject.customizeProject() {
+ forceKapt4()
+ }
}
private const val patternApt = "Processing java sources with annotation processors:"
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt4AndroidExternalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt4AndroidExternalIT.kt
index 5b761ab..48e3f2c 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt4AndroidExternalIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt4AndroidExternalIT.kt
@@ -6,7 +6,9 @@
package org.jetbrains.kotlin.gradle.android
import org.gradle.util.GradleVersion
+import org.jetbrains.kotlin.gradle.forceKapt4
import org.jetbrains.kotlin.gradle.testbase.JdkVersions
+import org.jetbrains.kotlin.gradle.testbase.TestProject
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.DisplayName
@@ -20,4 +22,8 @@
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {}
+
+ override fun TestProject.customizeProject() {
+ forceKapt4()
+ }
}
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt4AndroidIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt4AndroidIT.kt
index 520bf24..3b8f592 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt4AndroidIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt4AndroidIT.kt
@@ -5,9 +5,15 @@
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()
+ }
}
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt4AndroidIncrementalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt4AndroidIncrementalIT.kt
index 79a4696..8df1dec 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt4AndroidIncrementalIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt4AndroidIncrementalIT.kt
@@ -6,7 +6,9 @@
package org.jetbrains.kotlin.gradle.android
import org.gradle.util.GradleVersion
+import org.jetbrains.kotlin.gradle.forceKapt4
import org.jetbrains.kotlin.gradle.testbase.JdkVersions
+import org.jetbrains.kotlin.gradle.testbase.TestProject
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.DisplayName
@@ -21,6 +23,10 @@
@Disabled("KT-63102 Incremental compilation doesn't work in 2.0")
override fun testInterProjectIC(gradleVersion: GradleVersion, agpVersion: String, jdkVersion: JdkVersions.ProvidedJdk) {
}
+
+ override fun TestProject.customizeProject() {
+ forceKapt4()
+ }
}
@DisplayName("android with kapt4 incremental build tests with precise compilation outputs backup")
@@ -34,4 +40,8 @@
@Disabled("KT-63102 Incremental compilation doesn't work in 2.0")
override fun testInterProjectIC(gradleVersion: GradleVersion, agpVersion: String, jdkVersion: JdkVersions.ProvidedJdk) {
}
+
+ override fun TestProject.customizeProject() {
+ forceKapt4()
+ }
}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt
index 3db3b84..1592c2a 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt
@@ -25,6 +25,7 @@
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
@@ -122,6 +123,10 @@
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> {
@@ -213,6 +218,7 @@
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),
}
}
@@ -532,6 +538,7 @@
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)
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt
index 9cb528d..92c4ca9 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptGenerateStubsTask.kt
@@ -29,7 +29,6 @@
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
@@ -67,6 +66,9 @@
@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.
@@ -127,6 +129,10 @@
args.verbose = verbose.get()
args.destinationAsFile = destinationDirectory.get().asFile
+
+ if (useK2Kapt.get()) {
+ args.freeArgs += "-Xuse-kapt4"
+ }
}
pluginClasspath { args ->
@@ -148,5 +154,5 @@
}
override fun isIncrementalCompilationEnabled(): Boolean =
- super.isIncrementalCompilationEnabled() && compilerOptions.languageVersion.getOrElse(KotlinVersion.DEFAULT) < KotlinVersion.KOTLIN_2_0
+ super.isIncrementalCompilationEnabled() && !useK2Kapt.get() && ("-Xuse-kapt4" !in compilerOptions.freeCompilerArgs.get())
}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KaptGenerateStubsConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KaptGenerateStubsConfig.kt
index e525891..3571ec8 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KaptGenerateStubsConfig.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/tasks/configuration/KaptGenerateStubsConfig.kt
@@ -16,6 +16,7 @@
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
@@ -49,6 +50,7 @@
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 {
diff --git a/plugins/kapt3/kapt3-cli/src/KaptCli.kt b/plugins/kapt3/kapt3-cli/src/KaptCli.kt
index 8c909fc..8c8475d 100644
--- a/plugins/kapt3/kapt3-cli/src/KaptCli.kt
+++ b/plugins/kapt3/kapt3-cli/src/KaptCli.kt
@@ -107,6 +107,7 @@
}
KaptCliOption.APT_MODE_OPTION -> aptModePassed = true
KaptCliOption.VERBOSE_MODE_OPTION -> kaptVerboseModePassed = true
+ KaptCliOption.USE_K2 -> transformed.add("-Xuse-kapt4")
else -> {}
}
@@ -114,7 +115,7 @@
}
if (!aptModePassed) {
- val isK2 = ("-Xuse-k2" in transformed ||
+ val isK2 = "-Xuse-kapt4" in transformed && ("-Xuse-k2" in transformed ||
transformed.any { it.startsWith("-language-version=2") } ||
transformed.lastIndexOf("-language-version").takeIf { it >= 0 }
?.let { transformed.getOrNull(it + 1)?.startsWith('2') } == true)
diff --git a/plugins/kapt3/kapt3-cli/src/KaptCliOption.kt b/plugins/kapt3/kapt3-cli/src/KaptCliOption.kt
index 86f757a..f244f5e 100644
--- a/plugins/kapt3/kapt3-cli/src/KaptCliOption.kt
+++ b/plugins/kapt3/kapt3-cli/src/KaptCliOption.kt
@@ -214,6 +214,13 @@
"Keep KDoc comments in stubs"
),
+ USE_K2(
+ "useK2",
+ "true | false",
+ "Use K2",
+ cliToolOption = CliToolOption("-Kapt-use-k2", FLAG)
+ ),
+
DETECT_MEMORY_LEAKS_OPTION("detectMemoryLeaks", "true | false", "Detect memory leaks in annotation processors"),
INCLUDE_COMPILE_CLASSPATH(
"includeCompileClasspath",
diff --git a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/argfile/kaptArgs.txt b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/argfile/kaptArgs.txt
index da9f468..5f6166c 100644
--- a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/argfile/kaptArgs.txt
+++ b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/argfile/kaptArgs.txt
@@ -1,4 +1,5 @@
-language-version 2.0
+-Xuse-kapt4
-Kapt-mode=stubsAndApt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
diff --git a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/compileModeUnsupported/build.txt b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/compileModeUnsupported/build.txt
index 91ff20d..8d6c0d7 100644
--- a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/compileModeUnsupported/build.txt
+++ b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/compileModeUnsupported/build.txt
@@ -1,6 +1,7 @@
# kapt
-language-version 2.0
-Xsuppress-version-warnings
+-Xuse-kapt4
-Kapt-mode=compile
../simple/Test.kt
diff --git a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/correctErrorTypesOn/build.txt b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/correctErrorTypesOn/build.txt
index d94a9c8..97db889 100644
--- a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/correctErrorTypesOn/build.txt
+++ b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/correctErrorTypesOn/build.txt
@@ -12,6 +12,7 @@
# kapt
-language-version 2.0
+-Xuse-kapt4
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
-Kapt-sources=output/sources
diff --git a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/defaultPackage/build.txt b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/defaultPackage/build.txt
index 40eac7b..cad0d62 100644
--- a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/defaultPackage/build.txt
+++ b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/defaultPackage/build.txt
@@ -17,6 +17,7 @@
# kapt
-language-version 2.0
+-Xuse-kapt4
-Kapt-mode=stubsAndApt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
diff --git a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kaptUseK2Flag/build.txt b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kaptUseK2Flag/build.txt
index 91ff20d..14d960b 100644
--- a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kaptUseK2Flag/build.txt
+++ b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kaptUseK2Flag/build.txt
@@ -1,6 +1,7 @@
# kapt
-language-version 2.0
-Xsuppress-version-warnings
+-Kapt-use-k2=true
-Kapt-mode=compile
../simple/Test.kt
diff --git a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kotlinFileGeneration/build.txt b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kotlinFileGeneration/build.txt
index f9cff86..8daf772 100644
--- a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kotlinFileGeneration/build.txt
+++ b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kotlinFileGeneration/build.txt
@@ -17,6 +17,7 @@
# kapt
-language-version 2.0
+-Xuse-kapt4
-Kapt-mode=stubsAndApt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
diff --git a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kotlinFileGenerationDefaultOutput/build.txt b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kotlinFileGenerationDefaultOutput/build.txt
index ee68005..aecd364 100644
--- a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kotlinFileGenerationDefaultOutput/build.txt
+++ b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kotlinFileGenerationDefaultOutput/build.txt
@@ -20,6 +20,7 @@
# kapt
-language-version 2.0
+-Xuse-kapt4
-Kapt-mode=stubsAndApt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
@@ -33,6 +34,7 @@
# kotlinc
-language-version 2.0
+-Xuse-kapt4
-d output/classes
-cp output/classes:output/ap:%KOTLIN_STDLIB%
Test.kt
diff --git a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kt33800/build.txt b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kt33800/build.txt
index f3c16ef..4ac429b 100644
--- a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kt33800/build.txt
+++ b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/kt33800/build.txt
@@ -21,6 +21,7 @@
# kapt
-language-version 2.0
+-Xuse-kapt4
-Kapt-mode=stubsAndApt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
diff --git a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/multipass/build.txt b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/multipass/build.txt
index 62ce2f8..7796317 100644
--- a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/multipass/build.txt
+++ b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/multipass/build.txt
@@ -13,6 +13,7 @@
# kapt
-language-version 2.0
+-Xuse-kapt4
-Kapt-mode=stubsAndApt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
diff --git a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/separateStubAptCompilation/build.txt b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/separateStubAptCompilation/build.txt
index 669e438..300ddcb 100644
--- a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/separateStubAptCompilation/build.txt
+++ b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/separateStubAptCompilation/build.txt
@@ -21,6 +21,7 @@
# kapt
-language-version 2.0
+-Xuse-kapt4
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
-Kapt-sources=output/sources
@@ -32,6 +33,7 @@
# kapt
-language-version 2.0
+-Xuse-kapt4
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
-Kapt-sources=output/sources
diff --git a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/simple/build.txt b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/simple/build.txt
index 05ad916..f6de1d6 100644
--- a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/simple/build.txt
+++ b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/simple/build.txt
@@ -17,6 +17,7 @@
# kapt
-language-version 2.0
+-Xuse-kapt4
-Kapt-mode=stubsAndApt
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
diff --git a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/withoutService/build.txt b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/withoutService/build.txt
index d6a9562..e307618 100644
--- a/plugins/kapt3/kapt3-cli/testData/integration-kapt4/withoutService/build.txt
+++ b/plugins/kapt3/kapt3-cli/testData/integration-kapt4/withoutService/build.txt
@@ -21,6 +21,7 @@
# kapt
-language-version 2.0
+-Xuse-kapt4
-Kapt-stubs=output/stubs
-Kapt-classes=output/classes
-Kapt-sources=output/sources
diff --git a/plugins/kapt3/kapt3-cli/testData/integration/fallback/Test.kt b/plugins/kapt3/kapt3-cli/testData/integration/fallback/Test.kt
new file mode 100644
index 0000000..a23c670
--- /dev/null
+++ b/plugins/kapt3/kapt3-cli/testData/integration/fallback/Test.kt
@@ -0,0 +1,19 @@
+package test
+
+import apt.Anno
+import generated.Test as TestGenerated
+
+@Anno
+class Test {
+ @field:Anno
+ val property: String = ""
+
+ @Anno
+ fun function() {
+
+ }
+}
+
+fun main() {
+ println("Generated class: " + TestGenerated::class.java.name)
+}
\ No newline at end of file
diff --git a/plugins/kapt3/kapt3-cli/testData/integration/fallback/ap/META-INF/services/javax.annotation.processing.Processor b/plugins/kapt3/kapt3-cli/testData/integration/fallback/ap/META-INF/services/javax.annotation.processing.Processor
new file mode 100644
index 0000000..078558e
--- /dev/null
+++ b/plugins/kapt3/kapt3-cli/testData/integration/fallback/ap/META-INF/services/javax.annotation.processing.Processor
@@ -0,0 +1 @@
+apt.SampleApt
\ No newline at end of file
diff --git a/plugins/kapt3/kapt3-cli/testData/integration/fallback/ap/Processor.kt b/plugins/kapt3/kapt3-cli/testData/integration/fallback/ap/Processor.kt
new file mode 100644
index 0000000..22afdb9
--- /dev/null
+++ b/plugins/kapt3/kapt3-cli/testData/integration/fallback/ap/Processor.kt
@@ -0,0 +1,34 @@
+package apt
+
+import javax.annotation.processing.*
+import javax.lang.model.SourceVersion
+import javax.lang.model.element.TypeElement
+import javax.tools.Diagnostic.Kind.*
+import javax.tools.StandardLocation
+
+annotation class Anno
+
+class SampleApt : AbstractProcessor() {
+ override fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean {
+ val writeKotlinFiles = processingEnv.options["kapt.test.writeKotlinFiles"] == "true"
+
+ for (element in roundEnv.getElementsAnnotatedWith(Anno::class.java)) {
+ val generatedSimpleName = element.simpleName.toString().capitalize()
+
+ val file = when (writeKotlinFiles) {
+ true -> processingEnv.filer.createResource(StandardLocation.SOURCE_OUTPUT, "generated", "$generatedSimpleName.kt")
+ false -> processingEnv.filer.createSourceFile("generated.$generatedSimpleName")
+ }
+
+ file.openWriter().use {
+ it.write("package generated;\npublic class $generatedSimpleName {}")
+ }
+ }
+
+ return true
+ }
+
+ override fun getSupportedOptions() = setOf("kapt.test.writeKotlinFiles")
+ override fun getSupportedSourceVersion() = SourceVersion.RELEASE_8
+ override fun getSupportedAnnotationTypes() = setOf("apt.Anno")
+}
\ No newline at end of file
diff --git a/plugins/kapt3/kapt3-cli/testData/integration/fallback/build.txt b/plugins/kapt3/kapt3-cli/testData/integration/fallback/build.txt
new file mode 100644
index 0000000..a510c56
--- /dev/null
+++ b/plugins/kapt3/kapt3-cli/testData/integration/fallback/build.txt
@@ -0,0 +1,69 @@
+# mkdir
+output/stubs
+output/classes
+output/javaClasses
+output/sources
+output/stubsAlt
+output/classesAlt
+output/javaClassesAlt
+output/sourcesAlt
+
+# kotlinc
+-language-version 2.0
+-cp %KOTLIN_STDLIB%
+-d output/ap.jar
+ap/Processor.kt
+
+# copy
+ap/META-INF/services/javax.annotation.processing.Processor
+output/ap/META-INF/services/javax.annotation.processing.Processor
+
+# kapt
+-Xuse-k2
+-Kapt-stubs=output/stubs
+-Kapt-classes=output/classes
+-Kapt-sources=output/sources
+-Kapt-classpath=output/ap
+-d output/classes
+-cp output/ap.jar:%KOTLIN_STDLIB%
+Test.kt
+
+# javac
+-cp output/ap.jar
+-d output/javaClasses
+-proc:none
+output/sources/generated/Function.java
+output/sources/generated/Property.java
+output/sources/generated/Test.java
+
+# kapt
+-language-version 2.0
+-Kapt-stubs=output/stubsAlt
+-Kapt-classes=output/classesAlt
+-Kapt-sources=output/sourcesAlt
+-Kapt-classpath=output/ap
+-d output/classesAlt
+-cp output/ap.jar:%KOTLIN_STDLIB%
+Test.kt
+
+# output
+warning: kapt currently doesn't support language version 2.0+. Falling back to 1.9.
+
+# java
+-cp output/classes:output/javaClasses:output/ap.jar:%KOTLIN_STDLIB%
+test.TestKt
+
+# javac
+-cp output/ap.jar
+-d output/javaClassesAlt
+-proc:none
+output/sourcesAlt/generated/Function.java
+output/sourcesAlt/generated/Property.java
+output/sourcesAlt/generated/Test.java
+
+# java
+-cp output/classes:output/javaClassesAlt:output/ap.jar:%KOTLIN_STDLIB%
+test.TestKt
+
+# after
+Generated class: generated.Test
\ No newline at end of file
diff --git a/plugins/kapt3/kapt3-cli/tests-gen/org/jetbrains/kotlin/kapt/cli/test/KaptToolIntegrationTestGenerated.java b/plugins/kapt3/kapt3-cli/tests-gen/org/jetbrains/kotlin/kapt/cli/test/KaptToolIntegrationTestGenerated.java
index 9f92cee..b775721 100644
--- a/plugins/kapt3/kapt3-cli/tests-gen/org/jetbrains/kotlin/kapt/cli/test/KaptToolIntegrationTestGenerated.java
+++ b/plugins/kapt3/kapt3-cli/tests-gen/org/jetbrains/kotlin/kapt/cli/test/KaptToolIntegrationTestGenerated.java
@@ -49,6 +49,12 @@
}
@Test
+ @TestMetadata("fallback")
+ public void testFallback() throws Exception {
+ runTest("plugins/kapt3/kapt3-cli/testData/integration/fallback/");
+ }
+
+ @Test
@TestMetadata("kotlinFileGeneration")
public void testKotlinFileGeneration() throws Exception {
runTest("plugins/kapt3/kapt3-cli/testData/integration/kotlinFileGeneration/");
diff --git a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt
index 8266c0c..712c184 100644
--- a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt
+++ b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/Kapt3Plugin.kt
@@ -123,6 +123,7 @@
STRICT_MODE_OPTION -> setFlag(KaptFlag.STRICT, value)
STRIP_METADATA_OPTION -> setFlag(KaptFlag.STRIP_METADATA, value)
KEEP_KDOC_COMMENTS_IN_STUBS -> setFlag(KaptFlag.KEEP_KDOC_COMMENTS_IN_STUBS, value)
+ USE_K2 -> {}
SHOW_PROCESSOR_STATS -> setFlag(KaptFlag.SHOW_PROCESSOR_STATS, value)
DUMP_PROCESSOR_STATS -> processorsStatsReportFile = File(value)