diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirMultipleDefaultsInheritedFromSupertypesChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirMultipleDefaultsInheritedFromSupertypesChecker.kt index 57d7f2e567d..b68131dce4d 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirMultipleDefaultsInheritedFromSupertypesChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirMultipleDefaultsInheritedFromSupertypesChecker.kt @@ -20,16 +20,19 @@ import org.jetbrains.kotlin.fir.isSubstitutionOverride import org.jetbrains.kotlin.fir.scopes.processAllFunctions import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol +import org.jetbrains.kotlin.fir.unwrapSubstitutionOverrides import org.jetbrains.kotlin.name.Name object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecker() { override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) { declaration.unsubstitutedScope(context).processAllFunctions { - if (it.containingClassLookupTag() != declaration.symbol.toLookupTag()) { + val originalIfSubstitutionOverride = it.unwrapSubstitutionOverrides() + + if (originalIfSubstitutionOverride.containingClassLookupTag() != declaration.symbol.toLookupTag()) { return@processAllFunctions } - checkFunction(declaration, it, context, reporter) + checkFunction(declaration, originalIfSubstitutionOverride, context, reporter) } } diff --git a/compiler/testData/diagnostics/tests/override/MultipleDefaultsAndSubstitutionOverrides.fir.kt b/compiler/testData/diagnostics/tests/override/MultipleDefaultsAndSubstitutionOverrides.fir.kt deleted file mode 100644 index 69171a53300..00000000000 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultsAndSubstitutionOverrides.fir.kt +++ /dev/null @@ -1,15 +0,0 @@ -interface A { - fun foo(x: Int = 42): Int -} - -open class B { - fun foo(x: Int = 239) = x -} - -interface C { - fun foo(x: Int): Int -} - -open class Z : A, B(), C - -class N : Z() diff --git a/compiler/testData/diagnostics/tests/override/MultipleDefaultsAndSubstitutionOverrides.kt b/compiler/testData/diagnostics/tests/override/MultipleDefaultsAndSubstitutionOverrides.kt index 4dd2340c5ce..0fe6cdf4fbb 100644 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultsAndSubstitutionOverrides.kt +++ b/compiler/testData/diagnostics/tests/override/MultipleDefaultsAndSubstitutionOverrides.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun foo(x: Int = 42): Int }