From f2078caf64525e2316cb0c8eb916169661b07f59 Mon Sep 17 00:00:00 2001 From: strangepleasures Date: Tue, 5 Sep 2023 23:23:24 +0000 Subject: [PATCH] [KAPT4] Support -Xmetadata-version in Kapt for testing with external projects --- .../kapt4/Kapt4AnalysisHandlerExtension.kt | 22 +++++++++++-------- .../kapt4/Kapt4ContextForStubGeneration.kt | 2 ++ .../kotlin/kapt4/Kapt4StubGenerator.kt | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4AnalysisHandlerExtension.kt b/plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4AnalysisHandlerExtension.kt index ec7334e3167..6c421de627b 100644 --- a/plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4AnalysisHandlerExtension.kt +++ b/plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4AnalysisHandlerExtension.kt @@ -86,23 +86,27 @@ private class Kapt4AnalysisHandlerExtension : FirAnalysisHandlerExtension() { logger.info(options.logString()) } - var context: Kapt4ContextForStubGeneration? = null return try { KtAnalysisSessionProvider.getInstance(module.project).analyze(module) { - context = Kapt4ContextForStubGeneration(options, withJdk = false, logger, this, psiFiles.filterIsInstance()) + Kapt4ContextForStubGeneration( + options, + false, + logger, + this, + psiFiles.filterIsInstance(), + configuration[CommonConfigurationKeys.METADATA_VERSION] + ).use { context -> + if (options.mode.generateStubs) + generateStubs(context) - if (options.mode.generateStubs) - generateStubs(context!!) - - if (options.mode.runAnnotationProcessing) - runProcessors(context!!, options, logger) + if (options.mode.runAnnotationProcessing) + runProcessors(context, options, logger) + } true } } catch (e: Exception) { logger.exception(e) false - } finally { - context?.close() } } diff --git a/plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4ContextForStubGeneration.kt b/plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4ContextForStubGeneration.kt index 8692240707c..c64b4738224 100644 --- a/plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4ContextForStubGeneration.kt +++ b/plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4ContextForStubGeneration.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.base.kapt3.KaptOptions import org.jetbrains.kotlin.kapt3.base.KaptContext import org.jetbrains.kotlin.kapt3.base.util.KaptLogger +import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtFile @@ -23,6 +24,7 @@ internal class Kapt4ContextForStubGeneration( logger: KaptLogger, val analysisSession: KtAnalysisSession, val files: List, + val overriddenMetadataVersion: BinaryVersion? = null ) : KaptContext(options, withJdk, logger) { val classes: Iterable = buildSet { files.flatMapTo(this) { file -> diff --git a/plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4StubGenerator.kt b/plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4StubGenerator.kt index 8da945165c3..cdc76b1c633 100644 --- a/plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4StubGenerator.kt +++ b/plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4StubGenerator.kt @@ -276,7 +276,7 @@ internal class Kapt4StubGenerator { private fun convertMetadataAnnotation(metadata: Metadata): JCAnnotation { val argumentsWithNames = mutableMapOf() if (metadata.kind != 1) argumentsWithNames[KIND_FIELD_NAME] = metadata.kind - argumentsWithNames[METADATA_VERSION_FIELD_NAME] = metadata.metadataVersion.toList() + argumentsWithNames[METADATA_VERSION_FIELD_NAME] = (overriddenMetadataVersion?.toArray() ?: metadata.metadataVersion).toList() if (metadata.data1.isNotEmpty()) argumentsWithNames[METADATA_DATA_FIELD_NAME] = metadata.data1.toList() if (metadata.data2.isNotEmpty()) argumentsWithNames[METADATA_STRINGS_FIELD_NAME] = metadata.data2.toList() if (metadata.extraString.isNotEmpty()) argumentsWithNames[METADATA_EXTRA_STRING_FIELD_NAME] = metadata.extraString