From 81e1131441c63ed3803d3c73746eac96fcb330ac Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 8 Aug 2022 12:07:20 +0200 Subject: [PATCH] SubclassOptInRequired: add extra test about inheritance and superseding --- ...CompilerTestFE10TestdataTestGenerated.java | 6 ++ ...irOldFrontendDiagnosticsTestGenerated.java | 6 ++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 ++ .../experimental/subclassOptInInheritance.kt | 64 +++++++++++++++++ .../experimental/subclassOptInInheritance.txt | 68 +++++++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 ++ 6 files changed, 156 insertions(+) create mode 100644 compiler/testData/diagnostics/testsWithStdLib/experimental/subclassOptInInheritance.kt create mode 100644 compiler/testData/diagnostics/testsWithStdLib/experimental/subclassOptInInheritance.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 ea550777305..b1141cfaa5b 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 @@ -37560,6 +37560,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/subClassOptInRequired.kt"); } + @Test + @TestMetadata("subclassOptInInheritance.kt") + public void testSubclassOptInInheritance() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/subclassOptInInheritance.kt"); + } + @Test @TestMetadata("topLevel.kt") public void testTopLevel() 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 cd8e3b2dbba..dc1191af5a8 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 @@ -37560,6 +37560,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/subClassOptInRequired.kt"); } + @Test + @TestMetadata("subclassOptInInheritance.kt") + public void testSubclassOptInInheritance() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/subclassOptInInheritance.kt"); + } + @Test @TestMetadata("topLevel.kt") public void testTopLevel() 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 a1a44fad5ce..adccbad9dd5 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 @@ -37560,6 +37560,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/subClassOptInRequired.kt"); } + @Test + @TestMetadata("subclassOptInInheritance.kt") + public void testSubclassOptInInheritance() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/subclassOptInInheritance.kt"); + } + @Test @TestMetadata("topLevel.kt") public void testTopLevel() throws Exception { diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/subclassOptInInheritance.kt b/compiler/testData/diagnostics/testsWithStdLib/experimental/subclassOptInInheritance.kt new file mode 100644 index 00000000000..2405c5c0ec8 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/subclassOptInInheritance.kt @@ -0,0 +1,64 @@ +// FIR_IDENTICAL +@RequiresOptIn +annotation class Marker + +@Marker +interface I1 + +@SubclassOptInRequired(Marker::class) +interface I2 + +// Should not be enough, and should not depend on the order of I1, I2 +@SubclassOptInRequired(Marker::class) +interface Impl1 : I1, I2 + +@SubclassOptInRequired(Marker::class) +interface Impl2 : I2, I1 + +@Marker +class C + +open class D { + @Marker + open fun bar() {} + + @Marker + open fun baz() {} +} + +@SubclassOptInRequired(Marker::class) +open class E : D() { + init { + val c = C() + D().bar() + } + + fun foo() { + val c = C() + bar() // Error is not needed here (already reported on 'fun bar' declaration) + baz() + } + + override fun bar() { + + } + + @Marker + override fun baz() { + + } +} + +@SubclassOptInRequired(Marker::class) +interface Foo { + fun foo() = Unit +} + +inline fun inlineFoo() { + object : Foo { } +} + +fun test() { + // call site + inlineFoo() +} diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/subclassOptInInheritance.txt b/compiler/testData/diagnostics/testsWithStdLib/experimental/subclassOptInInheritance.txt new file mode 100644 index 00000000000..314fd6694b2 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/subclassOptInInheritance.txt @@ -0,0 +1,68 @@ +package + +public inline fun inlineFoo(): kotlin.Unit +public fun test(): kotlin.Unit + +@Marker public final class C { + public constructor C() + 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 open class D { + public constructor D() + @Marker public open fun bar(): kotlin.Unit + @Marker public open fun baz(): kotlin.Unit + 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 +} + +@kotlin.SubclassOptInRequired(markerClass = Marker::class) public open class E : D { + public constructor E() + public open override /*1*/ fun bar(): kotlin.Unit + @Marker public open override /*1*/ fun baz(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@kotlin.SubclassOptInRequired(markerClass = Marker::class) public interface Foo { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@Marker public interface I1 { + 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 +} + +@kotlin.SubclassOptInRequired(markerClass = Marker::class) public interface I2 { + 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 +} + +@kotlin.SubclassOptInRequired(markerClass = Marker::class) public interface Impl1 : I1, I2 { + 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 +} + +@kotlin.SubclassOptInRequired(markerClass = Marker::class) public interface Impl2 : I2, I1 { + 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 +} + +@kotlin.RequiresOptIn public final annotation class Marker : kotlin.Annotation { + public constructor Marker() + 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 e342ea2a3e9..b52180543b8 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 @@ -37650,6 +37650,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/subClassOptInRequired.kt"); } + @Test + @TestMetadata("subclassOptInInheritance.kt") + public void testSubclassOptInInheritance() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/subclassOptInInheritance.kt"); + } + @Test @TestMetadata("topLevel.kt") public void testTopLevel() throws Exception {