From 5cda3fba12ededc8f07b1830cbc91d5801fb4306 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 27 Feb 2024 10:57:02 +0100 Subject: [PATCH] IR: produce new fake override for each static member This is an addition to d4278250e68f. Apparently we still need to produce a new fake override for each inherited static member, because otherwise we would try to determine the most specific return type, maximum visibility, etc, all of which makes no sense for static members. #KT-66152 Fixed --- ...LLFirBlackBoxCodegenBasedTestGenerated.java | 6 ++++++ ...ersedBlackBoxCodegenBasedTestGenerated.java | 6 ++++++ ...rLightTreeBlackBoxCodegenTestGenerated.java | 6 ++++++ ...thIrFakeOverrideGeneratorTestGenerated.java | 6 ++++++ .../FirPsiBlackBoxCodegenTestGenerated.java | 6 ++++++ .../ir/overrides/IrFakeOverrideBuilder.kt | 4 +++- .../kotlin/ir/types/IrTypeCheckerUtils.kt | 3 ++- .../statics/inheritTwoStaticMethods3.kt | 18 ++++++++++++++++++ .../JvmAbiConsistencyTestBoxGenerated.java | 6 ++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../IrBlackBoxCodegenTestGenerated.java | 6 ++++++ ...ckBoxCodegenWithIrInlinerTestGenerated.java | 6 ++++++ ...oxCodegenTestWithInlineScopesGenerated.java | 6 ++++++ .../LightAnalysisModeTestGenerated.java | 5 +++++ 14 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.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 9c6b532817a..35300225ca7 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 @@ -34095,6 +34095,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods2.kt"); } + @Test + @TestMetadata("inheritTwoStaticMethods3.kt") + public void testInheritTwoStaticMethods3() { + runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt"); + } + @Test @TestMetadata("jkkjk.kt") public void testJkkjk() { 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 5fc2f0f9dd0..4644eec026f 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 @@ -34095,6 +34095,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods2.kt"); } + @Test + @TestMetadata("inheritTwoStaticMethods3.kt") + public void testInheritTwoStaticMethods3() { + runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt"); + } + @Test @TestMetadata("jkkjk.kt") public void testJkkjk() { 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 8434133d61a..b6d2bad4e3f 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 @@ -33964,6 +33964,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods2.kt"); } + @Test + @TestMetadata("inheritTwoStaticMethods3.kt") + public void testInheritTwoStaticMethods3() { + runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt"); + } + @Test @TestMetadata("jkkjk.kt") public void testJkkjk() { 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 9554354fefd..253602726a4 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 @@ -33964,6 +33964,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods2.kt"); } + @Test + @TestMetadata("inheritTwoStaticMethods3.kt") + public void testInheritTwoStaticMethods3() { + runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt"); + } + @Test @TestMetadata("jkkjk.kt") public void testJkkjk() { 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 eb38e8c068b..e5680fb2123 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 @@ -33964,6 +33964,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods2.kt"); } + @Test + @TestMetadata("inheritTwoStaticMethods3.kt") + public void testInheritTwoStaticMethods3() { + runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt"); + } + @Test @TestMetadata("jkkjk.kt") public void testJkkjk() { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt index ef2dc2fd4e8..e438fc8803e 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt @@ -173,7 +173,9 @@ class IrFakeOverrideBuilder( val addedFakeOverrides = mutableListOf() if (isStaticMembers) { - createAndBindFakeOverride(notOverridden.toList(), current, addedFakeOverrides, compatibilityMode) + for (member in notOverridden) { + createAndBindFakeOverride(listOf(member), current, addedFakeOverrides, compatibilityMode) + } } else { createAndBindFakeOverrides(current, notOverridden, addedFakeOverrides, compatibilityMode) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeCheckerUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeCheckerUtils.kt index c2285aa5175..762e482c7e3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeCheckerUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/IrTypeCheckerUtils.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.types import org.jetbrains.kotlin.ir.declarations.IrTypeParameter +import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.types.model.TypeConstructorMarker import org.jetbrains.kotlin.utils.newHashMapWithExpectedSize @@ -16,7 +17,7 @@ class IrTypeSystemContextWithAdditionalAxioms( ) : IrTypeSystemContext by typeSystem { init { assert(firstParameters.size == secondParameters.size) { - "different length of type parameter lists: $firstParameters vs $secondParameters" + "different length of type parameter lists: ${firstParameters.map { it.render() }} vs ${secondParameters.map { it.render() }}" } } diff --git a/compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt b/compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt new file mode 100644 index 00000000000..8b1c286ec61 --- /dev/null +++ b/compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt @@ -0,0 +1,18 @@ +// TARGET_BACKEND: JVM +// FILE: A.java +public class A { + public static String f(T x) { + return "Fail"; + } + + public static String f(CharSequence c) { + return c.toString(); + } +} + +// FILE: 1.kt +class B : A() { + fun g(): String = f("OK") +} + +fun box(): String = B().g() diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java index 2e61f383a50..d1d09af0e63 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java @@ -33964,6 +33964,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods2.kt"); } + @Test + @TestMetadata("inheritTwoStaticMethods3.kt") + public void testInheritTwoStaticMethods3() { + runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt"); + } + @Test @TestMetadata("jkkjk.kt") public void testJkkjk() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 5dcae98b207..771dc974b5a 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -32104,6 +32104,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods2.kt"); } + @Test + @TestMetadata("inheritTwoStaticMethods3.kt") + public void testInheritTwoStaticMethods3() { + runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt"); + } + @Test @TestMetadata("jkkjk.kt") public void testJkkjk() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index ef685e005a8..47fe0406236 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -33964,6 +33964,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods2.kt"); } + @Test + @TestMetadata("inheritTwoStaticMethods3.kt") + public void testInheritTwoStaticMethods3() { + runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt"); + } + @Test @TestMetadata("jkkjk.kt") public void testJkkjk() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java index c024b35974d..0b570ef5c27 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java @@ -33964,6 +33964,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods2.kt"); } + @Test + @TestMetadata("inheritTwoStaticMethods3.kt") + public void testInheritTwoStaticMethods3() { + runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt"); + } + @Test @TestMetadata("jkkjk.kt") public void testJkkjk() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java index fdc51bf4f41..c30b46a7087 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/inlineScopes/FirBlackBoxCodegenTestWithInlineScopesGenerated.java @@ -33964,6 +33964,12 @@ public class FirBlackBoxCodegenTestWithInlineScopesGenerated extends AbstractFir runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods2.kt"); } + @Test + @TestMetadata("inheritTwoStaticMethods3.kt") + public void testInheritTwoStaticMethods3() { + runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt"); + } + @Test @TestMetadata("jkkjk.kt") public void testJkkjk() { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 4a6894564cd..e93494aeed9 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -28823,6 +28823,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods2.kt"); } + @TestMetadata("inheritTwoStaticMethods3.kt") + public void testInheritTwoStaticMethods3() { + runTest("compiler/testData/codegen/box/javaInterop/statics/inheritTwoStaticMethods3.kt"); + } + @TestMetadata("jkkjk.kt") public void testJkkjk() { runTest("compiler/testData/codegen/box/javaInterop/statics/jkkjk.kt");