From ee0daae2ab7e3b1bd218184a89e2083356796754 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 16 Apr 2019 20:15:20 +0300 Subject: [PATCH] Debugger: Support synchronized blocks and functions in evaluator (KT-11888) --- .../classLoading/ClassLoadingAdapter.kt | 7 +++++++ .../singleBreakpoint/synchronizedBlock.kt | 9 +++++++++ .../synchronizedBlock.kt.fragment | 10 ++++++++++ .../singleBreakpoint/synchronizedBlock.out | 18 ++++++++++++++++++ .../KotlinEvaluateExpressionTestGenerated.java | 5 +++++ 5 files changed, 49 insertions(+) create mode 100644 idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/synchronizedBlock.kt create mode 100644 idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/synchronizedBlock.kt.fragment create mode 100644 idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/synchronizedBlock.out diff --git a/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/classLoading/ClassLoadingAdapter.kt b/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/classLoading/ClassLoadingAdapter.kt index 99559db3972..1c365729e67 100644 --- a/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/classLoading/ClassLoadingAdapter.kt +++ b/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/classLoading/ClassLoadingAdapter.kt @@ -20,6 +20,7 @@ import com.sun.jdi.ArrayReference import com.sun.jdi.ArrayType import com.sun.jdi.ClassLoaderReference import com.sun.jdi.Value +import jdk.internal.org.objectweb.asm.Opcodes import org.jetbrains.kotlin.idea.debugger.evaluate.ExecutionContext import org.jetbrains.org.objectweb.asm.ClassReader import org.jetbrains.org.objectweb.asm.Label @@ -63,6 +64,7 @@ interface ClassLoadingAdapter { private fun analyzeClass(classToLoad: ClassToLoad, info: ClassInfoForEvaluator): ClassInfoForEvaluator { val classNode = ClassNode().apply { ClassReader(classToLoad.bytes).accept(this, 0) } + val methodToRun = classNode.methods.single { it.name == GENERATED_FUNCTION_NAME } val visitedLabels = hashSetOf