[fir2ir] Use the correct 'FirProvider' for fetching the containing file

In the IDE, declarations may come from different modules.
This commit is contained in:
Yan Zhulanow
2023-06-01 17:20:30 +09:00
committed by Space Team
parent ba0f8c8735
commit f5c9c1d78e
2 changed files with 10 additions and 8 deletions
@@ -44,8 +44,6 @@ class Fir2IrClassifierStorage(
private val components: Fir2IrComponents,
commonMemberStorage: Fir2IrCommonMemberStorage
) : Fir2IrComponents by components {
private val firProvider = session.firProvider
private val classCache: MutableMap<FirRegularClass, IrClass> = commonMemberStorage.classCache
private val localClassesCreatedOnTheFly: MutableMap<FirClass, IrClass> = mutableMapOf()
@@ -237,7 +235,7 @@ class Fir2IrClassifierStorage(
// finding the parent class that actually contains the [klass] in the tree - it is the root one that should be created on the fly
val classOrLocalParent = generateSequence(klass) { c ->
(c as? FirRegularClass)?.containingClassForLocalAttr?.let { lookupTag ->
(firProvider.symbolProvider.getSymbolByLookupTag(lookupTag)?.fir as? FirClass)?.takeIf {
(session.firProvider.symbolProvider.getSymbolByLookupTag(lookupTag)?.fir as? FirClass)?.takeIf {
it.declarations.contains(c)
}
}
@@ -528,7 +526,9 @@ class Fir2IrClassifierStorage(
predefinedOrigin: IrDeclarationOrigin? = null,
): IrEnumEntry {
getCachedIrEnumEntry(enumEntry)?.let { return it }
val containingFile = firProvider.getFirCallableContainerFile(enumEntry.symbol)
val firProviderForEntry = enumEntry.moduleData.session.firProvider
val containingFile = firProviderForEntry.getFirCallableContainerFile(enumEntry.symbol)
@Suppress("NAME_SHADOWING")
val predefinedOrigin = predefinedOrigin ?: if (containingFile != null) {
@@ -618,7 +618,8 @@ class Fir2IrClassifierStorage(
}
val irClass = firClass.convertWithOffsets { startOffset, endOffset ->
declareIrClass(signature) { irClassSymbol ->
Fir2IrLazyClass(components, startOffset, endOffset, firClass.irOrigin(firProvider), firClass, irClassSymbol).apply {
val firClassOrigin = firClass.irOrigin(session.firProvider)
Fir2IrLazyClass(components, startOffset, endOffset, firClassOrigin, firClass, irClassSymbol).apply {
parent = irParent
}
}
@@ -74,8 +74,6 @@ class Fir2IrDeclarationStorage(
commonMemberStorage: Fir2IrCommonMemberStorage
) : Fir2IrComponents by components {
private val firProvider = session.firProvider
private val fragmentCache: ConcurrentHashMap<FqName, ExternalPackageFragments> = ConcurrentHashMap()
private class ExternalPackageFragments(
@@ -1818,8 +1816,11 @@ class Fir2IrDeclarationStorage(
return when (val firDeclaration = firVariableSymbol.fir) {
is FirEnumEntry -> {
classifierStorage.getCachedIrEnumEntry(firDeclaration)?.let { return it.symbol }
val containingFile = firProvider.getFirCallableContainerFile(firVariableSymbol)
val irParentClass = firDeclaration.containingClassLookupTag()?.let { classifierStorage.findIrClass(it) }
val firProviderForSymbol = firVariableSymbol.moduleData.session.firProvider
val containingFile = firProviderForSymbol.getFirCallableContainerFile(firVariableSymbol)
classifierStorage.createIrEnumEntry(
firDeclaration,
irParent = irParentClass,