diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirProviderImpl.kt index d901a779276..f4d7157c6d5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirProviderImpl.kt @@ -23,13 +23,15 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.types.ConeLookupTagBasedType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitorVoid -import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name class FirProviderImpl(val session: FirSession) : FirProvider() { override fun getFirCallableContainerFile(symbol: FirCallableSymbol<*>): FirFile? { + symbol.overriddenSymbol?.let { + return getFirCallableContainerFile(it) + } return state.callableContainerMap[symbol] } diff --git a/compiler/fir/resolve/testData/resolve/problems2.txt b/compiler/fir/resolve/testData/resolve/problems2.txt index 2ee2cc0d8b6..344f3c4f36d 100644 --- a/compiler/fir/resolve/testData/resolve/problems2.txt +++ b/compiler/fir/resolve/testData/resolve/problems2.txt @@ -8,8 +8,8 @@ FILE: problems2.kt ^find Null(null) } - public final fun intern(obj: R|T|): { - ^intern #(R|/obj|) + public final fun intern(obj: R|T|): R|kotlin/Int?| { + ^intern this@R|/Interner|.R|FakeOverride|(R|/obj|) } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt index f96c0d2f24b..eccfda79aea 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt @@ -11,4 +11,7 @@ import org.jetbrains.kotlin.fir.symbols.CallableId abstract class FirCallableSymbol> : AbstractFirBasedSymbol() { abstract val callableId: CallableId + + open val overriddenSymbol: FirCallableSymbol? + get() = null } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFunctionSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFunctionSymbol.kt index c2f41c50ebf..5dcf073a672 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFunctionSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFunctionSymbol.kt @@ -25,7 +25,7 @@ open class FirNamedFunctionSymbol( callableId: CallableId, val isFakeOverride: Boolean = false, // Actual for fake override only - val overriddenSymbol: FirNamedFunctionSymbol? = null + override val overriddenSymbol: FirNamedFunctionSymbol? = null ) : FirFunctionSymbol(callableId) class FirConstructorSymbol( diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirVariableSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirVariableSymbol.kt index 64968e22e60..14c2252ac97 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirVariableSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirVariableSymbol.kt @@ -22,7 +22,7 @@ open class FirPropertySymbol( callableId: CallableId, val isFakeOverride: Boolean = false, // Actual for fake override only - val overriddenSymbol: FirPropertySymbol? = null + override val overriddenSymbol: FirPropertySymbol? = null ) : FirVariableSymbol(callableId) class FirBackingFieldSymbol(callableId: CallableId) : FirVariableSymbol(callableId)