diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index 84582c46ec5..39fa5087689 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -406,25 +406,33 @@ fun FirTypeScope.processOverriddenFunctionsFromSuperClasses( functionSymbol: FirNamedFunctionSymbol, containingClass: FirClass, processor: (FirNamedFunctionSymbol) -> ProcessorAction -): ProcessorAction = processDirectOverriddenFunctionsWithBaseScope(functionSymbol) { overridden, baseScope -> - if (overridden.containingClass() == containingClass.symbol.toLookupTag()) { - baseScope.processOverriddenFunctionsFromSuperClasses(overridden, containingClass, processor) - } else { - processor(overridden) +): ProcessorAction = + processDirectOverriddenFunctionsWithBaseScope(functionSymbol) { overridden, _ -> + val unwrapped = if (overridden.fir.isSubstitutionOverride && + overridden.dispatchReceiverClassOrNull() == containingClass.symbol.toLookupTag() + ) + overridden.originalForSubstitutionOverride!! + else + overridden + + processor(unwrapped) } -} fun FirTypeScope.processOverriddenPropertiesFromSuperClasses( propertySymbol: FirPropertySymbol, containingClass: FirClass, processor: (FirPropertySymbol) -> ProcessorAction -): ProcessorAction = processDirectOverriddenPropertiesWithBaseScope(propertySymbol) { overridden, baseScope -> - if (overridden.containingClass() == containingClass.symbol.toLookupTag()) { - baseScope.processOverriddenPropertiesFromSuperClasses(overridden, containingClass, processor) - } else { - processor(overridden) +): ProcessorAction = + processDirectOverriddenPropertiesWithBaseScope(propertySymbol) { overridden, _ -> + val unwrapped = if (overridden.fir.isSubstitutionOverride && + overridden.dispatchReceiverClassOrNull() == containingClass.symbol.toLookupTag() + ) + overridden.originalForSubstitutionOverride!! + else + overridden + + processor(unwrapped) } -} private fun FirClass.getSuperTypesAsIrClasses( declarationStorage: Fir2IrDeclarationStorage diff --git a/compiler/testData/ir/irText/firProblems/AbstractMutableMap.fir.ir.txt b/compiler/testData/ir/irText/firProblems/AbstractMutableMap.fir.ir.txt index 308100f7075..be4c5d732bb 100644 --- a/compiler/testData/ir/irText/firProblems/AbstractMutableMap.fir.ir.txt +++ b/compiler/testData/ir/irText/firProblems/AbstractMutableMap.fir.ir.txt @@ -12,7 +12,6 @@ FILE fqName: fileName:/AbstractMutableMap.kt FUN name:put visibility:public modality:FINAL <> ($this:.MyMap.MyMap, V of .MyMap>, key:K of .MyMap, value:V of .MyMap) returnType:V of .MyMap? overridden: public abstract fun put (key: K of kotlin.collections.AbstractMutableMap, value: V of kotlin.collections.AbstractMutableMap): V of kotlin.collections.AbstractMutableMap? declared in kotlin.collections.AbstractMutableMap - public open fun put (p0: @[FlexibleNullability] K of kotlin.collections.AbstractMutableMap?, p1: @[FlexibleNullability] V of kotlin.collections.AbstractMutableMap?): V of kotlin.collections.AbstractMutableMap? [fake_override] declared in kotlin.collections.AbstractMutableMap $this: VALUE_PARAMETER name: type:.MyMap.MyMap, V of .MyMap> VALUE_PARAMETER name:key index:0 type:K of .MyMap VALUE_PARAMETER name:value index:1 type:V of .MyMap diff --git a/compiler/testData/ir/irText/firProblems/ArrayListOverrides.fir.ir.txt b/compiler/testData/ir/irText/firProblems/ArrayListOverrides.fir.ir.txt index f48cb424f11..6b5f76bf32b 100644 --- a/compiler/testData/ir/irText/firProblems/ArrayListOverrides.fir.ir.txt +++ b/compiler/testData/ir/irText/firProblems/ArrayListOverrides.fir.ir.txt @@ -203,8 +203,6 @@ FILE fqName: fileName:/ArrayListOverrides.kt FUN name:remove visibility:public modality:FINAL <> ($this:.A2, x:kotlin.String) returnType:kotlin.Boolean overridden: public open fun remove (p0: @[EnhancedNullability] E of java.util.ArrayList): kotlin.Boolean declared in java.util.ArrayList - public open fun remove (p0: @[FlexibleNullability] E of java.util.ArrayList?): kotlin.Boolean [fake_override] declared in java.util.ArrayList - public abstract fun remove (element: E of java.util.ArrayList): kotlin.Boolean [fake_override] declared in java.util.ArrayList $this: VALUE_PARAMETER name: type:.A2 VALUE_PARAMETER name:x index:0 type:kotlin.String BLOCK_BODY