Do not generate non-function/getter/setter (expression) annotations on anonymous functions

This commit is contained in:
Mikhail Glukhikh
2015-09-25 12:47:24 +03:00
parent 74ba21b40c
commit 103bb320c8
6 changed files with 98 additions and 2 deletions
@@ -0,0 +1,20 @@
@Target(AnnotationTarget.CLASS)
annotation class ClsAnn
@Target(AnnotationTarget.FUNCTION)
annotation class FunAnn
@Target(AnnotationTarget.EXPRESSION)
annotation class ExprAnn
fun bar(arg: () -> Int) = arg()
open class My
fun foo(arg: Int): My {
bar @FunAnn { arg }
bar @ExprAnn { arg }
val x = @FunAnn fun() = arg
// TODO: KT-9320: ClsAnn does not appear in bytecode
return (@ClsAnn object: My() {})
}
@@ -0,0 +1,59 @@
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass ClsAnn
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass ExprAnn
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass FunAnn
@kotlin.jvm.internal.KotlinSyntheticClass @kotlin.jvm.internal.KotlinCallable LiteralsKt$foo$1 {
inner class LiteralsKt$foo$1
field $arg: int
method invoke(): java.lang.Object
@FunAnn method invoke(): int
method <init>(p0: int): void
}
@kotlin.jvm.internal.KotlinSyntheticClass @kotlin.jvm.internal.KotlinCallable LiteralsKt$foo$2 {
inner class LiteralsKt$foo$2
field $arg: int
method invoke(): java.lang.Object
method invoke(): int
method <init>(p0: int): void
}
@kotlin.jvm.internal.KotlinClass LiteralsKt$foo$3 {
inner class LiteralsKt$foo$3
field $kotlinClass: kotlin.reflect.KClass
method <clinit>(): void
method <init>(): void
}
@kotlin.jvm.internal.KotlinSyntheticClass @kotlin.jvm.internal.KotlinCallable LiteralsKt$foo$x$1 {
inner class LiteralsKt$foo$x$1
field $arg: int
method invoke(): java.lang.Object
@FunAnn method invoke(): int
method <init>(p0: int): void
}
@kotlin.jvm.internal.KotlinFileFacade LiteralsKt {
inner class LiteralsKt$foo$1
inner class LiteralsKt$foo$2
inner class LiteralsKt$foo$x$1
inner class LiteralsKt$foo$3
method bar(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): int
@org.jetbrains.annotations.NotNull method foo(p0: int): My
}
@kotlin.jvm.internal.KotlinClass My {
field $kotlinClass: kotlin.reflect.KClass
method <clinit>(): void
method <init>(): void
}
@java.lang.Deprecated @kotlin.jvm.internal.KotlinPackage _DefaultPackage {
field $kotlinPackage: kotlin.reflect.KPackage
field $moduleName: java.lang.String
method <clinit>(): void
@kotlin.jvm.internal.KotlinDelegatedMethod method bar(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0): int
@kotlin.jvm.internal.KotlinDelegatedMethod @org.jetbrains.annotations.NotNull method foo(p0: int): My
}