Add internal WasExperimental for stdlib

Usages of declarations annotated with WasExperimental are allowed even
if the API version requirement is not satisfied, provided that the
opt-in to all mentioned markers is given. This is needed for smooth
graduation of API in kotlin-stdlib
This commit is contained in:
Alexander Udalov
2018-04-27 16:30:52 +02:00
parent fdc4313860
commit ed6f044fb0
18 changed files with 199 additions and 51 deletions
@@ -0,0 +1,45 @@
// !API_VERSION: 1.2
// !USE_EXPERIMENTAL: kotlin.Experimental
// !DIAGNOSTICS: -INVISIBLE_MEMBER -INVISIBLE_REFERENCE -NEWER_VERSION_IN_SINCE_KOTLIN -UNUSED_PARAMETER
@SinceKotlin("1.3")
fun newPublishedFun() {}
@Experimental
annotation class Marker
@SinceKotlin("1.3")
@WasExperimental(Marker::class)
fun newFunExperimentalInThePast() {}
@SinceKotlin("1.3")
@WasExperimental(Marker::class)
val newValExperimentalInThePast = ""
@SinceKotlin("1.3")
@WasExperimental(Marker::class)
class NewClassExperimentalInThePast
fun use1(c: <!UNRESOLVED_REFERENCE!>NewClassExperimentalInThePast<!>) {
<!UNRESOLVED_REFERENCE!>newPublishedFun<!>()
<!UNRESOLVED_REFERENCE!>newFunExperimentalInThePast<!>()
<!UNRESOLVED_REFERENCE!>newValExperimentalInThePast<!>
<!UNRESOLVED_REFERENCE!>NewClassExperimentalInThePast<!>()
}
@UseExperimental(Marker::class)
fun use2(c: NewClassExperimentalInThePast) {
<!UNRESOLVED_REFERENCE!>newPublishedFun<!>()
newFunExperimentalInThePast()
newValExperimentalInThePast
NewClassExperimentalInThePast()
}
@Marker
fun use3(c: NewClassExperimentalInThePast) {
<!UNRESOLVED_REFERENCE!>newPublishedFun<!>()
newFunExperimentalInThePast()
newValExperimentalInThePast
NewClassExperimentalInThePast()
}
@@ -0,0 +1,14 @@
package
@kotlin.SinceKotlin(version = "1.3") @kotlin.WasExperimental(markerClass = {Marker::class}) public fun newFunExperimentalInThePast(): kotlin.Unit
@kotlin.SinceKotlin(version = "1.3") public fun newPublishedFun(): kotlin.Unit
public fun use1(): kotlin.Unit
@kotlin.UseExperimental(markerClass = {Marker::class}) public fun use2(): kotlin.Unit
@Marker public fun use3(): kotlin.Unit
@kotlin.Experimental 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
}