From c5061e79976cdc4b9e90be37f94d8aecea729fc9 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 14 Dec 2018 19:30:16 +0900 Subject: [PATCH] Replace 'visibleVariablesByName()' calls with a safe implementation --- .../idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt | 2 +- .../jetbrains/kotlin/idea/debugger/evaluate/VariableFinder.kt | 2 +- .../src/org/jetbrains/kotlin/idea/debugger/safeUtil.kt | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt index a813fb9e6be..a52fa401a81 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt @@ -91,7 +91,7 @@ class KotlinCoroutinesAsyncStackTraceProvider : AsyncStackTraceProvider { return null } - val continuationVariable = frameProxy.visibleVariableByName("\$continuation") ?: return null + val continuationVariable = frameProxy.safeVisibleVariableByName("\$continuation") ?: return null val continuation = frameProxy.getValue(continuationVariable) as? ObjectReference ?: return null return collectFrames(continuation) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/VariableFinder.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/VariableFinder.kt index 17ff4c2e455..ebbff964315 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/VariableFinder.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/evaluate/VariableFinder.kt @@ -293,7 +293,7 @@ class VariableFinder private constructor(private val context: EvaluationContextI return null } - val continuationVariable = frameProxy.visibleVariableByName("\$continuation") ?: return null + val continuationVariable = frameProxy.safeVisibleVariableByName("\$continuation") ?: return null val continuation = frameProxy.getValue(continuationVariable) as? ObjectReference ?: return null return findCoroutineContextForContinuation(continuation) } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/safeUtil.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/safeUtil.kt index 4cf8ddd4cfb..7a3df74a305 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/safeUtil.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/safeUtil.kt @@ -15,6 +15,10 @@ fun StackFrameProxyImpl.safeVisibleVariables(): List { return wrapAbsentInformationException { visibleVariables() } ?: emptyList() } +fun StackFrameProxyImpl.safeVisibleVariableByName(name: String): LocalVariableProxyImpl? { + return wrapAbsentInformationException { visibleVariableByName(name) } +} + fun Method.safeAllLineLocations(): List { return DebuggerUtilsEx.allLineLocations(this) ?: emptyList() }