From 13d4d60afadc1ed4512910d11f33c34df11e1049 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Thu, 9 Dec 2021 11:30:16 +0300 Subject: [PATCH] Fir2Ir: pass Fir2IrExtensions to backend --- .../FirKotlinToJvmBytecodeCompiler.kt | 15 ++---- .../jvm/compiler/pipeline/compilerPipeline.kt | 5 +- .../compiler/pipeline/compilerPipelineData.kt | 6 +-- .../fir/backend/jvm/JvmFir2IrExtensions.kt | 48 ++++++++++++++----- .../kotlin/fir/backend/Fir2IrConverter.kt | 2 + .../kotlin/fir/backend/Fir2IrExtensions.kt | 3 ++ .../IncrementalFirJvmCompilerRunner.kt | 9 ++-- .../backend/jvm/JvmGeneratorExtensionsImpl.kt | 15 +----- .../kotlin/backend/jvm/JvmIrCodegenFactory.kt | 8 ++-- .../org/jetbrains/kotlin/ir/util/IrUtils.kt | 15 +++++- .../frontend/fir/Fir2IrResultsConverter.kt | 11 ++--- .../kotlin/codegen/GenerationUtils.kt | 9 ++-- 12 files changed, 82 insertions(+), 64 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt index 8c95b5f17b9..01b81c87622 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.cli.jvm.compiler import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices import org.jetbrains.kotlin.asJava.FilteredJvmDiagnostics import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension -import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl +import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensions import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory import org.jetbrains.kotlin.cli.common.CLICompiler import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys @@ -161,19 +161,15 @@ object FirKotlinToJvmBytecodeCompiler { performanceManager?.notifyGenerationStarted() performanceManager?.notifyIRTranslationStarted() - val fir2IrResult = firResult.session.convertToIr( - firResult.scopeSession, firResult.fir, - JvmFir2IrExtensions(moduleConfiguration), - irGenerationExtensions - ) + val fir2IrExtensions = JvmFir2IrExtensions(moduleConfiguration) + val fir2IrResult = firResult.session.convertToIr(firResult.scopeSession, firResult.fir, fir2IrExtensions, irGenerationExtensions) performanceManager?.notifyIRTranslationFinished() - val extensions = JvmGeneratorExtensionsImpl(moduleConfiguration) val generationState = runBackend( allSources, fir2IrResult, - extensions, + fir2IrExtensions, firResult.session, diagnosticsReporter ) @@ -316,7 +312,7 @@ object FirKotlinToJvmBytecodeCompiler { private fun CompilationContext.runBackend( ktFiles: List, fir2IrResult: Fir2IrResult, - extensions: JvmGeneratorExtensionsImpl, + extensions: JvmGeneratorExtensions, session: FirSession, diagnosticsReporter: BaseDiagnosticsCollector ): GenerationState { @@ -325,7 +321,6 @@ object FirKotlinToJvmBytecodeCompiler { val codegenFactory = JvmIrCodegenFactory( moduleConfiguration, moduleConfiguration.get(CLIConfigurationKeys.PHASE_CONFIG), - jvmGeneratorExtensions = extensions ) val generationState = GenerationState.Builder( diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt index 3c7e056e1bc..8f0e2393bc5 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.KtSourceFile import org.jetbrains.kotlin.KtVirtualFileSourceFile import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension -import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.CommonCompilerPerformanceManager @@ -48,6 +47,7 @@ import org.jetbrains.kotlin.fir.DependencyListForCliModule import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension +import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider @@ -185,7 +185,7 @@ fun convertAnalyzedFirToIr( analysisResults: ModuleCompilerAnalyzedOutput, environment: ModuleCompilerEnvironment ): ModuleCompilerIrBackendInput { - val extensions = JvmGeneratorExtensionsImpl(input.configuration) + val extensions = JvmFir2IrExtensions(input.configuration) // fir2ir val irGenerationExtensions = @@ -215,7 +215,6 @@ fun generateCodeFromIr( val codegenFactory = JvmIrCodegenFactory( input.configuration, input.configuration.get(CLIConfigurationKeys.PHASE_CONFIG), - jvmGeneratorExtensions = input.extensions ) val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipelineData.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipelineData.kt index 9262543c686..a550a07bcb7 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipelineData.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipelineData.kt @@ -6,22 +6,20 @@ package org.jetbrains.kotlin.cli.jvm.compiler.pipeline import org.jetbrains.kotlin.KtSourceFile -import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.backend.Fir2IrComponents +import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.modules.TargetId -import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.platform.TargetPlatform -import java.io.File // --- @@ -55,7 +53,7 @@ data class ModuleCompilerAnalyzedOutput( data class ModuleCompilerIrBackendInput( val targetId: TargetId, val configuration: CompilerConfiguration, - val extensions: JvmGeneratorExtensionsImpl, + val extensions: JvmFir2IrExtensions, val irModuleFragment: IrModuleFragment, val symbolTable: SymbolTable, val components: Fir2IrComponents, diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/JvmFir2IrExtensions.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/JvmFir2IrExtensions.kt index 9317c6ed325..31fdc76c1d0 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/JvmFir2IrExtensions.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/JvmFir2IrExtensions.kt @@ -5,10 +5,8 @@ package org.jetbrains.kotlin.fir.backend.jvm -import org.jetbrains.kotlin.backend.jvm.CachedFieldsForObjectInstances -import org.jetbrains.kotlin.backend.jvm.JvmFileFacadeClass -import org.jetbrains.kotlin.backend.jvm.JvmIrTypeSystemContext -import org.jetbrains.kotlin.backend.jvm.handleJvmStaticInSingletonObjects +import org.jetbrains.kotlin.backend.common.serialization.signature.PublicIdSignatureComputer +import org.jetbrains.kotlin.backend.jvm.* import org.jetbrains.kotlin.backend.jvm.serialization.deserializeFromByteArray import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.JVMConfigurationKeys @@ -17,21 +15,49 @@ import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.fir.backend.Fir2IrComponents import org.jetbrains.kotlin.fir.backend.Fir2IrExtensions import org.jetbrains.kotlin.fir.backend.FirIrProvider -import org.jetbrains.kotlin.ir.declarations.IrClass -import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin -import org.jetbrains.kotlin.ir.declarations.IrMemberWithContainerSource +import org.jetbrains.kotlin.ir.IrBuiltIns +import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler +import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl +import org.jetbrains.kotlin.ir.symbols.impl.DescriptorlessExternalPackageFragmentSymbol +import org.jetbrains.kotlin.ir.util.SymbolTable +import org.jetbrains.kotlin.ir.util.constructors import org.jetbrains.kotlin.ir.util.createParameterDeclarations +import org.jetbrains.kotlin.ir.util.createSpecialAnnotationClass import org.jetbrains.kotlin.load.kotlin.FacadeClassSource import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.jvm.JvmClassName -class JvmFir2IrExtensions(configuration: CompilerConfiguration) : Fir2IrExtensions { +class JvmFir2IrExtensions(configuration: CompilerConfiguration) : Fir2IrExtensions, JvmGeneratorExtensions { - // TODO: make these available to backend context - private val classNameOverride: MutableMap = mutableMapOf() - private val cachedFields = CachedFieldsForObjectInstances(IrFactoryImpl, configuration.languageVersionSettings) + override val classNameOverride: MutableMap = mutableMapOf() + override val cachedFields = CachedFieldsForObjectInstances(IrFactoryImpl, configuration.languageVersionSettings) + + private val kotlinIrInternalPackage = + IrExternalPackageFragmentImpl(DescriptorlessExternalPackageFragmentSymbol(), IrBuiltIns.KOTLIN_INTERNAL_IR_FQN) + + private val specialAnnotationConstructors = mutableListOf() + + private val rawTypeAnnotationClass = + createSpecialAnnotationClass(JvmSymbols.RAW_TYPE_ANNOTATION_FQ_NAME, kotlinIrInternalPackage) + + override val rawTypeAnnotationConstructor: IrConstructor = + rawTypeAnnotationClass.constructors.single() + + private fun createSpecialAnnotationClass(fqn: FqName, parent: IrPackageFragment) = + IrFactoryImpl.createSpecialAnnotationClass(fqn, parent).apply { + specialAnnotationConstructors.add(constructors.single()) + } + + override fun registerDeclarations(symbolTable: SymbolTable) { + val signatureComputer = PublicIdSignatureComputer(JvmIrMangler) + specialAnnotationConstructors.forEach { constructor -> + symbolTable.declareConstructorWithSignature(signatureComputer.composePublicIdSignature(constructor, false), constructor.symbol) + } + } override val irNeedsDeserialization: Boolean = configuration.get(JVMConfigurationKeys.SERIALIZE_IR, JvmSerializeIrMode.NONE) != JvmSerializeIrMode.NONE diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index de84e14a584..98bc2d7c639 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -460,6 +460,8 @@ class Fir2IrConverter( val callGenerator = CallAndReferenceGenerator(components, fir2irVisitor, conversionScope) components.callGenerator = callGenerator + fir2IrExtensions.registerDeclarations(symbolTable) + val irModuleFragment = IrModuleFragmentImpl(moduleDescriptor, irBuiltIns) val allFirFiles = buildList { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrExtensions.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrExtensions.kt index 5b3815e7fe0..c4c3c0c5a11 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrExtensions.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrExtensions.kt @@ -7,12 +7,14 @@ package org.jetbrains.kotlin.fir.backend import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrMemberWithContainerSource +import org.jetbrains.kotlin.ir.util.SymbolTable interface Fir2IrExtensions { val irNeedsDeserialization: Boolean fun generateOrGetFacadeClass(declaration: IrMemberWithContainerSource, components: Fir2IrComponents): IrClass? fun deserializeToplevelClass(irClass: IrClass, components: Fir2IrComponents): Boolean + fun registerDeclarations(symbolTable: SymbolTable) object Default : Fir2IrExtensions { override val irNeedsDeserialization: Boolean @@ -20,5 +22,6 @@ interface Fir2IrExtensions { override fun generateOrGetFacadeClass(declaration: IrMemberWithContainerSource, components: Fir2IrComponents): IrClass? = null override fun deserializeToplevelClass(irClass: IrClass, components: Fir2IrComponents): Boolean = false + override fun registerDeclarations(symbolTable: SymbolTable) {} } } \ No newline at end of file diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt index ca46740b2bb..0e202dacfac 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.KtIoFileSourceFile import org.jetbrains.kotlin.KtSourceFile import org.jetbrains.kotlin.KtVirtualFileSourceFile import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension -import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS import org.jetbrains.kotlin.build.report.BuildReporter @@ -45,6 +44,7 @@ import org.jetbrains.kotlin.fir.backend.Fir2IrConverter import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter +import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions import org.jetbrains.kotlin.fir.languageVersionSettings import org.jetbrains.kotlin.fir.moduleData import org.jetbrains.kotlin.fir.resolve.providers.firProvider @@ -267,10 +267,9 @@ class IncrementalFirJvmCompilerRunner( performanceManager?.notifyGenerationStarted() performanceManager?.notifyIRTranslationStarted() - val extensions = JvmGeneratorExtensionsImpl(configuration) + val extensions = JvmFir2IrExtensions(configuration) val irGenerationExtensions = (projectEnvironment as? VfsBasedProjectEnvironment)?.project?.let { IrGenerationExtension.getInstances(it) }.orEmpty() - val mangler = JvmDescriptorMangler(null) val signaturer = JvmIdSignatureDescriptor(JvmDescriptorMangler(null)) val allCommonFirFiles = cycleResult.session.moduleData.dependsOnDependencies .map { it.session } @@ -279,7 +278,7 @@ class IncrementalFirJvmCompilerRunner( val (irModuleFragment, symbolTable, components) = Fir2IrConverter.createModuleFragment( cycleResult.session, cycleResult.scopeSession, cycleResult.fir + allCommonFirFiles, - cycleResult.session.languageVersionSettings, mangler, signaturer, + cycleResult.session.languageVersionSettings, signaturer, extensions, FirJvmKotlinMangler(cycleResult.session), IrFactoryImpl, FirJvmVisibilityConverter, Fir2IrJvmSpecialAnnotationSymbolProvider(), @@ -369,4 +368,4 @@ fun CompilerConfiguration.configureSourceRootsFromSources( } } } -} \ No newline at end of file +} diff --git a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmGeneratorExtensionsImpl.kt b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmGeneratorExtensionsImpl.kt index a31453c5750..73198b6188d 100644 --- a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmGeneratorExtensionsImpl.kt +++ b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmGeneratorExtensionsImpl.kt @@ -17,8 +17,6 @@ import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler -import org.jetbrains.kotlin.ir.builders.declarations.addConstructor -import org.jetbrains.kotlin.ir.builders.declarations.buildClass import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl @@ -173,17 +171,8 @@ open class JvmGeneratorExtensionsImpl( private val specialAnnotationConstructors = mutableListOf() private fun createSpecialAnnotationClass(fqn: FqName, parent: IrPackageFragment) = - IrFactoryImpl.buildClass { - kind = ClassKind.ANNOTATION_CLASS - name = fqn.shortName() - }.apply { - createImplicitParameterDeclarationWithWrappedDescriptor() - this.parent = parent - addConstructor { - isPrimary = true - }.also { constructor -> - specialAnnotationConstructors.add(constructor) - } + IrFactoryImpl.createSpecialAnnotationClass(fqn, parent).apply { + specialAnnotationConstructors.add(constructors.single()) } override fun createCustomSuperConstructorCall( 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 6d145ec240e..8bc6e1814d0 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 @@ -8,10 +8,8 @@ package org.jetbrains.kotlin.backend.jvm import org.jetbrains.kotlin.analyzer.hasJdkCapability import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl -import org.jetbrains.kotlin.backend.common.phaser.CompilerPhase import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.phaser.invokeToplevel -import org.jetbrains.kotlin.backend.common.phaser.then import org.jetbrains.kotlin.backend.common.serialization.DescriptorByIdSignatureFinderImpl import org.jetbrains.kotlin.backend.jvm.intrinsics.IrIntrinsicMethods import org.jetbrains.kotlin.backend.jvm.ir.getIoFile @@ -64,7 +62,7 @@ open class JvmIrCodegenFactory( val symbolTable: SymbolTable, val phaseConfig: PhaseConfig?, val irProviders: List, - val extensions: JvmGeneratorExtensionsImpl, + val extensions: JvmGeneratorExtensions, val backendExtension: JvmBackendExtension, val notifyCodegenStart: () -> Unit ) : CodegenFactory.BackendInput @@ -294,11 +292,11 @@ open class JvmIrCodegenFactory( state: GenerationState, irModuleFragment: IrModuleFragment, symbolTable: SymbolTable, - extensions: JvmGeneratorExtensionsImpl, + extensions: JvmGeneratorExtensions, backendExtension: JvmBackendExtension, notifyCodegenStart: () -> Unit = {} ) { - val irProviders = configureBuiltInsAndGenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, extensions) + val irProviders = configureBuiltInsAndGenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, jvmGeneratorExtensions) generateModule( state, JvmIrBackendInput(irModuleFragment, symbolTable, phaseConfig, irProviders, extensions, backendExtension, notifyCodegenStart) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt index 89b94caee90..17ee395046a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.* import org.jetbrains.kotlin.ir.builders.declarations.addConstructor +import org.jetbrains.kotlin.ir.builders.declarations.buildClass import org.jetbrains.kotlin.ir.builders.declarations.buildReceiverParameter import org.jetbrains.kotlin.ir.builders.declarations.buildTypeParameter import org.jetbrains.kotlin.ir.declarations.* @@ -986,6 +987,18 @@ fun IrClass.createImplicitParameterDeclarationWithWrappedDescriptor() { thisReceiver = buildReceiverParameter(this, IrDeclarationOrigin.INSTANCE_RECEIVER, symbol.typeWithParameters(typeParameters)) } +fun IrFactory.createSpecialAnnotationClass(fqn: FqName, parent: IrPackageFragment) = + buildClass { + kind = ClassKind.ANNOTATION_CLASS + name = fqn.shortName() + }.apply { + createImplicitParameterDeclarationWithWrappedDescriptor() + this.parent = parent + addConstructor { + isPrimary = true + } + } + @Suppress("UNCHECKED_CAST") fun isElseBranch(branch: IrBranch) = branch is IrElseBranch || ((branch.condition as? IrConst)?.value == true) @@ -1242,4 +1255,4 @@ private fun computeAllOverridden(function: IrSimpleFunction, result: MutableSet< } fun IrBuiltIns.getKFunctionType(returnType: IrType, parameterTypes: List) = - kFunctionN(parameterTypes.size).typeWith(parameterTypes + returnType) \ No newline at end of file + kFunctionN(parameterTypes.size).typeWith(parameterTypes + returnType) diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrResultsConverter.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrResultsConverter.kt index 5e8ee576fc6..8d316ed9879 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrResultsConverter.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrResultsConverter.kt @@ -42,14 +42,12 @@ class Fir2IrResultsConverter( val compilerConfigurationProvider = testServices.compilerConfigurationProvider val configuration = compilerConfigurationProvider.getCompilerConfiguration(module) - val (irModuleFragment, symbolTable, components) = inputArtifact.firAnalyzerFacade.convertToIr( - JvmFir2IrExtensions(configuration) - ) + val fir2IrExtensions = JvmFir2IrExtensions(configuration) + val (irModuleFragment, symbolTable, components) = inputArtifact.firAnalyzerFacade.convertToIr(fir2IrExtensions) val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext - val extensions = JvmGeneratorExtensionsImpl(configuration) val phaseConfig = configuration.get(CLIConfigurationKeys.PHASE_CONFIG) - val codegenFactory = JvmIrCodegenFactory(configuration, phaseConfig, jvmGeneratorExtensions = extensions) + val codegenFactory = JvmIrCodegenFactory(configuration, phaseConfig) // TODO: handle fir from light tree val ktFiles = inputArtifact.firFiles.values.mapNotNull { it.psi as KtFile? } @@ -73,6 +71,7 @@ class Fir2IrResultsConverter( FirJvmBackendClassResolver(components) ).build() + val extensions = JvmGeneratorExtensionsImpl(configuration) val irProviders = codegenFactory.configureBuiltInsAndGenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, extensions) return IrBackendInput.JvmIrBackendInput( @@ -83,7 +82,7 @@ class Fir2IrResultsConverter( symbolTable, phaseConfig, irProviders, - extensions, + fir2IrExtensions, FirJvmBackendExtension(inputArtifact.session, components), notifyCodegenStart = {}, ), diff --git a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt index 223245cff73..5055cd89ab2 100644 --- a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt +++ b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt @@ -114,16 +114,13 @@ object GenerationUtils { emptyList(), IrGenerationExtension.getInstances(project) ) - val (moduleFragment, symbolTable, components) = firAnalyzerFacade.convertToIr( - JvmFir2IrExtensions(configuration) - ) + val fir2IrExtensions = JvmFir2IrExtensions(configuration) + val (moduleFragment, symbolTable, components) = firAnalyzerFacade.convertToIr(fir2IrExtensions) val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext - val extensions = JvmGeneratorExtensionsImpl(configuration) val codegenFactory = JvmIrCodegenFactory( configuration, configuration.get(CLIConfigurationKeys.PHASE_CONFIG), - jvmGeneratorExtensions = extensions ) val generationState = GenerationState.Builder( @@ -137,7 +134,7 @@ object GenerationUtils { generationState.beforeCompile() generationState.oldBEInitTrace(files) codegenFactory.generateModuleInFrontendIRMode( - generationState, moduleFragment, symbolTable, extensions, FirJvmBackendExtension(session, components), + generationState, moduleFragment, symbolTable, fir2IrExtensions, FirJvmBackendExtension(session, components), ) {} generationState.factory.done()