From 8e047e6d8ab076ce3566715af17474926c1aa88e Mon Sep 17 00:00:00 2001 From: Pavel Kunyavskiy Date: Mon, 4 Dec 2023 16:34:49 +0100 Subject: [PATCH] [FIR2IR] Make all source sets friends for IrFakeOverrideBuilder ^KT-63644 --- ...LFirBlackBoxCodegenBasedTestGenerated.java | 6 + ...rsedBlackBoxCodegenBasedTestGenerated.java | 6 + .../kotlin/fir/backend/Fir2IrConverter.kt | 18 +- ...LightTreeBlackBoxCodegenTestGenerated.java | 6 + ...hIrFakeOverrideGeneratorTestGenerated.java | 6 + .../FirPsiBlackBoxCodegenTestGenerated.java | 6 + .../k2/internalOverride2.fir.ir.txt | 198 ++++++++++++++++++ .../box/multiplatform/k2/internalOverride2.kt | 47 +++++ .../fir/FirJsCodegenBoxTestGenerated.java | 6 + .../fir/FirJsES6CodegenBoxTestGenerated.java | 6 + .../FirNativeCodegenBoxTestGenerated.java | 6 + .../FirNativeCodegenBoxTestNoPLGenerated.java | 6 + .../test/FirWasmCodegenBoxTestGenerated.java | 6 + 13 files changed, 319 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/codegen/box/multiplatform/k2/internalOverride2.fir.ir.txt create mode 100644 compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java index 10bdf6183b7..a81813c9cf1 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java @@ -35241,6 +35241,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride.kt"); } + @Test + @TestMetadata("internalOverride2.kt") + public void testInternalOverride2() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); + } + @Test @TestMetadata("javaMethodWithTypeParameter.kt") public void testJavaMethodWithTypeParameter() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java index bc351451760..737eda82b96 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java @@ -35241,6 +35241,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride.kt"); } + @Test + @TestMetadata("internalOverride2.kt") + public void testInternalOverride2() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); + } + @Test @TestMetadata("javaMethodWithTypeParameter.kt") public void testJavaMethodWithTypeParameter() throws Exception { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index 0086a15ec4b..b52886bb26c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -679,11 +679,21 @@ class Fir2IrConverter( } // TODO: drop this function in favor of using [IrModuleDescriptor::shouldSeeInternalsOf] in FakeOverrideBuilder KT-61384 - private fun friendModulesMap(session: FirSession) = mapOf( - session.moduleData.name.asStringStripSpecialMarkers() to session.moduleData.friendDependencies.map { - it.name.asStringStripSpecialMarkers() + private fun friendModulesMap(session: FirSession): Map> { + fun FirModuleData.friendsMapName() = name.asStringStripSpecialMarkers() + fun FirModuleData.collectDependsOnRecursive(set: MutableSet) { + if (!set.add(this)) return + for (dep in dependsOnDependencies) { + dep.collectDependsOnRecursive(set) + } } - ) + val moduleData = session.moduleData + val dependsOnTransitive = buildSet { + moduleData.collectDependsOnRecursive(this) + } + val friendNames = (moduleData.friendDependencies + dependsOnTransitive).map { it.friendsMapName() } + return dependsOnTransitive.associate { it.friendsMapName() to friendNames } + } fun createIrModuleFragment( session: FirSession, diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index 2d3690042d1..2f458ee94b0 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -34822,6 +34822,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride.kt"); } + @Test + @TestMetadata("internalOverride2.kt") + public void testInternalOverride2() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); + } + @Test @TestMetadata("javaMethodWithTypeParameter.kt") public void testJavaMethodWithTypeParameter() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java index 759365e218c..8b6a84bcdc6 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java @@ -34822,6 +34822,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride.kt"); } + @Test + @TestMetadata("internalOverride2.kt") + public void testInternalOverride2() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); + } + @Test @TestMetadata("javaMethodWithTypeParameter.kt") public void testJavaMethodWithTypeParameter() throws Exception { diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index 32c69253332..be83e646c7d 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -34822,6 +34822,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride.kt"); } + @Test + @TestMetadata("internalOverride2.kt") + public void testInternalOverride2() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); + } + @Test @TestMetadata("javaMethodWithTypeParameter.kt") public void testJavaMethodWithTypeParameter() throws Exception { diff --git a/compiler/testData/codegen/box/multiplatform/k2/internalOverride2.fir.ir.txt b/compiler/testData/codegen/box/multiplatform/k2/internalOverride2.fir.ir.txt new file mode 100644 index 00000000000..8486a1dcf9a --- /dev/null +++ b/compiler/testData/codegen/box/multiplatform/k2/internalOverride2.fir.ir.txt @@ -0,0 +1,198 @@ +FILE fqName: fileName:/common.kt + CLASS CLASS name:A modality:OPEN visibility:public superTypes:[kotlin.Any] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.A + CONSTRUCTOR visibility:public <> () returnType:.A [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in kotlin.Any' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:OPEN visibility:public superTypes:[kotlin.Any]' + FUN name:foo1 visibility:internal modality:OPEN <> ($this:.A) returnType:kotlin.String + $this: VALUE_PARAMETER name: type:.A + BLOCK_BODY + RETURN type=kotlin.Nothing from='internal open fun foo1 (): kotlin.String declared in .A' + CONST String type=kotlin.String value="A::foo1" + FUN name:foo2 visibility:internal modality:OPEN <> ($this:.A) returnType:kotlin.String + $this: VALUE_PARAMETER name: type:.A + BLOCK_BODY + RETURN type=kotlin.Nothing from='internal open fun foo2 (): kotlin.String declared in .A' + CONST String type=kotlin.String value="A::foo2" + FUN name:foo3 visibility:internal modality:OPEN <> ($this:.A) returnType:kotlin.String + $this: VALUE_PARAMETER name: type:.A + BLOCK_BODY + RETURN type=kotlin.Nothing from='internal open fun foo3 (): kotlin.String declared in .A' + CONST String type=kotlin.String value="A::foo3" + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Any + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:C modality:OPEN visibility:public superTypes:[.B] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.C + CONSTRUCTOR visibility:public <> () returnType:.C [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in .B' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:OPEN visibility:public superTypes:[.B]' + FUN name:foo1 visibility:internal modality:OPEN <> ($this:.C) returnType:kotlin.String + overridden: + internal open fun foo1 (): kotlin.String declared in .B + $this: VALUE_PARAMETER name: type:.C + BLOCK_BODY + RETURN type=kotlin.Nothing from='internal open fun foo1 (): kotlin.String declared in .C' + CONST String type=kotlin.String value="C::foo1" + FUN FAKE_OVERRIDE name:foo2 visibility:internal modality:OPEN <> ($this:.B) returnType:kotlin.String [fake_override] + overridden: + internal open fun foo2 (): kotlin.String declared in .B + $this: VALUE_PARAMETER name: type:.B + FUN FAKE_OVERRIDE name:foo3 visibility:internal modality:OPEN <> ($this:.A) returnType:kotlin.String [fake_override] + overridden: + internal open fun foo3 (): kotlin.String declared in .B + $this: VALUE_PARAMETER name: type:.A + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .B + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in .B + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in .B + $this: VALUE_PARAMETER name: type:kotlin.Any +FILE fqName: fileName:/main.kt + CLASS CLASS name:B modality:OPEN visibility:public superTypes:[.A] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.B + CONSTRUCTOR visibility:public <> () returnType:.B [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () declared in .A' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:B modality:OPEN visibility:public superTypes:[.A]' + FUN name:foo1 visibility:internal modality:OPEN <> ($this:.B) returnType:kotlin.String + overridden: + internal open fun foo1 (): kotlin.String declared in .A + $this: VALUE_PARAMETER name: type:.B + BLOCK_BODY + RETURN type=kotlin.Nothing from='internal open fun foo1 (): kotlin.String declared in .B' + CONST String type=kotlin.String value="B::foo1" + FUN name:foo2 visibility:internal modality:OPEN <> ($this:.B) returnType:kotlin.String + overridden: + internal open fun foo2 (): kotlin.String declared in .A + $this: VALUE_PARAMETER name: type:.B + BLOCK_BODY + RETURN type=kotlin.Nothing from='internal open fun foo2 (): kotlin.String declared in .B' + CONST String type=kotlin.String value="B::foo2" + FUN FAKE_OVERRIDE name:foo3 visibility:internal modality:OPEN <> ($this:.A) returnType:kotlin.String [fake_override] + overridden: + internal open fun foo3 (): kotlin.String declared in .A + $this: VALUE_PARAMETER name: type:.A + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in .A + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int declared in .A + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in .A + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:box visibility:public modality:FINAL <> () returnType:kotlin.String + BLOCK_BODY + VAR name:a type:.A [val] + CONSTRUCTOR_CALL 'public constructor () declared in .A' type=.A origin=null + VAR name:b type:.A [val] + CONSTRUCTOR_CALL 'public constructor () declared in .B' type=.B origin=null + VAR name:c type:.A [val] + CONSTRUCTOR_CALL 'public constructor () declared in .C' type=.C origin=null + WHEN type=kotlin.Unit origin=IF + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: CALL 'internal open fun foo1 (): kotlin.String declared in .A' type=kotlin.String origin=null + $this: GET_VAR 'val a: .A declared in .box' type=.A origin=null + arg1: CONST String type=kotlin.String value="A::foo1" + then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="Fail A.1" + WHEN type=kotlin.Unit origin=IF + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: CALL 'internal open fun foo2 (): kotlin.String declared in .A' type=kotlin.String origin=null + $this: GET_VAR 'val a: .A declared in .box' type=.A origin=null + arg1: CONST String type=kotlin.String value="A::foo2" + then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="Fail A.2" + WHEN type=kotlin.Unit origin=IF + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: CALL 'internal open fun foo3 (): kotlin.String declared in .A' type=kotlin.String origin=null + $this: GET_VAR 'val a: .A declared in .box' type=.A origin=null + arg1: CONST String type=kotlin.String value="A::foo3" + then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="Fail A.3" + WHEN type=kotlin.Unit origin=IF + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: CALL 'internal open fun foo1 (): kotlin.String declared in .A' type=kotlin.String origin=null + $this: GET_VAR 'val b: .A declared in .box' type=.A origin=null + arg1: CONST String type=kotlin.String value="B::foo1" + then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="Fail B.1" + WHEN type=kotlin.Unit origin=IF + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: CALL 'internal open fun foo2 (): kotlin.String declared in .A' type=kotlin.String origin=null + $this: GET_VAR 'val b: .A declared in .box' type=.A origin=null + arg1: CONST String type=kotlin.String value="B::foo2" + then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="Fail B.2" + WHEN type=kotlin.Unit origin=IF + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: CALL 'internal open fun foo3 (): kotlin.String declared in .A' type=kotlin.String origin=null + $this: GET_VAR 'val b: .A declared in .box' type=.A origin=null + arg1: CONST String type=kotlin.String value="A::foo3" + then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="Fail B.3" + WHEN type=kotlin.Unit origin=IF + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: CALL 'internal open fun foo1 (): kotlin.String declared in .A' type=kotlin.String origin=null + $this: GET_VAR 'val c: .A declared in .box' type=.A origin=null + arg1: CONST String type=kotlin.String value="C::foo1" + then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="Fail C.1" + WHEN type=kotlin.Unit origin=IF + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: CALL 'internal open fun foo2 (): kotlin.String declared in .A' type=kotlin.String origin=null + $this: GET_VAR 'val c: .A declared in .box' type=.A origin=null + arg1: CONST String type=kotlin.String value="B::foo2" + then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="Fail C.2" + WHEN type=kotlin.Unit origin=IF + BRANCH + if: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ + $this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ + arg0: CALL 'internal open fun foo3 (): kotlin.String declared in .A' type=kotlin.String origin=null + $this: GET_VAR 'val c: .A declared in .box' type=.A origin=null + arg1: CONST String type=kotlin.String value="A::foo3" + then: RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="Fail C.3" + RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in ' + CONST String type=kotlin.String value="OK" diff --git a/compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt b/compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt new file mode 100644 index 00000000000..f4c2d43df7e --- /dev/null +++ b/compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt @@ -0,0 +1,47 @@ +// LANGUAGE: +MultiPlatformProjects +// IGNORE_BACKEND_K1: JVM, JVM_IR, JS, JS_IR, JS_IR_ES6, WASM +// DUMP_IR + +// MODULE: common +// FILE: common.kt + +open class A { + internal open fun foo1() = "A::foo1" + internal open fun foo2() = "A::foo2" + internal open fun foo3() = "A::foo3" +} + +expect open class B() : A { + internal override fun foo1(): String + internal override fun foo2(): String +} + +open class C : B() { + internal override fun foo1() = "C::foo1" +} + + +// MODULE: main()()(common) +// FILE: main.kt + +actual open class B actual constructor() : A() { + internal actual override fun foo1() = "B::foo1" + internal actual override fun foo2() = "B::foo2" +} + + +fun box() : String { + val a: A = A() + val b: A = B() + val c: A = C() + if (a.foo1() != "A::foo1") return "Fail A.1" + if (a.foo2() != "A::foo2") return "Fail A.2" + if (a.foo3() != "A::foo3") return "Fail A.3" + if (b.foo1() != "B::foo1") return "Fail B.1" + if (b.foo2() != "B::foo2") return "Fail B.2" + if (b.foo3() != "A::foo3") return "Fail B.3" + if (c.foo1() != "C::foo1") return "Fail C.1" + if (c.foo2() != "B::foo2") return "Fail C.2" + if (c.foo3() != "A::foo3") return "Fail C.3" + return "OK" +} diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java index edd74a70f35..c93bd46c6f9 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsCodegenBoxTestGenerated.java @@ -24436,6 +24436,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest { runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride.kt"); } + @Test + @TestMetadata("internalOverride2.kt") + public void testInternalOverride2() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT") diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java index f7448ebabed..885db1eab53 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirJsES6CodegenBoxTestGenerated.java @@ -24436,6 +24436,12 @@ public class FirJsES6CodegenBoxTestGenerated extends AbstractFirJsES6CodegenBoxT runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride.kt"); } + @Test + @TestMetadata("internalOverride2.kt") + public void testInternalOverride2() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT") diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java index f7ad1269f4f..7849bc7c2bf 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestGenerated.java @@ -27690,6 +27690,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride.kt"); } + @Test + @TestMetadata("internalOverride2.kt") + public void testInternalOverride2() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT") diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java index cce221feb49..365d06adb05 100644 --- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCodegenBoxTestNoPLGenerated.java @@ -28320,6 +28320,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride.kt"); } + @Test + @TestMetadata("internalOverride2.kt") + public void testInternalOverride2() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT") diff --git a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java index 95392c7eb3c..bc24b976592 100644 --- a/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java +++ b/wasm/wasm.tests/tests-gen/org/jetbrains/kotlin/wasm/test/FirWasmCodegenBoxTestGenerated.java @@ -24406,6 +24406,12 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride.kt"); } + @Test + @TestMetadata("internalOverride2.kt") + public void testInternalOverride2() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/internalOverride2.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT")