Serialize descriptors for local/anonymous classes on JVM

Reflection needs this information to work for local classes and anonymous
objects
This commit is contained in:
Alexander Udalov
2015-02-14 03:27:05 +03:00
parent 98b554d995
commit 6ce8d6bd2e
34 changed files with 567 additions and 127 deletions
@@ -0,0 +1,14 @@
// CLASS_NAME_SUFFIX: A$foo$Local
class A {
annotation class Ann(val info: String)
fun foo() {
[Ann("class")] class Local {
Ann("fun") fun foo(): Local = this
Ann("val") val x = foo()
Ann("inner") inner class Inner
}
}
}
@@ -0,0 +1,9 @@
A.Ann(info = "class": kotlin.String) local final class `A$foo$Local`
public constructor `A$foo$Local`()
A.Ann(info = "val": kotlin.String) internal final val x: `A$foo$Local`
A.Ann(info = "fun": kotlin.String) internal final fun foo(): `A$foo$Local`
A.Ann(info = "inner": kotlin.String) local final inner class Inner {
public constructor Inner()
}
@@ -0,0 +1,5 @@
// CLASS_NAME_SUFFIX: $main$1
fun main() = object : Runnable {
override fun run() { }
}
@@ -0,0 +1,4 @@
local final class `_DefaultPackage$anonymousObject$*$main$1` : java.lang.Runnable
public constructor `_DefaultPackage$anonymousObject$*$main$1`()
public open override /*1*/ fun run(): kotlin.Unit
@@ -0,0 +1,22 @@
// CLASS_NAME_SUFFIX: Deepest
fun main() {
class Local {
inner class Inner {
val prop = object {
fun foo() {
fun bar() {
class DeepLocal {
inner class Deepest {
fun local(): Local = Local()
fun inner(): Inner = Inner()
fun deep(): DeepLocal = DeepLocal()
fun deepest(): Deepest? = Deepest()
}
}
}
}
}
}
}
}
@@ -0,0 +1,7 @@
local final inner class Deepest
public constructor Deepest()
internal final fun deep(): `_DefaultPackage$deepInnerChain$*$main$Local$Inner$prop$1$foo$1$DeepLocal`
internal final fun deepest(): `_DefaultPackage$deepInnerChain$*$main$Local$Inner$prop$1$foo$1$DeepLocal`.Deepest?
internal final fun inner(): `_DefaultPackage$deepInnerChain$*$main$Local`.Inner
internal final fun local(): `_DefaultPackage$deepInnerChain$*$main$Local`
@@ -0,0 +1,10 @@
// CLASS_NAME_SUFFIX: main$Local$Inner
fun main() {
class Local {
inner class Inner {
fun local(l: Local) {}
fun inner(i: Inner) {}
}
}
}
@@ -0,0 +1,5 @@
local final inner class Inner
public constructor Inner()
internal final fun inner(/*0*/ i: `_DefaultPackage$innerOfLocal$*$main$Local`.Inner): kotlin.Unit
internal final fun local(/*0*/ l: `_DefaultPackage$innerOfLocal$*$main$Local`): kotlin.Unit
@@ -0,0 +1,13 @@
// CLASS_NAME_SUFFIX: $main$Local
fun main() {
open class Local {
fun param(l: Local) {}
val returnType: Local = this
fun Local.receiver() = this
fun <T : Local, U : T> generic(t: T): U = null!!
}
}
@@ -0,0 +1,7 @@
local open class `_DefaultPackage$localClassInSignature$*$main$Local`
public constructor `_DefaultPackage$localClassInSignature$*$main$Local`()
internal final val returnType: `_DefaultPackage$localClassInSignature$*$main$Local`
internal final fun </*0*/ T : `_DefaultPackage$localClassInSignature$*$main$Local`, /*1*/ U : T> generic(/*0*/ t: T): U
internal final fun param(/*0*/ l: `_DefaultPackage$localClassInSignature$*$main$Local`): kotlin.Unit
internal final fun `_DefaultPackage$localClassInSignature$*$main$Local`.receiver(): `_DefaultPackage$localClassInSignature$*$main$Local`
@@ -0,0 +1,7 @@
// CLASS_NAME_SUFFIX: A$foo$Local
class A {
fun foo() {
class Local
}
}
@@ -0,0 +1,3 @@
local final class `A$foo$Local`
public constructor `A$foo$Local`()
@@ -0,0 +1,5 @@
// CLASS_NAME_SUFFIX: $main$Local
fun main() {
class Local
}
@@ -0,0 +1,3 @@
local final class `_DefaultPackage$simpleInTopLevelFunction$*$main$Local`
public constructor `_DefaultPackage$simpleInTopLevelFunction$*$main$Local`()