SubclassOptInRequired: add extra test about inheritance and superseding

This commit is contained in:
Mikhail Glukhikh
2022-08-08 12:07:20 +02:00
committed by teamcity
parent 80a9f22052
commit 81e1131441
6 changed files with 156 additions and 0 deletions
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 : <!OPT_IN_USAGE_ERROR!>I1<!>, I2
@SubclassOptInRequired(Marker::class)
interface Impl2 : I2, <!OPT_IN_USAGE_ERROR!>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 = <!OPT_IN_USAGE_ERROR!>C<!>()
D().<!OPT_IN_USAGE_ERROR!>bar<!>()
}
fun foo() {
val c = <!OPT_IN_USAGE_ERROR!>C<!>()
bar() // Error is not needed here (already reported on 'fun bar' declaration)
<!OPT_IN_USAGE_ERROR!>baz<!>()
}
override fun <!OPT_IN_OVERRIDE_ERROR!>bar<!>() {
}
@Marker
override fun baz() {
}
}
@SubclassOptInRequired(Marker::class)
interface Foo {
fun foo() = Unit
}
<!NOTHING_TO_INLINE!>inline<!> fun inlineFoo() {
object : <!OPT_IN_USAGE_ERROR!>Foo<!> { }
}
fun test() {
// call site
inlineFoo()
}
@@ -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
}
@@ -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 {