Rewrite hack in codegen for lambdas in anonymous object super calls
Synthetic ClassDescriptor created in codegen for lambdas and such should have correct container, because it'll be used in generation of InnerClasses
This commit is contained in:
+26
@@ -0,0 +1,26 @@
|
||||
open class C
|
||||
|
||||
fun box(): String {
|
||||
class L : C() {
|
||||
val a: Any
|
||||
|
||||
{
|
||||
a = {}
|
||||
}
|
||||
}
|
||||
val l = L()
|
||||
|
||||
val javaClass = l.a.javaClass
|
||||
val enclosingMethod = javaClass.getEnclosingConstructor()!!.getName()
|
||||
if (!enclosingMethod.startsWith("_DefaultPackage\$") || !enclosingMethod.endsWith("\$box\$L")) return "ctor: $enclosingMethod"
|
||||
|
||||
val enclosingClass = javaClass.getEnclosingClass()!!.getName()
|
||||
if (!enclosingClass.startsWith("_DefaultPackage\$") || !enclosingClass.endsWith("\$box\$L")) return "enclosing class: $enclosingClass"
|
||||
|
||||
if (enclosingMethod != enclosingClass) return "$enclosingClass != $enclosingMethod"
|
||||
|
||||
val declaringClass = javaClass.getDeclaringClass()
|
||||
if (declaringClass != null) return "anonymous function has a declaring class: $declaringClass"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+1
-1
@@ -18,4 +18,4 @@ fun box(): String {
|
||||
if (declaringClass != null) return "anonymous function has a declaring class: $declaringClass"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
}
|
||||
+10
-3
@@ -1,7 +1,14 @@
|
||||
open class C(val a: Any)
|
||||
trait C {
|
||||
val a: Any
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val l = object : C({}) {
|
||||
val l = object : C {
|
||||
override val a: Any
|
||||
|
||||
{
|
||||
a = {}
|
||||
}
|
||||
}
|
||||
|
||||
val javaClass = l.a.javaClass
|
||||
@@ -17,4 +24,4 @@ fun box(): String {
|
||||
if (declaringClass != null) return "anonymous function has a declaring class: $declaringClass"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
}
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
open class C(val a: Any)
|
||||
|
||||
fun box(): String {
|
||||
val l = object : C({}) {
|
||||
}
|
||||
|
||||
val javaClass = l.a.javaClass
|
||||
if (javaClass.getEnclosingConstructor() != null) return "ctor should be null"
|
||||
|
||||
val enclosingMethod = javaClass.getEnclosingMethod()!!.getName()
|
||||
if (enclosingMethod != "box") return "method: $enclosingMethod"
|
||||
|
||||
val enclosingClass = javaClass.getEnclosingClass()!!.getName()
|
||||
if (!enclosingClass.startsWith("_DefaultPackage\$") || enclosingClass != l.javaClass.getEnclosingClass()!!.getName())
|
||||
return "enclosing class: $enclosingClass"
|
||||
|
||||
val declaringClass = javaClass.getDeclaringClass()
|
||||
if (declaringClass != null) return "anonymous function has a declaring class: $declaringClass"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user