Cache bytecodes for JetCodeFragment in Evaluate Expression

This commit is contained in:
Natalia Ukhorskaya
2014-06-03 12:44:31 +04:00
parent 53a1abf2e6
commit b5f6df3144
34 changed files with 629 additions and 167 deletions
@@ -0,0 +1,206 @@
package clearCache
import java.util.ArrayList
import java.util.HashSet
fun primitiveTypes() {
if (true) {
val a: Any = 0
// EXPRESSION: a
// RESULT: instance of java.lang.Integer(id=ID): Ljava/lang/Integer;
//Breakpoint!
val b = 1
}
if (true) {
val a = 1
// EXPRESSION: a
// RESULT: 1: I
//Breakpoint!
val b = 1
}
for (i in 1..2) {
// EXPRESSION: i
// RESULT: 1: I
// EXPRESSION: i
// RESULT: 2: I
//Breakpoint!
val b = 1
}
for (i in 5.0..6.0) {
// EXPRESSION: i
// RESULT: 5.0: D
// EXPRESSION: i
// RESULT: 6.0: D
//Breakpoint!
val b = 1
}
}
fun subType() {
if (true) {
val o = Base()
// EXPRESSION: o.test()
// RESULT: 100: I
//Breakpoint!
val b = 1
}
if (true) {
val o = Derived()
// EXPRESSION: o.test()
// RESULT: 200: I
//Breakpoint!
val b = 1
}
}
open class Base {
open fun test() = 100
}
class Derived: Base() {
override fun test() = 200
}
fun subTypePlatform() {
if (true) {
val c: MutableList<String> = ArrayList<String>()
// EXPRESSION: c.size()
// RESULT: 0: I
//Breakpoint!
val b = 1
}
if (true) {
val c: List<String> = ArrayList<String>()
// EXPRESSION: c.size()
// RESULT: 0: I
//Breakpoint!
val b = 1
}
if (true) {
val c = ArrayList<String>()
c.add("a")
// EXPRESSION: c.size()
// RESULT: 1: I
//Breakpoint!
val b = 1
}
if (true) {
val c = ArrayList<Int>()
c.add(1)
c.add(2)
// EXPRESSION: c.size()
// RESULT: 2: I
//Breakpoint!
val b = 1
}
if (true) {
val c = HashSet<Int>()
// EXPRESSION: c.size()
// RESULT: 0: I
//Breakpoint!
val b = 1
}
}
fun genericRerun() {
if (true) {
val c = ArrayList<Int>()
c.add(1)
// EXPRESSION: c.get(0)
// RESULT: 1: I
//Breakpoint!
val b = 1
}
if (true) {
val c = ArrayList<String>()
c.add("a")
// EXPRESSION: c.get(0)
// RESULT: "a": Ljava/lang/String;
//Breakpoint!
val b = 1
}
}
fun innerClass() {
if (true) {
val o = TestInnerClasses.Base()
// EXPRESSION: o.test()
// RESULT: 100: I
//Breakpoint!
val b = 1
}
if (true) {
val o = TestInnerClasses.Derived()
// EXPRESSION: o.test()
// RESULT: 200: I
//Breakpoint!
val b = 1
}
}
class TestInnerClasses {
open class Base {
open fun test() = 100
}
class Derived: Base() {
override fun test() = 200
}
}
fun objects() {
// EXPRESSION: obj.test()
// RESULT: 1: I
//Breakpoint!
val a1 = 1
// EXPRESSION: obj.test()
// RESULT: 1: I
//Breakpoint!
val a2 = 1
if (true) {
val o: BaseObject = obj
// EXPRESSION: o.test()
// RESULT: 1: I
//Breakpoint!
val b = 1
}
if (true) {
val o = obj
// EXPRESSION: o.test()
// RESULT: 1: I
//Breakpoint!
val b = 1
}
}
val obj = object: BaseObject() { }
open class BaseObject {
fun test() = 1
}
fun main(args: Array<String>) {
primitiveTypes()
subType()
subTypePlatform()
genericRerun()
innerClass()
objects()
}