Call 'StackFrameProxy::visibleVariables()' in a safe way (KT-27462)
This commit is contained in:
@@ -25,8 +25,7 @@ import org.jetbrains.kotlin.codegen.inline.isFakeLocalVariableForInline
|
||||
|
||||
class KotlinStackFrame(frame: StackFrameProxyImpl) : JavaStackFrame(StackFrameDescriptorImpl(frame, MethodsTracker()), true) {
|
||||
override fun getVisibleVariables(): List<LocalVariableProxyImpl>? {
|
||||
return super.getVisibleVariables().filter {
|
||||
!isFakeLocalVariableForInline(it.name())
|
||||
}
|
||||
return super.getStackFrameProxy().visibleVariablesSafe()
|
||||
.filter { !isFakeLocalVariableForInline(it.name()) }
|
||||
}
|
||||
}
|
||||
@@ -7,10 +7,12 @@ package org.jetbrains.kotlin.idea.debugger
|
||||
|
||||
import com.intellij.debugger.engine.DebugProcessImpl
|
||||
import com.intellij.debugger.engine.DebuggerManagerThreadImpl
|
||||
import com.intellij.debugger.engine.evaluation.AbsentInformationEvaluateException
|
||||
import com.intellij.debugger.engine.events.DebuggerCommandImpl
|
||||
import com.intellij.debugger.impl.DebuggerContextImpl
|
||||
import com.intellij.debugger.impl.DebuggerUtilsEx
|
||||
import com.intellij.debugger.jdi.LocalVariableProxyImpl
|
||||
import com.intellij.debugger.jdi.StackFrameProxyImpl
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.sun.jdi.*
|
||||
import com.sun.tools.jdi.LocalVariableImpl
|
||||
@@ -30,6 +32,17 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.inline.InlineUtil
|
||||
import java.util.*
|
||||
|
||||
fun StackFrameProxyImpl.visibleVariablesSafe(): List<LocalVariableProxyImpl> {
|
||||
try {
|
||||
return visibleVariables()
|
||||
} catch (e: AbsentInformationEvaluateException) {
|
||||
// Current implementation of visibleVariables() wraps an AbsentInformationException into EvaluateException
|
||||
return emptyList()
|
||||
} catch (e: AbsentInformationException) {
|
||||
return emptyList()
|
||||
}
|
||||
}
|
||||
|
||||
fun Method.safeAllLineLocations(): List<Location> {
|
||||
return DebuggerUtilsEx.allLineLocations(this) ?: emptyList()
|
||||
}
|
||||
|
||||
+1
-1
@@ -523,7 +523,7 @@ private fun SuspendContextImpl.getNextPositionWithFilter(
|
||||
}
|
||||
|
||||
fun getInlineRangeLocalVariables(stackFrame: StackFrameProxyImpl): List<LocalVariable> {
|
||||
return stackFrame.visibleVariables()
|
||||
return stackFrame.visibleVariablesSafe()
|
||||
.filter {
|
||||
val name = it.name()
|
||||
name.startsWith(JvmAbi.LOCAL_VARIABLE_NAME_PREFIX_INLINE_FUNCTION)
|
||||
|
||||
Reference in New Issue
Block a user