diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index ddbe46d2c9b..9e58d54636d 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -1065,7 +1065,7 @@ class Fir2IrDeclarationStorage( val irProperty = fir.convertWithOffsets { startOffset, endOffset -> symbolTable.declareProperty(signature, { symbol }) { val isFakeOverride = - fir.isSubstitutionOverride && + fir.isSubstitutionOrIntersectionOverride && firPropertySymbol.dispatchReceiverClassOrNull() != firPropertySymbol.originalForSubstitutionOverride?.dispatchReceiverClassOrNull() Fir2IrLazyProperty( 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 0de6b68c39a..4a3ba048705 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 @@ -210,6 +210,11 @@ public class FirCompileKotlinAgainstKotlinTestGenerated extends AbstractFirCompi runTest("compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt"); } + @TestMetadata("intersectionOverrideProperies.kt") + public void testIntersectionOverrideProperies() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt"); + } + @TestMetadata("jvmField.kt") public void testJvmField() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/jvmField.kt"); diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt index 8fe3915a9e2..70886469e9b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt @@ -32,6 +32,7 @@ var FirCallableDeclaration<*>.containingClassAttr: ConeClassLikeLookupTag? by Fi val FirCallableDeclaration<*>.isIntersectionOverride get() = origin == FirDeclarationOrigin.IntersectionOverride val FirCallableDeclaration<*>.isSubstitutionOverride get() = origin == FirDeclarationOrigin.SubstitutionOverride +val FirCallableDeclaration<*>.isSubstitutionOrIntersectionOverride get() = isSubstitutionOverride || isIntersectionOverride inline val > D.originalForSubstitutionOverride: D? get() = if (isSubstitutionOverride) originalForSubstitutionOverrideAttr else null diff --git a/compiler/testData/codegen/box/specialBuiltins/explicitSuperCall.kt b/compiler/testData/codegen/box/specialBuiltins/explicitSuperCall.kt index f9f912f3ab6..c6741f2d4c8 100644 --- a/compiler/testData/codegen/box/specialBuiltins/explicitSuperCall.kt +++ b/compiler/testData/codegen/box/specialBuiltins/explicitSuperCall.kt @@ -1,6 +1,5 @@ // DONT_TARGET_EXACT_BACKEND: WASM // WASM_MUTE_REASON: STDLIB_COLLECTIONS -// IGNORE_BACKEND_FIR: JVM_IR // KJS_WITH_FULL_RUNTIME // IGNORE_BACKEND: NATIVE diff --git a/compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt b/compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt new file mode 100644 index 00000000000..33a46830ff2 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt @@ -0,0 +1,39 @@ +// TARGET_BACKEND: JVM +// FILE: A.kt +package a + +interface IrSymbol { + val owner: Any +} + +interface IrFunction +interface IrSimpleFunction : IrFunction { + val name: String +} + +interface IrFunctionSymbol : IrSymbol { + override val owner: IrFunction +} + +interface IrBindableSymbol : IrSymbol { + override val owner: B +} + +interface IrSimpleFunctionSymbol : IrFunctionSymbol, IrBindableSymbol + +// FILE: B.kt +import a.* + +fun foo(x: IrSimpleFunctionSymbol): String { + return x.owner.name +} + +fun box(): String { + return foo(object : IrSimpleFunctionSymbol { + override val owner: IrSimpleFunction + get() = object : IrSimpleFunction { + override val name: String + get() = "OK" + } + }) +} diff --git a/compiler/testData/ir/irText/firProblems/MultiList.fir.txt b/compiler/testData/ir/irText/firProblems/MultiList.fir.txt index 8d210d28fb8..02fffb889eb 100644 --- a/compiler/testData/ir/irText/firProblems/MultiList.fir.txt +++ b/compiler/testData/ir/irText/firProblems/MultiList.fir.txt @@ -261,7 +261,7 @@ FILE fqName: fileName:/MultiList.kt correspondingProperty: PROPERTY FAKE_OVERRIDE name:size visibility:public modality:ABSTRACT [fake_override,val] overridden: public abstract fun (): kotlin.Int declared in kotlin.collections.List - public abstract fun (): kotlin.Int declared in java.util.ArrayList + public abstract fun (): kotlin.Int [fake_override] declared in java.util.ArrayList $this: VALUE_PARAMETER name: type:kotlin.collections.List FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:java.util.Collection) returnType:@[FlexibleNullability] java.util.Spliterator<.Some.SomeList>?> [fake_override] overridden: @@ -471,7 +471,7 @@ FILE fqName: fileName:/MultiList.kt correspondingProperty: PROPERTY FAKE_OVERRIDE name:size visibility:public modality:ABSTRACT [fake_override,val] overridden: public abstract fun (): kotlin.Int declared in kotlin.collections.List - public abstract fun (): kotlin.Int declared in java.util.ArrayList + public abstract fun (): kotlin.Int [fake_override] declared in java.util.ArrayList $this: VALUE_PARAMETER name: type:kotlin.collections.List FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:java.util.Collection) returnType:@[FlexibleNullability] java.util.Spliterator<.Some?> [fake_override] overridden: diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java index d9f5dee2663..f32544bc465 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java @@ -209,6 +209,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl runTest("compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt"); } + @TestMetadata("intersectionOverrideProperies.kt") + public void testIntersectionOverrideProperies() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt"); + } + @TestMetadata("jvmField.kt") public void testJvmField() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/jvmField.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 cd49136a2cb..d06467ecb17 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java @@ -210,6 +210,11 @@ public class IrCompileKotlinAgainstKotlinTestGenerated extends AbstractIrCompile runTest("compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt"); } + @TestMetadata("intersectionOverrideProperies.kt") + public void testIntersectionOverrideProperies() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt"); + } + @TestMetadata("jvmField.kt") public void testJvmField() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/jvmField.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 1e15624f388..adf66b2a2c9 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java @@ -210,6 +210,11 @@ public class JvmIrAgainstOldBoxTestGenerated extends AbstractJvmIrAgainstOldBoxT runTest("compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt"); } + @TestMetadata("intersectionOverrideProperies.kt") + public void testIntersectionOverrideProperies() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt"); + } + @TestMetadata("jvmField.kt") public void testJvmField() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/jvmField.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 e8b8722bf95..3ab0fcfc80a 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java @@ -210,6 +210,11 @@ public class JvmOldAgainstIrBoxTestGenerated extends AbstractJvmOldAgainstIrBoxT runTest("compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt"); } + @TestMetadata("intersectionOverrideProperies.kt") + public void testIntersectionOverrideProperies() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt"); + } + @TestMetadata("jvmField.kt") public void testJvmField() throws Exception { runTest("compiler/testData/compileKotlinAgainstKotlin/jvmField.kt");