diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt index 88913c34eca..c8be97684ea 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt @@ -105,13 +105,14 @@ class FirTypeIntersectionScope private constructor( val intersectionOverride = intersectionOverrides.getOrPut(mostSpecific) { val newModality = chooseIntersectionOverrideModality(extractedOverrides) val newVisibility = chooseIntersectionVisibility(extractedOverrides) + val extractedOverridesSymbols = extractedOverrides.map { it.member } @Suppress("UNCHECKED_CAST") when (mostSpecific) { is FirNamedFunctionSymbol -> { - createIntersectionOverride(mostSpecific, newModality, newVisibility) + createIntersectionOverride(mostSpecific, extractedOverridesSymbols, newModality, newVisibility) } is FirPropertySymbol -> { - createIntersectionOverride(mostSpecific, newModality, newVisibility) + createIntersectionOverride(mostSpecific, extractedOverridesSymbols, newModality, newVisibility) } else -> { throw IllegalStateException("Should not be here") @@ -255,16 +256,18 @@ class FirTypeIntersectionScope private constructor( private fun createIntersectionOverride( mostSpecific: FirNamedFunctionSymbol, + overrides: Collection>, newModality: Modality, newVisibility: Visibility, ): FirNamedFunctionSymbol { val newSymbol = - FirNamedFunctionSymbol( + FirIntersectionOverrideFunctionSymbol( CallableId( dispatchReceiverType.classId ?: mostSpecific.dispatchReceiverClassOrNull()?.classId!!, mostSpecific.fir.name - ) + ), + overrides ) val mostSpecificFunction = mostSpecific.fir FirFakeOverrideGenerator.createCopyForFirFunction( @@ -282,10 +285,11 @@ class FirTypeIntersectionScope private constructor( private fun createIntersectionOverride( mostSpecific: FirPropertySymbol, + overrides: Collection>, newModality: Modality, newVisibility: Visibility, ): FirPropertySymbol { - val newSymbol = FirPropertySymbol(mostSpecific.callableId) + val newSymbol = FirIntersectionOverridePropertySymbol(mostSpecific.callableId, overrides) val mostSpecificProperty = mostSpecific.fir FirFakeOverrideGenerator.createCopyForFirProperty( newSymbol, mostSpecificProperty, mostSpecificProperty.session, FirDeclarationOrigin.IntersectionOverride, 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 333105d0adc..7c13679542c 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,6 +25,11 @@ open class FirNamedFunctionSymbol( callableId: CallableId, ) : FirFunctionSymbol(callableId) +class FirIntersectionOverrideFunctionSymbol( + callableId: CallableId, + val intersections: Collection> +) : FirNamedFunctionSymbol(callableId) + class FirConstructorSymbol( callableId: CallableId ) : FirFunctionSymbol(callableId) 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 8a6bab108a6..edd6d05b6fc 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 @@ -27,6 +27,11 @@ open class FirPropertySymbol( constructor(name: Name) : this(@OptIn(LocalCallableIdConstructor::class) CallableId(name)) } +class FirIntersectionOverridePropertySymbol( + callableId: CallableId, + val intersections: Collection> +) : FirPropertySymbol(callableId) + class FirBackingFieldSymbol(callableId: CallableId) : FirVariableSymbol(callableId) class FirDelegateFieldSymbol>(callableId: CallableId) : FirVariableSymbol(callableId) {