mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
[debugger] IDEA-356844 Replace blocking read action with nonBlocking
* add logging when runBlockingMaybeCancellable is called from a read action without progress GitOrigin-RevId: 43d4852dcd8c78f1346836d717812f6b9f9dddef
This commit is contained in:
committed by
intellij-monorepo-bot
parent
06dd82b6d1
commit
87b602ece4
@@ -17,10 +17,12 @@ import com.intellij.debugger.jdi.VirtualMachineProxyImpl
|
||||
import com.intellij.debugger.requests.ClassPrepareRequestor
|
||||
import com.intellij.debugger.ui.breakpoints.Breakpoint
|
||||
import com.intellij.debugger.ui.impl.watch.StackFrameDescriptorImpl
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.application.readAction
|
||||
import com.intellij.openapi.application.runReadAction
|
||||
import com.intellij.openapi.application.smartReadAction
|
||||
import com.intellij.openapi.fileTypes.FileType
|
||||
import com.intellij.openapi.progress.ProgressManager
|
||||
import com.intellij.openapi.progress.runBlockingMaybeCancellable
|
||||
import com.intellij.openapi.project.DumbService
|
||||
import com.intellij.openapi.project.Project
|
||||
@@ -129,8 +131,15 @@ class KotlinPositionManager(private val debugProcess: DebugProcess) : MultiReque
|
||||
getSourcePositionInternal(location)
|
||||
}
|
||||
|
||||
override fun getSourcePosition(location: Location?): SourcePosition? = runBlockingMaybeCancellable {
|
||||
getSourcePositionInternal(location)
|
||||
override fun getSourcePosition(location: Location?): SourcePosition? {
|
||||
if (ApplicationManager.getApplication().isInternal
|
||||
&& ApplicationManager.getApplication().isReadAccessAllowed
|
||||
&& !ProgressManager.getInstance().hasProgressIndicator()) {
|
||||
LOG.error("Call runBlocking from read action without indicator")
|
||||
}
|
||||
return runBlockingMaybeCancellable {
|
||||
getSourcePositionInternal(location)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun getSourcePositionInternal(location: Location?): SourcePosition? {
|
||||
|
||||
@@ -7,7 +7,7 @@ import com.intellij.debugger.engine.SuspendContextImpl
|
||||
import com.intellij.debugger.impl.DebuggerUtilsEx
|
||||
import com.intellij.debugger.jdi.StackFrameProxyImpl
|
||||
import com.intellij.debugger.jdi.ThreadReferenceProxyImpl
|
||||
import com.intellij.openapi.application.runReadAction
|
||||
import com.intellij.openapi.application.ReadAction
|
||||
import com.sun.jdi.*
|
||||
import org.jetbrains.kotlin.idea.debugger.base.util.*
|
||||
import org.jetbrains.kotlin.idea.debugger.base.util.evaluate.DefaultExecutionContext
|
||||
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.idea.debugger.core.canRunEvaluation
|
||||
import org.jetbrains.kotlin.idea.debugger.core.invokeInManagerThread
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.data.SuspendExitMode
|
||||
import org.jetbrains.kotlin.idea.util.application.isUnitTestMode
|
||||
import java.util.concurrent.Callable
|
||||
|
||||
const val CREATION_STACK_TRACE_SEPARATOR = "\b\b\b" // the "\b\b\b" is used as creation stacktrace separator in kotlinx.coroutines
|
||||
const val CREATION_CLASS_NAME = "_COROUTINE._CREATION"
|
||||
@@ -94,9 +95,9 @@ fun StackTraceElement.isCreationSeparatorFrame() =
|
||||
className.startsWith(CREATION_STACK_TRACE_SEPARATOR) ||
|
||||
className == CREATION_CLASS_NAME
|
||||
|
||||
fun Location.findPosition(debugProcess: DebugProcessImpl) = runReadAction {
|
||||
fun Location.findPosition(debugProcess: DebugProcessImpl) = ReadAction.nonBlocking(Callable {
|
||||
DebuggerUtilsEx.toXSourcePosition(debugProcess.positionManager.getSourcePosition(this))
|
||||
}
|
||||
}).executeSynchronously()
|
||||
|
||||
fun SuspendContextImpl.executionContext() = invokeInManagerThread { DefaultExecutionContext(this, this.frameProxy) }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user