Kapt: remove support for old JVM backend

#KT-64680 Fixed
This commit is contained in:
Alexander Udalov
2024-01-02 17:56:01 +01:00
committed by Space Team
parent c251eb19a6
commit a9f85d75f4
8 changed files with 13 additions and 60 deletions
@@ -15,7 +15,9 @@ import org.gradle.api.artifacts.ExternalDependency
import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.gradle.api.tasks.* import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.TaskDependency
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.tasks.compile.AbstractCompile
import org.gradle.api.tasks.compile.JavaCompile import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.process.CommandLineArgumentProvider import org.gradle.process.CommandLineArgumentProvider
@@ -23,18 +25,15 @@ import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isInfoAsWarnings 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.isKaptKeepKdocCommentsInStubs
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isKaptVerbose import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isKaptVerbose
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isUseJvmIr
import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isUseK2 import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.isUseK2
import org.jetbrains.kotlin.gradle.model.builder.KaptModelBuilder import org.jetbrains.kotlin.gradle.model.builder.KaptModelBuilder
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaCompilation
import org.jetbrains.kotlin.gradle.tasks.* import org.jetbrains.kotlin.gradle.tasks.*
import org.jetbrains.kotlin.gradle.tasks.configuration.* import org.jetbrains.kotlin.gradle.tasks.configuration.KaptGenerateStubsConfig
import org.jetbrains.kotlin.gradle.tasks.configuration.KaptWithoutKotlincConfig
import org.jetbrains.kotlin.gradle.utils.* import org.jetbrains.kotlin.gradle.utils.*
import org.jetbrains.kotlin.gradle.utils.createResolvable
import org.jetbrains.kotlin.gradle.utils.findResolvable
import org.jetbrains.kotlin.gradle.utils.whenEvaluated
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.io.File import java.io.File
@@ -124,10 +123,6 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To
return getBooleanOptionValue(BooleanOption.KAPT_KEEP_KDOC_COMMENTS_IN_STUBS) return getBooleanOptionValue(BooleanOption.KAPT_KEEP_KDOC_COMMENTS_IN_STUBS)
} }
fun Project.isUseJvmIr(): Boolean {
return getBooleanOptionValue(BooleanOption.KAPT_USE_JVM_IR)
}
fun Project.isUseK2(): Boolean { fun Project.isUseK2(): Boolean {
return getBooleanOptionValue(BooleanOption.KAPT_USE_K2) return getBooleanOptionValue(BooleanOption.KAPT_USE_K2)
} }
@@ -223,7 +218,6 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To
KAPT_INFO_AS_WARNINGS("kapt.info.as.warnings", false), KAPT_INFO_AS_WARNINGS("kapt.info.as.warnings", false),
KAPT_INCLUDE_COMPILE_CLASSPATH("kapt.include.compile.classpath", true), KAPT_INCLUDE_COMPILE_CLASSPATH("kapt.include.compile.classpath", true),
KAPT_KEEP_KDOC_COMMENTS_IN_STUBS("kapt.keep.kdoc.comments.in.stubs", true), KAPT_KEEP_KDOC_COMMENTS_IN_STUBS("kapt.keep.kdoc.comments.in.stubs", true),
KAPT_USE_JVM_IR("kapt.use.jvm.ir", true),
KAPT_USE_K2("kapt.use.k2", false), KAPT_USE_K2("kapt.use.k2", false),
} }
} }
@@ -544,7 +538,6 @@ internal fun buildKaptSubpluginOptions(
pluginOptions += SubpluginOption("keepKdocCommentsInStubs", "${project.isKaptKeepKdocCommentsInStubs()}") pluginOptions += SubpluginOption("keepKdocCommentsInStubs", "${project.isKaptKeepKdocCommentsInStubs()}")
pluginOptions += SubpluginOption("showProcessorTimings", "${kaptExtension.showProcessorStats}") pluginOptions += SubpluginOption("showProcessorTimings", "${kaptExtension.showProcessorStats}")
pluginOptions += SubpluginOption("detectMemoryLeaks", kaptExtension.detectMemoryLeaks) pluginOptions += SubpluginOption("detectMemoryLeaks", kaptExtension.detectMemoryLeaks)
pluginOptions += SubpluginOption("useJvmIr", "${project.isUseJvmIr()}")
pluginOptions += SubpluginOption("useK2", "${project.isUseK2()}") pluginOptions += SubpluginOption("useK2", "${project.isUseK2()}")
pluginOptions += SubpluginOption("infoAsWarnings", "${project.isInfoAsWarnings()}") pluginOptions += SubpluginOption("infoAsWarnings", "${project.isInfoAsWarnings()}")
pluginOptions += FilesSubpluginOption("stubs", kaptStubsDir) pluginOptions += FilesSubpluginOption("stubs", kaptStubsDir)
@@ -129,7 +129,6 @@ enum class KaptFlag(val description: String, val defaultValue: Boolean = false)
INCREMENTAL_APT("Incremental annotation processing (apt mode)"), INCREMENTAL_APT("Incremental annotation processing (apt mode)"),
STRIP_METADATA("Strip @Metadata annotations from stubs"), STRIP_METADATA("Strip @Metadata annotations from stubs"),
KEEP_KDOC_COMMENTS_IN_STUBS("Keep KDoc comments in stubs", defaultValue = true), KEEP_KDOC_COMMENTS_IN_STUBS("Keep KDoc comments in stubs", defaultValue = true),
USE_JVM_IR("Use JVM IR backend", defaultValue = true),
; ;
} }
@@ -214,13 +214,6 @@ enum class KaptCliOption(
"Keep KDoc comments in stubs" "Keep KDoc comments in stubs"
), ),
USE_JVM_IR(
"useJvmIr",
"true | false",
"Use JVM IR backend",
cliToolOption = CliToolOption("-Kapt-use-jvm-ir", FLAG)
),
USE_K2( USE_K2(
"useK2", "useK2",
"true | false", "true | false",
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil
import org.jetbrains.kotlin.cli.common.output.writeAll import org.jetbrains.kotlin.cli.common.output.writeAll
import org.jetbrains.kotlin.codegen.ClassBuilderMode import org.jetbrains.kotlin.codegen.ClassBuilderMode
import org.jetbrains.kotlin.codegen.DefaultCodegenFactory
import org.jetbrains.kotlin.codegen.KotlinCodegenFacade import org.jetbrains.kotlin.codegen.KotlinCodegenFacade
import org.jetbrains.kotlin.codegen.OriginCollectingClassBuilderFactory import org.jetbrains.kotlin.codegen.OriginCollectingClassBuilderFactory
import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.codegen.state.GenerationState
@@ -246,19 +245,15 @@ abstract class AbstractKapt3Extension(
type = "java-production" type = "java-production"
) )
val isIrBackend = options.flags[KaptFlag.USE_JVM_IR]
val generationState = GenerationState.Builder(project, builderFactory, module, bindingContext, configuration) val generationState = GenerationState.Builder(project, builderFactory, module, bindingContext, configuration)
.targetId(targetId) .targetId(targetId)
.isIrBackend(isIrBackend)
.build() .build()
val (classFilesCompilationTime) = measureTimeMillis { val (classFilesCompilationTime) = measureTimeMillis {
KotlinCodegenFacade.compileCorrectFiles( KotlinCodegenFacade.compileCorrectFiles(
files, files,
generationState, generationState,
if (isIrBackend) JvmIrCodegenFactory(configuration, configuration[CLIConfigurationKeys.PHASE_CONFIG])
JvmIrCodegenFactory(configuration, configuration[CLIConfigurationKeys.PHASE_CONFIG])
else DefaultCodegenFactory
) )
} }
@@ -123,7 +123,6 @@ class Kapt3CommandLineProcessor : CommandLineProcessor {
STRICT_MODE_OPTION -> setFlag(KaptFlag.STRICT, value) STRICT_MODE_OPTION -> setFlag(KaptFlag.STRICT, value)
STRIP_METADATA_OPTION -> setFlag(KaptFlag.STRIP_METADATA, value) STRIP_METADATA_OPTION -> setFlag(KaptFlag.STRIP_METADATA, value)
KEEP_KDOC_COMMENTS_IN_STUBS -> setFlag(KaptFlag.KEEP_KDOC_COMMENTS_IN_STUBS, value) KEEP_KDOC_COMMENTS_IN_STUBS -> setFlag(KaptFlag.KEEP_KDOC_COMMENTS_IN_STUBS, value)
USE_JVM_IR -> setFlag(KaptFlag.USE_JVM_IR, value)
USE_K2 -> {} USE_K2 -> {}
SHOW_PROCESSOR_STATS -> setFlag(KaptFlag.SHOW_PROCESSOR_STATS, value) SHOW_PROCESSOR_STATS -> setFlag(KaptFlag.SHOW_PROCESSOR_STATS, value)
@@ -123,8 +123,6 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati
private val mutableBindings = mutableMapOf<String, KaptJavaFileObject>() private val mutableBindings = mutableMapOf<String, KaptJavaFileObject>()
private val isIrBackend = kaptContext.generationState.isIrBackend
val bindings: Map<String, KaptJavaFileObject> val bindings: Map<String, KaptJavaFileObject>
get() = mutableBindings get() = mutableBindings
@@ -684,15 +682,11 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati
val origin = kaptContext.origins[field] val origin = kaptContext.origins[field]
val descriptor = origin?.descriptor val descriptor = origin?.descriptor
val fieldAnnotations = when {
!isIrBackend && descriptor is PropertyDescriptor -> descriptor.backingField?.annotations
else -> descriptor?.annotations
} ?: Annotations.EMPTY
val modifiers = convertModifiers( val modifiers = convertModifiers(
containingClass, containingClass,
field.access, ElementKind.FIELD, packageFqName, field.access, ElementKind.FIELD, packageFqName,
field.visibleAnnotations, field.invisibleAnnotations, fieldAnnotations field.visibleAnnotations, field.invisibleAnnotations,
descriptor?.annotations ?: Annotations.EMPTY,
) )
val name = field.name val name = field.name
@@ -14,23 +14,11 @@ import org.jetbrains.kotlin.load.java.JvmAnnotationNames
import org.jetbrains.kotlin.test.Assertions import org.jetbrains.kotlin.test.Assertions
import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.utils.withExtension import org.jetbrains.kotlin.test.utils.withExtension
import org.jetbrains.kotlin.test.utils.withSuffixAndExtension
fun Assertions.checkTxtAccordingToBackend(module: TestModule, actual: String, fileSuffix: String = "") { fun Assertions.checkTxtAccordingToBackend(module: TestModule, actual: String, fileSuffix: String = "") {
val testDataFile = module.files.first().originalFile val testDataFile = module.files.first().originalFile
val txtFile = testDataFile.withExtension("$fileSuffix.txt") val expectedFile = testDataFile.withExtension("$fileSuffix.txt")
val irTxtFile = testDataFile.withSuffixAndExtension("$fileSuffix.ir", ".txt")
val isIr = module.targetBackend?.isIR == true
val expectedFile = if (isIr && irTxtFile.exists()) {
irTxtFile
} else {
txtFile
}
assertEqualsToFile(expectedFile, actual) assertEqualsToFile(expectedFile, actual)
if (isIr && txtFile.exists() && irTxtFile.exists() && txtFile.readText() == irTxtFile.readText()) {
fail { "JVM and JVM_IR golden files are identical. Remove $irTxtFile." }
}
} }
private val KOTLIN_METADATA_REGEX = "@kotlin\\.Metadata\\(.*\\)".toRegex() private val KOTLIN_METADATA_REGEX = "@kotlin\\.Metadata\\(.*\\)".toRegex()
@@ -160,19 +160,11 @@ internal class Kapt4Handler(testServices: TestServices) : AnalysisHandler<Kapt4C
fun Assertions.checkTxt(module: TestModule, actual: String) { fun Assertions.checkTxt(module: TestModule, actual: String) {
val testDataFile = module.files.first().originalFile val testDataFile = module.files.first().originalFile
val firFile = testDataFile.withExtension("fir.txt") val firFile = testDataFile.withExtension("fir.txt")
val irFile = testDataFile.withExtension("ir.txt")
val txtFile = testDataFile.withExtension("txt") val txtFile = testDataFile.withExtension("txt")
val expectedFile = sequenceOf(firFile, irFile, txtFile) val expectedFile = if (firFile.exists()) firFile else txtFile
.firstOrNull { it.exists() } ?: firFile
assertEqualsToFile(expectedFile, actual) assertEqualsToFile(expectedFile, actual)
if (firFile.exists()) { if (firFile.exists() && txtFile.exists() && txtFile.readText() == firFile.readText()) {
if (irFile.exists()) { fail { ".fir.txt and .txt golden files are identical. Remove $firFile." }
if (irFile.readText() == firFile.readText()) {
fail { ".fir.txt and .ir.txt golden files are identical. Remove $firFile." }
}
} else if (txtFile.exists() && txtFile.readText() == firFile.readText()) {
fail { ".fir.txt and .txt golden files are identical. Remove $firFile." }
}
} }
} }