Evaluate Expression: support anonymous objects evaluation

This commit is contained in:
Natalia Ukhorskaya
2015-02-11 15:45:55 +03:00
parent f507af15c0
commit 0391fbd764
23 changed files with 355 additions and 129 deletions
@@ -0,0 +1,45 @@
package ceAnonymousObject
public val publicTopLevelObject: Any = object { fun test() = 1 }
private val privateTopLevelObject = object { fun test() = 1 }
fun main(args: Array<String>) {
MyClass().foo()
}
class MyClass {
public val publicObject: Any = object { fun test() = 1 }
protected val protectedObject: Any = object { fun test() = 1 }
private val privateObject = object { fun test() = 1 }
fun foo() {
val localObject = object { fun test() = 1 }
//Breakpoint!
val a = 1
}
}
// EXPRESSION: publicTopLevelObject
// RESULT: instance of ceAnonymousObject.CeAnonymousObjectPackage$ceAnonymousObject$@packagePartHASH$publicTopLevelObject$1(id=ID): LceAnonymousObject/CeAnonymousObjectPackage$ceAnonymousObject$@packagePartHASH$publicTopLevelObject$1;
// EXPRESSION: privateTopLevelObject
// RESULT: instance of ceAnonymousObject.CeAnonymousObjectPackage$ceAnonymousObject$@packagePartHASH$privateTopLevelObject$1(id=ID): LceAnonymousObject/CeAnonymousObjectPackage$ceAnonymousObject$@packagePartHASH$privateTopLevelObject$1;
// EXPRESSION: publicObject
// RESULT: instance of ceAnonymousObject.MyClass$publicObject$1(id=ID): LceAnonymousObject/MyClass$publicObject$1;
// EXPRESSION: protectedObject
// RESULT: instance of ceAnonymousObject.MyClass$protectedObject$1(id=ID): LceAnonymousObject/MyClass$protectedObject$1;
// -EXPRESSION: privateObject
// -RESULT: 1
// -EXPRESSION: privateObject.test()
// -RESULT: 1: I
// EXPRESSION: localObject
// RESULT: instance of ceAnonymousObject.MyClass$foo$localObject$1(id=ID): LceAnonymousObject/MyClass$foo$localObject$1;
// EXPRESSION: localObject.test()
// RESULT: 1: I
@@ -0,0 +1,16 @@
package ceAnonymousObjectCapturedInClosure
fun main(args: Array<String>) {
val localObject = object { fun test() = 1 }
var localObjectVar = object { fun test() = 1 }
//Breakpoint!
lambda { localObjectVar.test() }
}
fun lambda(f: () -> Int) = f()
// EXPRESSION: lambda { localObject.test() }
// RESULT: 1: I
// EXPRESSION: lambda { localObjectVar.test() }
// RESULT: 1: I
@@ -0,0 +1,20 @@
package ceAnonymousObjectThisAsReceiver
fun main(args : Array<String>) {
val localObject = object {
fun test() = 1
fun foo() {
//Breakpoint!
val a = 1
}
}
localObject.foo()
}
// EXPRESSION: test()
// RESULT: 1: I
// EXPRESSION: this.test()
// RESULT: 1: I
@@ -9,5 +9,8 @@ trait T {
fun test() = 1
}
//- EXPRESSION: (object: T {}).test()
//- RESULT: 1: I
// EXPRESSION: (object: T {}).test()
// RESULT: 1: I
// EXPRESSION: object: T {}
// RESULT: instance of packageForDebugger.PackageForDebuggerPackage$debugFile$@packagePartHASH$myFun$1(id=ID): LpackageForDebugger/PackageForDebuggerPackage$debugFile$@packagePartHASH$myFun$1;
@@ -1,3 +0,0 @@
object {}
// RESULT: Cannot perform an action because following types are unavailable from debugger scope: <no name provided>