[LL API] Seek for the containing file in the right module (KTIJ-22808)

It's not guaranteed that the declaration for which we need a containing
file is from the currently analyzed module.
This commit is contained in:
Yan Zhulanow
2022-10-19 00:02:26 +09:00
committed by teamcity
parent 76931522e0
commit 01009ed75b
2 changed files with 6 additions and 4 deletions
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.originalForSubstitutionOverride
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
@@ -66,8 +67,8 @@ internal class LLFirProvider(
override fun getFirCallableContainerFile(symbol: FirCallableSymbol<*>): FirFile? {
symbol.fir.originalForSubstitutionOverride?.symbol?.let {
return getFirCallableContainerFile(it)
symbol.fir.originalForSubstitutionOverride?.symbol?.let { originalSymbol ->
return originalSymbol.moduleData.session.firProvider.getFirCallableContainerFile(originalSymbol)
}
val fir = symbol.fir
return when {
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
@@ -22,8 +23,8 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: FirKotli
override val symbolProvider: FirSymbolProvider = SymbolProvider()
override fun getFirCallableContainerFile(symbol: FirCallableSymbol<*>): FirFile? {
symbol.originalIfFakeOverride()?.let {
return getFirCallableContainerFile(it)
symbol.originalIfFakeOverride()?.let { originalSymbol ->
return originalSymbol.moduleData.session.firProvider.getFirCallableContainerFile(originalSymbol)
}
if (symbol is FirBackingFieldSymbol) {
return getFirCallableContainerFile(symbol.fir.propertySymbol)