diff --git a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt index 10f3fed5e9b..52e28169fb8 100644 --- a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt +++ b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt @@ -163,7 +163,7 @@ open class JvmIrCodegenFactory( SourceDeclarationsPreprocessor(psi2irContext).run(input.files) - if (pluginExtensions.isNotEmpty()) { + if (pluginExtensions.isNotEmpty() && psi2irContext.configuration.generateBodies) { // The plugin context contains unbound symbols right after construction and has to be // instantiated before we resolve unbound symbols and invoke any postprocessing steps. val pluginContext = IrPluginContextImpl( diff --git a/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/JvmCompilerWithKaptFacade.kt b/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/JvmCompilerWithKaptFacade.kt index 35a9223e3e8..cf50ca89577 100644 --- a/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/JvmCompilerWithKaptFacade.kt +++ b/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/JvmCompilerWithKaptFacade.kt @@ -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() { override val inputKind: TestArtifactKind 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( diff --git a/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/integration/AbstractKotlinKapt3IntegrationTestBase.kt b/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/integration/AbstractKotlinKapt3IntegrationTestBase.kt index 32a1a803941..60abcccc440 100644 --- a/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/integration/AbstractKotlinKapt3IntegrationTestBase.kt +++ b/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/integration/AbstractKotlinKapt3IntegrationTestBase.kt @@ -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 = emptyMap(), expectFailure: Boolean = false, + additionalPluginExtension: IrGenerationExtension? = null, process: (Set, 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) } -} \ No newline at end of file + + @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.") + } + } + ) { _, _, _, _ -> } +} diff --git a/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/integration/AbstractKotlinKapt3IntegrationTestRunner.kt b/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/integration/AbstractKotlinKapt3IntegrationTestRunner.kt index 0e659d1e6a5..5487652945c 100644 --- a/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/integration/AbstractKotlinKapt3IntegrationTestRunner.kt +++ b/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/integration/AbstractKotlinKapt3IntegrationTestRunner.kt @@ -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, private val supportedAnnotations: List, + private val additionalPluginExtension: IrGenerationExtension?, private val process: (Set, 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) }