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 a26d916920f..21b0fa76db0 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 @@ -35,10 +35,13 @@ object Fir2IrConverter { typeTranslator.constantValueGenerator = constantValueGenerator val builtIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, signaturer, symbolTable) val sourceManager = PsiSourceManager() - val fir2irTransformer = Fir2IrVisitor(session, moduleDescriptor, symbolTable, sourceManager, builtIns, fakeOverrideMode) + val fir2irVisitor = Fir2IrVisitor(session, moduleDescriptor, symbolTable, sourceManager, builtIns, fakeOverrideMode) val irFiles = mutableListOf() for (firFile in firFiles) { - val irFile = firFile.accept(fir2irTransformer, null) as IrFile + fir2irVisitor.registerFile(firFile) + } + for (firFile in firFiles) { + val irFile = firFile.accept(fir2irVisitor, null) as IrFile val fileEntry = sourceManager.getOrCreateFileEntry(firFile.psi as KtFile) sourceManager.putFileEntry(irFile, fileEntry) irFiles += irFile diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 639ae567c01..b3933310463 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -80,6 +80,10 @@ class Fir2IrDeclarationStorage( fileCache[firFile] = irFile } + fun getIrFile(firFile: FirFile): IrFile { + return fileCache[firFile]!! + } + fun enterScope(descriptor: DeclarationDescriptor) { irSymbolTable.enterScope(descriptor) if (descriptor is WrappedSimpleFunctionDescriptor || @@ -525,7 +529,7 @@ class Fir2IrDeclarationStorage( fun getIrFunction( function: FirSimpleFunction, - irParent: IrDeclarationParent? = null, + irParent: IrDeclarationParent?, shouldLeaveScope: Boolean = false, origin: IrDeclarationOrigin = IrDeclarationOrigin.DEFINED ): IrSimpleFunction { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index 6c4cb62baf2..d7a5748a042 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -87,14 +87,16 @@ class Fir2IrVisitor( TODO("Should not be here: ${element.render()}") } + fun registerFile(file: FirFile) { + val irFile = IrFileImpl( + sourceManager.getOrCreateFileEntry(file.psi as KtFile), + moduleDescriptor.getPackage(file.packageFqName).fragments.first() + ) + declarationStorage.registerFile(file, irFile) + } + override fun visitFile(file: FirFile, data: Any?): IrFile { - return conversionScope.withParent( - IrFileImpl( - sourceManager.getOrCreateFileEntry(file.psi as KtFile), - moduleDescriptor.getPackage(file.packageFqName).fragments.first() - ) - ) { - declarationStorage.registerFile(file, this) + return conversionScope.withParent(declarationStorage.getIrFile(file)) { file.declarations.forEach { val irDeclaration = it.toIrDeclaration() ?: return@forEach declarations += irDeclaration