Files
kotlin-fork/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InheritingByLocalClassifiers.kt
T
Anastasia.Nekrasova ad9025afa6 [k1/K2]: Mark @SubclassOptInRequired as an experimental
At the moment, SubclassOptInRequired is marked with the
ExperimentalSubclassOptIn annotation. However, it does not work
as expected due to a missing opt-in error. To use SubclassOptInRequired,
an explicit opt-in is necessary because SubclassOptInRequired is an
unstable feature now.

^KT-64739
2024-01-15 14:54:36 +00:00

33 lines
1.3 KiB
Kotlin
Vendored

// FIR_IDENTICAL
@file:OptIn(ExperimentalSubclassOptIn::class)
@RequiresOptIn
annotation class ApiMarker
@SubclassOptInRequired(ApiMarker::class)
interface Interface
fun foo() {
// error: inheriting Interface requires an explicit opt-in
open class LocalOpenKlassA: <!OPT_IN_USAGE_ERROR!>Interface<!>
abstract class LocalAbstractKlassA: <!OPT_IN_USAGE_ERROR!>Interface<!>
class LocalKlassA: <!OPT_IN_USAGE_ERROR!>Interface<!>
data class LocalDataKlassA(val arg: Int): <!OPT_IN_USAGE_ERROR!>Interface<!>
object: <!OPT_IN_USAGE_ERROR!>Interface<!> {}
// opt-in is present, no errors
@OptIn(ApiMarker::class) open class LocalOpenKlassB: Interface
@OptIn(ApiMarker::class) abstract class LocalAbstractKlassB: Interface
@OptIn(ApiMarker::class) class LocalKlassB: Interface
@OptIn(ApiMarker::class) data class LocalDataKlassB(val arg: Int): Interface
@OptIn(ApiMarker::class) object: Interface {}
// requiring to opt-in into local classifiers works as well
// (even though it doesn't make that much sense)
@ApiMarker open class LocalOpenKlassC: Interface
@ApiMarker abstract class LocalAbstractKlassC: Interface
@ApiMarker class LocalKlassC: Interface
@ApiMarker data class LocalDataKlassC(val arg: Int): Interface
@ApiMarker object: Interface {}
}