FIR2IR: fix top-level parent settings thus fixing Cli.testFirHello

This commit is contained in:
Mikhail Glukhikh
2019-10-03 11:46:47 +03:00
parent 1b7b546249
commit 7e87357ed0
2 changed files with 17 additions and 3 deletions
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
import org.jetbrains.kotlin.fir.descriptors.FirPackageFragmentDescriptor
import org.jetbrains.kotlin.fir.expressions.FirVariable
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.FirProvider
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.getOrPut
import org.jetbrains.kotlin.fir.service
@@ -44,8 +45,12 @@ class Fir2IrDeclarationStorage(
) {
private val firSymbolProvider = session.service<FirSymbolProvider>()
private val firProvider = session.service<FirProvider>()
private val fragmentCache = mutableMapOf<FqName, IrExternalPackageFragment>()
private val fileCache = mutableMapOf<FirFile, IrFile>()
private val classCache = mutableMapOf<FirRegularClass, IrClass>()
private val typeParameterCache = mutableMapOf<FirTypeParameter, IrTypeParameter>()
@@ -62,6 +67,10 @@ class Fir2IrDeclarationStorage(
private val unitType = session.builtinTypes.unitType.toIrType(session, this)
fun registerFile(firFile: FirFile, irFile: IrFile) {
fileCache[firFile] = irFile
}
fun enterScope(descriptor: DeclarationDescriptor) {
irSymbolTable.enterScope(descriptor)
if (descriptor is WrappedSimpleFunctionDescriptor ||
@@ -219,8 +228,13 @@ class Fir2IrDeclarationStorage(
null
}
} else {
val packageFqName = callableId.packageName
getIrExternalPackageFragment(packageFqName)
val containerFile = firProvider.getFirCallableContainerFile(firBasedSymbol)
if (containerFile != null) {
fileCache[containerFile]
} else {
val packageFqName = callableId.packageName
getIrExternalPackageFragment(packageFqName)
}
}
}
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.builders.*
@@ -142,6 +141,7 @@ class Fir2IrVisitor(
sourceManager.getOrCreateFileEntry(file.psi as KtFile),
moduleDescriptor.findPackageFragmentForFile(file)
).withParent {
declarationStorage.registerFile(file, this)
file.declarations.forEach {
val irDeclaration = it.toIrDeclaration() ?: return@forEach
declarations += irDeclaration