SubclassOptInRequired: add extra test about inheritance and superseding
This commit is contained in:
committed by
teamcity
parent
80a9f22052
commit
81e1131441
+64
@@ -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()
|
||||
}
|
||||
+68
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user