Kapt+JVM_IR: do not run IR plugins in kapt mode
Because in kapt stub generation mode (aka ClassBuilderMode.KAPT3, aka generateBodies=false in psi2ir), method bodies are not generated and compiler plugins such as kotlinx-serialization might not expect that. #KT-54245 Fixed
This commit is contained in:
committed by
Space Team
parent
5848b2fde6
commit
a594434a95
+8
-1
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.kapt3.test
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.codegen.ClassBuilderMode
|
||||
import org.jetbrains.kotlin.codegen.GenerationUtils
|
||||
import org.jetbrains.kotlin.codegen.OriginCollectingClassBuilderFactory
|
||||
@@ -13,7 +14,10 @@ import org.jetbrains.kotlin.kapt3.util.MessageCollectorBackedKaptLogger
|
||||
import org.jetbrains.kotlin.test.model.*
|
||||
import org.jetbrains.kotlin.test.services.*
|
||||
|
||||
class JvmCompilerWithKaptFacade(private val testServices: TestServices) :
|
||||
class JvmCompilerWithKaptFacade(
|
||||
private val testServices: TestServices,
|
||||
private val additionalPluginExtension: IrGenerationExtension? = null,
|
||||
) :
|
||||
AbstractTestFacade<ResultingArtifact.Source, KaptContextBinaryArtifact>() {
|
||||
override val inputKind: TestArtifactKind<ResultingArtifact.Source>
|
||||
get() = SourcesKind
|
||||
@@ -26,6 +30,9 @@ class JvmCompilerWithKaptFacade(private val testServices: TestServices) :
|
||||
override fun transform(module: TestModule, inputArtifact: ResultingArtifact.Source): KaptContextBinaryArtifact {
|
||||
val configurationProvider = testServices.compilerConfigurationProvider
|
||||
val project = configurationProvider.getProject(module)
|
||||
if (additionalPluginExtension != null) {
|
||||
IrGenerationExtension.registerExtension(project, additionalPluginExtension)
|
||||
}
|
||||
val ktFiles = testServices.sourceFileProvider.getKtFilesForSourceFiles(module.files, project, findViaVfs = true).values.toList()
|
||||
val classBuilderFactory = OriginCollectingClassBuilderFactory(ClassBuilderMode.KAPT3)
|
||||
val generationState = GenerationUtils.compileFiles(
|
||||
|
||||
+17
-1
@@ -6,7 +6,10 @@
|
||||
package org.jetbrains.kotlin.kapt3.test.integration
|
||||
|
||||
import org.jetbrains.kotlin.analyzer.CompilationErrorException
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||
import org.jetbrains.kotlin.kapt3.javac.KaptJavaFileObject
|
||||
import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertEquals
|
||||
import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertTrue
|
||||
@@ -14,6 +17,7 @@ import org.jetbrains.kotlin.test.TargetBackend
|
||||
import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertNotNull
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.TestInfo
|
||||
import org.junit.jupiter.api.fail
|
||||
import java.io.File
|
||||
import javax.annotation.processing.ProcessingEnvironment
|
||||
import javax.annotation.processing.RoundEnvironment
|
||||
@@ -38,6 +42,7 @@ abstract class AbstractKotlinKapt3IntegrationTestBase(private val testInfo: Test
|
||||
vararg supportedAnnotations: String,
|
||||
options: Map<String, String> = emptyMap(),
|
||||
expectFailure: Boolean = false,
|
||||
additionalPluginExtension: IrGenerationExtension? = null,
|
||||
process: (Set<TypeElement>, RoundEnvironment, ProcessingEnvironment, Kapt3ExtensionForTests) -> Unit
|
||||
) {
|
||||
val file = File(TEST_DATA_DIR, "$name.kt")
|
||||
@@ -45,6 +50,7 @@ abstract class AbstractKotlinKapt3IntegrationTestBase(private val testInfo: Test
|
||||
targetBackend,
|
||||
options,
|
||||
supportedAnnotations.toList(),
|
||||
additionalPluginExtension,
|
||||
process
|
||||
).apply {
|
||||
initTestInfo(testInfo)
|
||||
@@ -241,4 +247,14 @@ abstract class AbstractKotlinKapt3IntegrationTestBase(private val testInfo: Test
|
||||
diagnostics.assertContainsDiagnostic("warning: a warning from processor", CompilerMessageSeverity.STRONG_WARNING)
|
||||
diagnostics.assertContainsDiagnostic("Note: a note from processor", CompilerMessageSeverity.INFO)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testKt54245() = test(
|
||||
"Simple", "test.MyAnnotation",
|
||||
additionalPluginExtension = object : IrGenerationExtension {
|
||||
override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) {
|
||||
fail("IR generation extensions should not be run in kapt mode.")
|
||||
}
|
||||
}
|
||||
) { _, _, _, _ -> }
|
||||
}
|
||||
|
||||
+3
-1
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.kapt3.test.integration
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.kapt3.test.JvmCompilerWithKaptFacade
|
||||
import org.jetbrains.kotlin.kapt3.test.KaptContextBinaryArtifact
|
||||
import org.jetbrains.kotlin.kapt3.test.KaptEnvironmentConfigurator
|
||||
@@ -27,6 +28,7 @@ class AbstractKotlinKapt3IntegrationTestRunner(
|
||||
targetBackend: TargetBackend,
|
||||
private val processorOptions: Map<String, String>,
|
||||
private val supportedAnnotations: List<String>,
|
||||
private val additionalPluginExtension: IrGenerationExtension?,
|
||||
private val process: (Set<TypeElement>, RoundEnvironment, ProcessingEnvironment, Kapt3ExtensionForTests) -> Unit
|
||||
) : AbstractKotlinCompilerWithTargetBackendTest(targetBackend) {
|
||||
|
||||
@@ -55,7 +57,7 @@ class AbstractKotlinKapt3IntegrationTestRunner(
|
||||
{ KaptIntegrationEnvironmentConfigurator(it, processorOptions, supportedAnnotations, process) }
|
||||
)
|
||||
|
||||
facadeStep(::JvmCompilerWithKaptFacade)
|
||||
facadeStep { services -> JvmCompilerWithKaptFacade(services, additionalPluginExtension) }
|
||||
handlersStep(KaptContextBinaryArtifact.Kind) {
|
||||
useHandlers(::KaptIntegrationStubsDumpHandler, ::ProcessorWasCalledHandler)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user