Replace 'visibleVariablesByName()' calls with a safe implementation

This commit is contained in:
Yan Zhulanow
2018-12-14 19:30:16 +09:00
parent 757fc421f7
commit c5061e7997
3 changed files with 6 additions and 2 deletions
@@ -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)
@@ -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)
}
@@ -15,6 +15,10 @@ fun StackFrameProxyImpl.safeVisibleVariables(): List<LocalVariableProxyImpl> {
return wrapAbsentInformationException { visibleVariables() } ?: emptyList()
}
fun StackFrameProxyImpl.safeVisibleVariableByName(name: String): LocalVariableProxyImpl? {
return wrapAbsentInformationException { visibleVariableByName(name) }
}
fun Method.safeAllLineLocations(): List<Location> {
return DebuggerUtilsEx.allLineLocations(this) ?: emptyList()
}