Debugger: allow to evaluate kotlin expressions in java files
#KT-7549 Fixed
If the context is inside PsiJavaFile, get list of all local variables available in current frame (this logic was removed in 29778311e8 01.12.2015 Drop unnecesary logic about additional context for lambda in debugger). For each variable create KtProperty inside top-level KtFunction in KtFile and set it as contextElement for KtCodeFragment. This file should have all imports from PsiJavaFile. We do not create properties on top-level because they will be highlighted as top-level vals/vars.
This commit is contained in:
+19
@@ -0,0 +1,19 @@
|
||||
package jcBlock
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val javaClass = forTests.javaContext.JavaClass()
|
||||
//Breakpoint!
|
||||
javaClass.block()
|
||||
}
|
||||
|
||||
// STEP_INTO: 1
|
||||
// STEP_OVER: 2
|
||||
|
||||
// EXPRESSION: bodyVal
|
||||
// RESULT: 1: I
|
||||
|
||||
// EXPRESSION: thenVal
|
||||
// RESULT: 1: I
|
||||
|
||||
// EXPRESSION: elseVal
|
||||
// RESULT: Unresolved reference: elseVal
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package jcImports
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val javaClass = forTests.javaContext.JavaClass()
|
||||
//Breakpoint!
|
||||
javaClass.imports()
|
||||
}
|
||||
|
||||
// STEP_INTO: 1
|
||||
// STEP_OVER: 1
|
||||
|
||||
// EXPRESSION: list.filter { it == 1 }.size
|
||||
// RESULT: 1: I
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
package jcLocalVariable
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val javaClass = forTests.javaContext.JavaClass()
|
||||
//Breakpoint!
|
||||
javaClass.localVariable()
|
||||
}
|
||||
|
||||
// STEP_INTO: 1
|
||||
// STEP_OVER: 1
|
||||
|
||||
// EXPRESSION: i
|
||||
// RESULT: 1: I
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package jcMarkedObject
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val javaClass = forTests.javaContext.JavaClass()
|
||||
//Breakpoint!
|
||||
javaClass.markObject()
|
||||
}
|
||||
|
||||
// STEP_INTO: 1
|
||||
// STEP_OVER: 1
|
||||
|
||||
// EXPRESSION: i
|
||||
// RESULT: instance of java.lang.Integer(id=ID): Ljava/lang/Integer;
|
||||
|
||||
// EXPRESSION: i_DebugLabel
|
||||
// RESULT: instance of java.lang.Integer(id=ID): Ljava/lang/Integer;
|
||||
|
||||
// DEBUG_LABEL: i = i
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package jcSimple
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val javaClass = forTests.javaContext.JavaClass()
|
||||
//Breakpoint!
|
||||
javaClass.simple()
|
||||
}
|
||||
|
||||
// STEP_INTO: 1
|
||||
|
||||
// EXPRESSION: 1 + 1
|
||||
// RESULT: 2: I
|
||||
@@ -0,0 +1,42 @@
|
||||
package forTests.javaContext;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class JavaClass {
|
||||
public void simple() {
|
||||
int breakpoint = 1;
|
||||
}
|
||||
|
||||
public void localVariable() {
|
||||
int i = 1;
|
||||
int breakpoint = 1;
|
||||
}
|
||||
|
||||
public void block() {
|
||||
int bodyVal = 1;
|
||||
if (true) {
|
||||
int thenVal = 1;
|
||||
int breakpoint = 1;
|
||||
}
|
||||
else {
|
||||
int elseVal = 1;
|
||||
}
|
||||
}
|
||||
|
||||
public void imports() {
|
||||
ArrayList<Integer> list = createList();
|
||||
int breakpoint = 1;
|
||||
}
|
||||
|
||||
private ArrayList<Integer> createList() {
|
||||
ArrayList<Integer> list = new ArrayList<Integer>();
|
||||
list.add(1);
|
||||
list.add(2);
|
||||
return list;
|
||||
}
|
||||
|
||||
public void markObject() {
|
||||
Integer i = 1;
|
||||
int breakpoint = 1;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user