From 3e5d5bcaa741386d2376921c951e0760ab2d022c Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 15 Sep 2022 09:26:36 +0200 Subject: [PATCH] FE: add test reproducing KT-53953 --- ...CompilerTestFE10TestdataTestGenerated.java | 6 +++ ...irOldFrontendDiagnosticsTestGenerated.java | 6 +++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 +++ ...ctFakeOverrideSuperCallOneMoreLevel.fir.kt | 16 ++++++++ ...stractFakeOverrideSuperCallOneMoreLevel.kt | 16 ++++++++ ...tractFakeOverrideSuperCallOneMoreLevel.txt | 40 +++++++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 +++ 7 files changed, 96 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.fir.kt create mode 100644 compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.kt create mode 100644 compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.txt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index c2926a11019..8f35dc36f5d 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -19565,6 +19565,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallForbidden.kt"); } + @Test + @TestMetadata("abstractFakeOverrideSuperCallOneMoreLevel.kt") + public void testAbstractFakeOverrideSuperCallOneMoreLevel() throws Exception { + runTest("compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.kt"); + } + @Test @TestMetadata("abstractVsAbstract.kt") public void testAbstractVsAbstract() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index 62651deb7a3..d052d741567 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -19565,6 +19565,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallForbidden.kt"); } + @Test + @TestMetadata("abstractFakeOverrideSuperCallOneMoreLevel.kt") + public void testAbstractFakeOverrideSuperCallOneMoreLevel() throws Exception { + runTest("compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.kt"); + } + @Test @TestMetadata("abstractVsAbstract.kt") public void testAbstractVsAbstract() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index 9a2ad184799..5d97e7a6c07 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -19565,6 +19565,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallForbidden.kt"); } + @Test + @TestMetadata("abstractFakeOverrideSuperCallOneMoreLevel.kt") + public void testAbstractFakeOverrideSuperCallOneMoreLevel() throws Exception { + runTest("compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.kt"); + } + @Test @TestMetadata("abstractVsAbstract.kt") public void testAbstractVsAbstract() throws Exception { diff --git a/compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.fir.kt b/compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.fir.kt new file mode 100644 index 00000000000..265cf2636e3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.fir.kt @@ -0,0 +1,16 @@ +// !LANGUAGE: -ForbidSuperDelegationToAbstractFakeOverride +interface Foo { + fun check(): String = "OK" +} +abstract class Base { + abstract fun check(): String +} + +abstract class Derived : Base(), Foo +abstract class Derived2 : Derived() // ONE MORE LEVEL + +class Problem : Derived2() { + override fun check(): String { + return super.check() // NO COMPILER ERROR, BUT FAILURE IN RUNTIME + } +} diff --git a/compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.kt b/compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.kt new file mode 100644 index 00000000000..9e14c3a0e35 --- /dev/null +++ b/compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.kt @@ -0,0 +1,16 @@ +// !LANGUAGE: -ForbidSuperDelegationToAbstractFakeOverride +interface Foo { + fun check(): String = "OK" +} +abstract class Base { + abstract fun check(): String +} + +abstract class Derived : Base(), Foo +abstract class Derived2 : Derived() // ONE MORE LEVEL + +class Problem : Derived2() { + override fun check(): String { + return super.check() // NO COMPILER ERROR, BUT FAILURE IN RUNTIME + } +} diff --git a/compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.txt b/compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.txt new file mode 100644 index 00000000000..6faa4698d7c --- /dev/null +++ b/compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.txt @@ -0,0 +1,40 @@ +package + +public abstract class Base { + public constructor Base() + public abstract fun check(): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public abstract class Derived : Base, Foo { + public constructor Derived() + public open override /*2*/ /*fake_override*/ fun check(): kotlin.String + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public abstract class Derived2 : Derived { + public constructor Derived2() + public open override /*1*/ /*fake_override*/ fun check(): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface Foo { + public open fun check(): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Problem : Derived2 { + public constructor Problem() + public open override /*1*/ fun check(): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 55b521683bd..32941e22024 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -19571,6 +19571,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallForbidden.kt"); } + @Test + @TestMetadata("abstractFakeOverrideSuperCallOneMoreLevel.kt") + public void testAbstractFakeOverrideSuperCallOneMoreLevel() throws Exception { + runTest("compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallOneMoreLevel.kt"); + } + @Test @TestMetadata("abstractVsAbstract.kt") public void testAbstractVsAbstract() throws Exception {