diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt index ee506407f4a..f3c2639dfce 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt @@ -192,8 +192,10 @@ class FakeOverrideGenerator( ): List { if (symbol.fir.origin != FirDeclarationOrigin.IntersectionOverride) return listOf(basedSymbol) return scope.directOverridden(symbol).map { + // Unwrapping should happen only for fake overrides members from the same class, not from supertypes + if (it.dispatchReceiverClassOrNull() != containingClass) return@map it when { - it.fir.isSubstitutionOverride && it.dispatchReceiverClassOrNull() == containingClass -> + it.fir.isSubstitutionOverride -> it.originalForSubstitutionOverride!! it.fir.origin == FirDeclarationOrigin.Delegated -> it.fir.delegatedWrapperData?.wrapped?.symbol!! as S diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/FirCompileKotlinAgainstKotlinTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/FirCompileKotlinAgainstKotlinTestGenerated.java index 988a42c505a..84630348abd 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/FirCompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/FirCompileKotlinAgainstKotlinTestGenerated.java @@ -375,6 +375,11 @@ public class FirCompileKotlinAgainstKotlinTestGenerated extends AbstractFirCompi runTest("compiler/testData/compileKotlinAgainstKotlin/nestedTypeAliasExpansion.kt"); } + @TestMetadata("noExplicitOverrideForDelegatedFromSupertype.kt") + public void testNoExplicitOverrideForDelegatedFromSupertype() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/noExplicitOverrideForDelegatedFromSupertype.kt"); + } + @TestMetadata("optionalAnnotation.kt") public void testOptionalAnnotation() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/optionalAnnotation.kt"); diff --git a/compiler/testData/compileKotlinAgainstKotlin/noExplicitOverrideForDelegatedFromSupertype.kt b/compiler/testData/compileKotlinAgainstKotlin/noExplicitOverrideForDelegatedFromSupertype.kt new file mode 100644 index 00000000000..9999f9323ba --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/noExplicitOverrideForDelegatedFromSupertype.kt @@ -0,0 +1,23 @@ +// TARGET_BACKEND: JVM +// FILE: A.kt +package a + +interface Named { + val name: String +} + +interface A : Named + +// FILE: B.kt +import a.* + +open class B(val a: A) : A by a, Named + +class C(a: A) : B(a) + +fun box(): String { + return C(object : A { + override val name: String + get() = "OK" + }).name +} diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java index 3bec557cb3f..fcc51dc8196 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java @@ -374,6 +374,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl runTest("compiler/testData/compileKotlinAgainstKotlin/nestedTypeAliasExpansion.kt"); } + @TestMetadata("noExplicitOverrideForDelegatedFromSupertype.kt") + public void testNoExplicitOverrideForDelegatedFromSupertype() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/noExplicitOverrideForDelegatedFromSupertype.kt"); + } + @TestMetadata("optionalAnnotation.kt") public void testOptionalAnnotation() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/optionalAnnotation.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java index 17a233ad471..0cb25e9e39d 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java @@ -375,6 +375,11 @@ public class IrCompileKotlinAgainstKotlinTestGenerated extends AbstractIrCompile runTest("compiler/testData/compileKotlinAgainstKotlin/nestedTypeAliasExpansion.kt"); } + @TestMetadata("noExplicitOverrideForDelegatedFromSupertype.kt") + public void testNoExplicitOverrideForDelegatedFromSupertype() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/noExplicitOverrideForDelegatedFromSupertype.kt"); + } + @TestMetadata("optionalAnnotation.kt") public void testOptionalAnnotation() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/optionalAnnotation.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java index 6ca89dbf251..8e232cfc58f 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java @@ -375,6 +375,11 @@ public class JvmIrAgainstOldBoxTestGenerated extends AbstractJvmIrAgainstOldBoxT runTest("compiler/testData/compileKotlinAgainstKotlin/nestedTypeAliasExpansion.kt"); } + @TestMetadata("noExplicitOverrideForDelegatedFromSupertype.kt") + public void testNoExplicitOverrideForDelegatedFromSupertype() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/noExplicitOverrideForDelegatedFromSupertype.kt"); + } + @TestMetadata("optionalAnnotation.kt") public void testOptionalAnnotation() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/optionalAnnotation.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java index 301c57aee00..842f7dc7c68 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java @@ -375,6 +375,11 @@ public class JvmOldAgainstIrBoxTestGenerated extends AbstractJvmOldAgainstIrBoxT runTest("compiler/testData/compileKotlinAgainstKotlin/nestedTypeAliasExpansion.kt"); } + @TestMetadata("noExplicitOverrideForDelegatedFromSupertype.kt") + public void testNoExplicitOverrideForDelegatedFromSupertype() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/noExplicitOverrideForDelegatedFromSupertype.kt"); + } + @TestMetadata("optionalAnnotation.kt") public void testOptionalAnnotation() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/optionalAnnotation.kt");