JS: prohibit runtime annotations on external declarations. Warn about runtime annotation in remaining cases. See KT-13895

This commit is contained in:
Alexey Andreev
2016-12-12 19:05:55 +03:00
parent dbe8edda5f
commit 9dc16f0564
8 changed files with 184 additions and 3 deletions
@@ -0,0 +1,59 @@
@Retention(AnnotationRetention.BINARY)
annotation class X
@Retention(AnnotationRetention.RUNTIME)
annotation class Y
@X
external class A {
@X
fun f()
@X
val p: Int
@get:X
val r: Int
}
<!RUNTIME_ANNOTATION_ON_EXTERNAL_DECLARATION!>@Y<!>
external class B {
<!RUNTIME_ANNOTATION_ON_EXTERNAL_DECLARATION!>@Y<!>
fun f()
<!RUNTIME_ANNOTATION_ON_EXTERNAL_DECLARATION!>@Y<!>
val p: Int
<!RUNTIME_ANNOTATION_ON_EXTERNAL_DECLARATION!>@get:Y<!>
val r: Int
}
@X
class C {
@X
fun f() {}
@X
val p: Int = 0
val q: Int
@X get() = 0
@get:X
val r: Int = 0
}
<!RUNTIME_ANNOTATION_NOT_SUPPORTED!>@Y<!>
class D {
<!RUNTIME_ANNOTATION_NOT_SUPPORTED!>@Y<!>
fun f() {}
<!RUNTIME_ANNOTATION_NOT_SUPPORTED!>@Y<!>
val p: Int = 0
val q: Int
<!RUNTIME_ANNOTATION_NOT_SUPPORTED!>@Y<!> get() = 0
<!RUNTIME_ANNOTATION_NOT_SUPPORTED!>@get:Y<!>
val r: Int = 0
}
@@ -0,0 +1,57 @@
package
@X public external final class A {
public constructor A()
@X public final val p: kotlin.Int
public final val r: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@X public final fun f(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@Y public external final class B {
public constructor B()
@Y public final val p: kotlin.Int
public final val r: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@Y public final fun f(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@X public final class C {
public constructor C()
@X public final val p: kotlin.Int = 0
public final val q: kotlin.Int
public final val r: kotlin.Int = 0
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@X public final fun f(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@Y public final class D {
public constructor D()
@Y public final val p: kotlin.Int = 0
public final val q: kotlin.Int
public final val r: kotlin.Int = 0
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@Y public final fun f(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class X : kotlin.Annotation {
public constructor X()
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.annotation.Retention(value = AnnotationRetention.RUNTIME) public final annotation class Y : kotlin.Annotation {
public constructor Y()
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
}