diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/AddSteppingFilterAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/AddSteppingFilterAction.java index 0d043f2c4ebe..f4ddbc4801a1 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/AddSteppingFilterAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/AddSteppingFilterAction.java @@ -3,6 +3,7 @@ package com.intellij.debugger.actions; import com.intellij.debugger.JavaDebuggerBundle; import com.intellij.debugger.engine.DebugProcessImpl; +import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.events.DebuggerCommandImpl; import com.intellij.debugger.impl.DebuggerContextImpl; @@ -23,13 +24,15 @@ import org.jetbrains.annotations.NotNull; public class AddSteppingFilterAction extends DebuggerAction { @Override public void actionPerformed(@NotNull final AnActionEvent e) { - final DebuggerContextImpl debuggerContext = DebuggerAction.getDebuggerContext(e.getDataContext()); + final DebuggerContextImpl debuggerContext = getDebuggerContext(e.getDataContext()); DebugProcessImpl process = debuggerContext.getDebugProcess(); if (process == null) { return; } StackFrameProxyImpl proxy = getStackFrameProxy(e); - process.getManagerThread().schedule(new DebuggerCommandImpl() { + DebuggerManagerThreadImpl managerThread = debuggerContext.getManagerThread(); + if (managerThread == null) return; + managerThread.schedule(new DebuggerCommandImpl() { @Override protected void action() { final String name = getClassName(proxy != null ? proxy : debuggerContext.getFrameProxy()); diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/ArrayAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/ArrayAction.java index e7d17b622cd5..b297c14ca36a 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/ArrayAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/ArrayAction.java @@ -2,6 +2,7 @@ package com.intellij.debugger.actions; import com.intellij.debugger.engine.DebugProcessImpl; +import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.debugger.engine.JavaValue; import com.intellij.debugger.engine.SuspendContextImpl; import com.intellij.debugger.engine.events.SuspendContextCommandImpl; @@ -108,9 +109,9 @@ public abstract class ArrayAction extends DebuggerAction { ValueDescriptorImpl descriptor = ((JavaValue)container).getDescriptor(); - DebugProcessImpl debugProcess = debuggerContext.getDebugProcess(); - if (debugProcess != null) { - debugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(debuggerContext.getSuspendContext()) { + DebuggerManagerThreadImpl managerThread = debuggerContext.getManagerThread(); + if (managerThread != null) { + managerThread.schedule(new SuspendContextCommandImpl(debuggerContext.getSuspendContext()) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { final Renderer lastRenderer = descriptor.getLastRenderer(); diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/AutoRendererAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/AutoRendererAction.java index 8aa53498f124..95e03305bfad 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/AutoRendererAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/AutoRendererAction.java @@ -1,7 +1,7 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.debugger.actions; -import com.intellij.debugger.engine.DebugProcessImpl; +import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.debugger.engine.JavaValue; import com.intellij.debugger.engine.SuspendContextImpl; import com.intellij.debugger.engine.events.DebuggerContextCommandImpl; @@ -18,11 +18,11 @@ public class AutoRendererAction extends AnAction { public void actionPerformed(@NotNull final AnActionEvent e) { final DebuggerContextImpl debuggerContext = DebuggerAction.getDebuggerContext(e.getDataContext()); - final DebugProcessImpl debugProcess = debuggerContext.getDebugProcess(); - if (debugProcess != null) { + final DebuggerManagerThreadImpl managerThread = debuggerContext.getManagerThread(); + if (managerThread != null) { final List selectedValues = ViewAsGroup.getSelectedValues(e); if (!selectedValues.isEmpty()) { - debugProcess.getManagerThread().schedule(new DebuggerContextCommandImpl(debuggerContext) { + managerThread.schedule(new DebuggerContextCommandImpl(debuggerContext) { @Override public void threadAction(@NotNull SuspendContextImpl suspendContext) { for (JavaValue selectedValue : selectedValues) { diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/CreateRendererAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/CreateRendererAction.java index 171f7ce3bbbb..fdc560b87605 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/CreateRendererAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/CreateRendererAction.java @@ -54,7 +54,7 @@ public class CreateRendererAction extends AnAction { final Project project = event.getProject(); - process.getManagerThread().schedule(new DebuggerContextCommandImpl(debuggerContext) { + javaValue.getEvaluationContext().getManagerThread().schedule(new DebuggerContextCommandImpl(debuggerContext) { @Override public void threadAction(@NotNull SuspendContextImpl suspendContext) { Type type = javaValue.getDescriptor().getType(); diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/ExportThreadsAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/ExportThreadsAction.java index dba88648de7e..e5c6d1f5dc3b 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/ExportThreadsAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/ExportThreadsAction.java @@ -4,6 +4,7 @@ package com.intellij.debugger.actions; import com.intellij.debugger.DebuggerManagerEx; import com.intellij.debugger.engine.DebugProcessImpl; +import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.debugger.engine.events.DebuggerCommandImpl; import com.intellij.debugger.impl.DebuggerContextImpl; import com.intellij.debugger.impl.DebuggerSession; @@ -33,8 +34,9 @@ public class ExportThreadsAction extends AnAction { final DebuggerSession session = context.getDebuggerSession(); if (session != null && session.isAttached()) { final DebugProcessImpl process = context.getDebugProcess(); - if (process != null) { - process.getManagerThread().invoke(new DebuggerCommandImpl() { + DebuggerManagerThreadImpl managerThread = context.getManagerThread(); + if (process != null && managerThread != null) { + managerThread.invoke(new DebuggerCommandImpl() { @Override protected void action() { final List threads = ThreadDumpAction.buildThreadStates(process.getVirtualMachineProxy()); diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/ForceEarlyReturnAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/ForceEarlyReturnAction.java index 5a9bc7d13ed3..d0816562bcf2 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/ForceEarlyReturnAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/ForceEarlyReturnAction.java @@ -34,6 +34,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.util.Objects; public class ForceEarlyReturnAction extends DebuggerAction { @Override @@ -52,7 +53,7 @@ public class ForceEarlyReturnAction extends DebuggerAction { final StackFrameProxyImpl proxy = stackFrame.getStackFrameProxy(); final ThreadReferenceProxyImpl thread = proxy.threadProxy(); - debugProcess.getManagerThread().schedule(new DebuggerContextCommandImpl(debuggerContext, thread) { + Objects.requireNonNull(debuggerContext.getManagerThread()).schedule(new DebuggerContextCommandImpl(debuggerContext, thread) { @Override public void threadAction(@NotNull SuspendContextImpl suspendContext) { Method method; diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/FreezeThreadAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/FreezeThreadAction.java index 03bc50b6229f..58c59e69c3e9 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/FreezeThreadAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/FreezeThreadAction.java @@ -14,6 +14,8 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.ApplicationManager; import org.jetbrains.annotations.NotNull; +import java.util.Objects; + public class FreezeThreadAction extends DebuggerAction { @Override public void actionPerformed(@NotNull final AnActionEvent e) { @@ -29,7 +31,7 @@ public class FreezeThreadAction extends DebuggerAction { final ThreadReferenceProxyImpl thread = threadDescriptor.getThreadReference(); if (!threadDescriptor.isFrozen()) { - DebuggerManagerThreadImpl debuggerManagerThread = debugProcess.getManagerThread(); + DebuggerManagerThreadImpl debuggerManagerThread = Objects.requireNonNull(debuggerContext.getManagerThread()); debuggerManagerThread.schedule(new DebuggerCommandImpl() { @Override protected void action() { diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/InterruptThreadAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/InterruptThreadAction.java index e1d6fa89362d..1b01f7aa94ca 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/InterruptThreadAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/InterruptThreadAction.java @@ -19,6 +19,7 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; +import java.util.Objects; final class InterruptThreadAction extends DebuggerAction { @Override @@ -40,7 +41,7 @@ final class InterruptThreadAction extends DebuggerAction { final DebuggerContextImpl debuggerContext = getDebuggerContext(e.getDataContext()); final DebugProcessImpl debugProcess = debuggerContext.getDebugProcess(); if (debugProcess != null) { - debugProcess.getManagerThread().schedule(new DebuggerCommandImpl() { + Objects.requireNonNull(debuggerContext.getManagerThread()).schedule(new DebuggerCommandImpl() { @Override protected void action() { boolean unsupported = false; diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/JavaSmartStepIntoHandler.java b/java/debugger/impl/src/com/intellij/debugger/actions/JavaSmartStepIntoHandler.java index e0521e08e541..468a13f761fd 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/JavaSmartStepIntoHandler.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/JavaSmartStepIntoHandler.java @@ -65,7 +65,8 @@ public class JavaSmartStepIntoHandler extends JvmSmartStepIntoHandler { @NotNull private Promise> findSmartStepTargetsAsync(SourcePosition position, DebuggerSession session, boolean smart) { var res = new AsyncPromise>(); - session.getProcess().getManagerThread().schedule(new DebuggerContextCommandImpl(session.getContextManager().getContext()) { + DebuggerContextImpl context = session.getContextManager().getContext(); + Objects.requireNonNull(context.getManagerThread()).schedule(new DebuggerContextCommandImpl(context) { @Override public void threadAction(@NotNull SuspendContextImpl suspendContext) { Promises.compute(res, () -> diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/JvmDropFrameActionHandler.java b/java/debugger/impl/src/com/intellij/debugger/actions/JvmDropFrameActionHandler.java index 9f1cc1ec0db0..e11b20ae3de5 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/JvmDropFrameActionHandler.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/JvmDropFrameActionHandler.java @@ -37,6 +37,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; public class JvmDropFrameActionHandler implements XDropFrameHandler { @@ -161,7 +162,7 @@ public class JvmDropFrameActionHandler implements XDropFrameHandler { } private static void popFrame(DebugProcessImpl debugProcess, DebuggerContextImpl debuggerContext, JavaStackFrame stackFrame) { - debugProcess.getManagerThread() + Objects.requireNonNull(debuggerContext.getManagerThread()) .schedule(debugProcess.createPopFrameCommand(debuggerContext, stackFrame.getStackFrameProxy())); } diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/ResumeThreadAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/ResumeThreadAction.java index bbc6ce3832fb..2853fa613a74 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/ResumeThreadAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/ResumeThreadAction.java @@ -18,6 +18,8 @@ import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.application.ApplicationManager; import org.jetbrains.annotations.NotNull; +import java.util.Objects; + public class ResumeThreadAction extends DebuggerAction { @Override public void actionPerformed(@NotNull final AnActionEvent e) { @@ -33,8 +35,8 @@ public class ResumeThreadAction extends DebuggerAction { if (threadDescriptor.isSuspended()) { final ThreadReferenceProxyImpl thread = threadDescriptor.getThreadReference(); - DebuggerManagerThreadImpl debuggerManagerThread = debugProcess.getManagerThread(); - debuggerManagerThread.schedule(new DebuggerCommandImpl() { + DebuggerManagerThreadImpl debuggerManagerThread = debuggerContext.getManagerThread(); + Objects.requireNonNull(debuggerManagerThread).schedule(new DebuggerCommandImpl() { @Override protected void action() { SuspendContextImpl suspendingContext = SuspendManagerUtil.getSuspendingContext(debugProcess.getSuspendManager(), thread); diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/SwitchToTheNextContextAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/SwitchToTheNextContextAction.java index bafd333bf22e..818b7ead5abe 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/SwitchToTheNextContextAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/SwitchToTheNextContextAction.java @@ -2,8 +2,8 @@ package com.intellij.debugger.actions; import com.intellij.debugger.engine.DebugProcessImpl; +import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.debugger.engine.SuspendContextImpl; -import com.intellij.debugger.engine.SuspendManagerImpl; import com.intellij.debugger.engine.events.DebuggerContextCommandImpl; import com.intellij.debugger.engine.events.SuspendContextCommandImpl; import com.intellij.debugger.impl.DebuggerContextImpl; @@ -12,23 +12,25 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import org.jetbrains.annotations.NotNull; import java.util.List; +import java.util.Objects; public class SwitchToTheNextContextAction extends DebuggerAction { @Override public void actionPerformed(@NotNull AnActionEvent e) { - final DebuggerContextImpl debuggerContext = DebuggerAction.getDebuggerContext(e.getDataContext()); + final DebuggerContextImpl debuggerContext = getDebuggerContext(e.getDataContext()); DebugProcessImpl process = debuggerContext.getDebugProcess(); if (process == null) { return; } - process.getManagerThread().schedule(new DebuggerContextCommandImpl(debuggerContext) { + DebuggerManagerThreadImpl managerThread = Objects.requireNonNull(debuggerContext.getManagerThread()); + managerThread.schedule(new DebuggerContextCommandImpl(debuggerContext) { @Override public void threadAction(@NotNull SuspendContextImpl suspendContext) { List pausedContexts = process.getSuspendManager().getPausedContexts(); if (pausedContexts.size() > 1) { int currentIndex = pausedContexts.indexOf(debuggerContext.getSuspendContext()); int newIndex = (currentIndex + 1) % pausedContexts.size(); - process.getManagerThread().schedule(new SuspendContextCommandImpl(pausedContexts.get(newIndex)) { + managerThread.schedule(new SuspendContextCommandImpl(pausedContexts.get(newIndex)) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { DebuggerSession.switchContext(suspendContext); diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/ThreadDumpAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/ThreadDumpAction.java index ec5b5b85c0c1..6a0e4871a520 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/ThreadDumpAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/ThreadDumpAction.java @@ -28,10 +28,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public final class ThreadDumpAction extends DumbAwareAction { @Override @@ -45,7 +42,7 @@ public final class ThreadDumpAction extends DumbAwareAction { final DebuggerSession session = context.getDebuggerSession(); if (session != null && session.isAttached()) { final DebugProcessImpl process = context.getDebugProcess(); - process.getManagerThread().invoke(new DebuggerCommandImpl() { + Objects.requireNonNull(context.getManagerThread()).invoke(new DebuggerCommandImpl() { @Override protected void action() { final VirtualMachineProxyImpl vm = process.getVirtualMachineProxy(); diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/ThrowExceptionAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/ThrowExceptionAction.java index e0ec551fdce4..94e1306cc3e6 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/ThrowExceptionAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/ThrowExceptionAction.java @@ -32,6 +32,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.util.Objects; public class ThrowExceptionAction extends DebuggerAction { @Override @@ -41,7 +42,7 @@ public class ThrowExceptionAction extends DebuggerAction { if (stackFrame == null || project == null) { return; } - final DebuggerContextImpl debuggerContext = DebuggerAction.getDebuggerContext(e.getDataContext()); + final DebuggerContextImpl debuggerContext = getDebuggerContext(e.getDataContext()); final DebugProcessImpl debugProcess = debuggerContext.getDebugProcess(); if (debugProcess == null) { return; @@ -50,7 +51,7 @@ public class ThrowExceptionAction extends DebuggerAction { final StackFrameProxyImpl proxy = stackFrame.getStackFrameProxy(); final ThreadReferenceProxyImpl thread = proxy.threadProxy(); - debugProcess.getManagerThread().schedule(new DebuggerContextCommandImpl(debuggerContext, thread) { + Objects.requireNonNull(debuggerContext.getManagerThread()).schedule(new DebuggerContextCommandImpl(debuggerContext, thread) { @Override public void threadAction(@NotNull SuspendContextImpl suspendContext) { ApplicationManager.getApplication().invokeLater( diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/ToggleFieldBreakpointAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/ToggleFieldBreakpointAction.java index 9a3e78f21197..74ed4c60a2b4 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/ToggleFieldBreakpointAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/ToggleFieldBreakpointAction.java @@ -3,7 +3,7 @@ package com.intellij.debugger.actions; import com.intellij.debugger.DebuggerManagerEx; import com.intellij.debugger.SourcePosition; -import com.intellij.debugger.engine.DebugProcessImpl; +import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.debugger.engine.SourcePositionProvider; import com.intellij.debugger.engine.SuspendContextImpl; import com.intellij.debugger.engine.events.DebuggerContextCommandImpl; @@ -109,10 +109,10 @@ public class ToggleFieldBreakpointAction extends AnAction implements ActionRemot NodeDescriptorImpl descriptor = ((NodeDescriptorProvider)value).getDescriptor(); if (descriptor instanceof FieldDescriptorImpl) { final DebuggerContextImpl debuggerContext = DebuggerAction.getDebuggerContext(dataContext); - final DebugProcessImpl debugProcess = debuggerContext.getDebugProcess(); - if (debugProcess != null) { // if there is an active debug session + DebuggerManagerThreadImpl managerThread = debuggerContext.getManagerThread(); + if (managerThread != null) { // if there is an active debug session final Ref positionRef = new Ref<>(null); - debugProcess.getManagerThread().invokeAndWait(new DebuggerContextCommandImpl(debuggerContext) { + managerThread.invokeAndWait(new DebuggerContextCommandImpl(debuggerContext) { @Override public Priority getPriority() { return Priority.HIGH; diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/ViewAsGroup.java b/java/debugger/impl/src/com/intellij/debugger/actions/ViewAsGroup.java index 86e92ec5bdee..66a7cb5c6a8d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/ViewAsGroup.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/ViewAsGroup.java @@ -2,6 +2,7 @@ package com.intellij.debugger.actions; import com.intellij.debugger.engine.DebugProcessImpl; +import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.debugger.engine.JavaValue; import com.intellij.debugger.engine.SuspendContextImpl; import com.intellij.debugger.engine.events.DebuggerContextCommandImpl; @@ -25,6 +26,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.concurrent.CompletableFuture; public class ViewAsGroup extends ActionGroup implements DumbAware { @@ -76,12 +78,12 @@ public class ViewAsGroup extends ActionGroup implements DumbAware { LOG.assertTrue(!values.isEmpty()); - DebugProcessImpl process = debuggerContext.getDebugProcess(); - if (process == null) { + DebuggerManagerThreadImpl managerThread = debuggerContext.getManagerThread(); + if (managerThread == null) { return; } - process.getManagerThread().schedule(new DebuggerContextCommandImpl(debuggerContext) { + managerThread.schedule(new DebuggerContextCommandImpl(debuggerContext) { @Override public void threadAction(@NotNull SuspendContextImpl suspendContext) { for (XValueNodeImpl node : selectedNodes) { @@ -109,7 +111,7 @@ public class ViewAsGroup extends ActionGroup implements DumbAware { List values = getSelectedValues(e); if (!values.isEmpty()) { CompletableFuture> future = new CompletableFuture<>(); - boolean scheduled = process.getManagerThread().schedule(new DebuggerContextCommandImpl(debuggerContext) { + boolean scheduled = Objects.requireNonNull(debuggerContext.getManagerThread()).schedule(new DebuggerContextCommandImpl(debuggerContext) { @Override public void threadAction(@NotNull SuspendContextImpl suspendContext) { getApplicableRenderers(values, process) diff --git a/java/debugger/impl/src/com/intellij/debugger/codeinsight/JavaWithRuntimeCastSurrounder.java b/java/debugger/impl/src/com/intellij/debugger/codeinsight/JavaWithRuntimeCastSurrounder.java index ef0f532065de..384981fc92af 100644 --- a/java/debugger/impl/src/com/intellij/debugger/codeinsight/JavaWithRuntimeCastSurrounder.java +++ b/java/debugger/impl/src/com/intellij/debugger/codeinsight/JavaWithRuntimeCastSurrounder.java @@ -20,6 +20,8 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.Nullable; +import java.util.Objects; + public final class JavaWithRuntimeCastSurrounder extends JavaExpressionSurrounder { @Override @@ -47,7 +49,7 @@ public final class JavaWithRuntimeCastSurrounder extends JavaExpressionSurrounde final ProgressWindow progressWindow = new ProgressWindow(true, expr.getProject()); SurroundWithCastWorker worker = new SurroundWithCastWorker(editor, expr, debuggerContext, progressWindow); progressWindow.setTitle(JavaDebuggerBundle.message("title.evaluating")); - debuggerContext.getDebugProcess().getManagerThread().startProgress(worker, progressWindow); + Objects.requireNonNull(debuggerContext.getManagerThread()).startProgress(worker, progressWindow); } return null; } diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java index f4e952a2678c..4ef21d3cd9f6 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java @@ -641,7 +641,7 @@ public class DebugProcessEvents extends DebugProcessImpl { //we use schedule to allow processing other events during processing this one //this is especially necessary if a method is breakpoint condition - getManagerThread().schedule(new SuspendContextCommandImpl(suspendContext) { + suspendContext.getManagerThread().schedule(new SuspendContextCommandImpl(suspendContext) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { logSuspendContext(suspendContext, "start locatable event processing"); diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java index 9b65c0fd9e17..d5883d934572 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java @@ -975,7 +975,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb if (myState.compareAndSet(State.INITIAL, State.DETACHING) || myState.compareAndSet(State.ATTACHED, State.DETACHING)) { try { if (!keepManagerThread) { - getManagerThread().close(); + myDebuggerManagerThread.close(); } } finally { @@ -1023,7 +1023,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb } private void onRootProcessClosed() { - getManagerThread().cancelScope(); + myDebuggerManagerThread.cancelScope(); myWaitFor.up(); } @@ -2290,7 +2290,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb for (SuspendContextImpl suspendContext : suspendingContexts) { if (suspendContext.getSuspendPolicy() == EventRequest.SUSPEND_EVENT_THREAD && suspendContext.getEventThread() == myThread) { getSession().getXDebugSession().sessionResumed(); - getManagerThread().invoke(createResumeCommand(suspendContext)); + getCommandManagerThread().invoke(createResumeCommand(suspendContext)); } else { DebuggerManagerEx.getInstanceEx(project).getBreakpointManager().removeThreadFilter(context.getDebugProcess()); @@ -2429,7 +2429,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb if (vmData != null && vmData.vm != null) { myDebuggerManagerThread = vmData.debuggerManagerThread; reattach(vmData.connection, () -> {}, () -> { - afterProcessStarted(() -> getManagerThread().schedule(new DebuggerCommandImpl() { + afterProcessStarted(() -> vmData.debuggerManagerThread.schedule(new DebuggerCommandImpl() { @Override protected void action() { try { @@ -2619,7 +2619,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb if (vm != null) { final VirtualMachine vm1 = vm; - afterProcessStarted(() -> getManagerThread().schedule(new DebuggerCommandImpl(PrioritizedTask.Priority.HIGH) { + afterProcessStarted(() -> getCommandManagerThread().schedule(new DebuggerCommandImpl(PrioritizedTask.Priority.HIGH) { @Override protected void action() { try { diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebugProcess.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebugProcess.java index e24f25ffb56f..ba39e0ed2977 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebugProcess.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebugProcess.java @@ -118,7 +118,7 @@ public class JavaDebugProcess extends XDebugProcess { final SuspendContextImpl newSuspendContext = newContext.getSuspendContext(); if (newSuspendContext != null && (shouldApplyContext(newContext) || event == DebuggerSession.Event.REFRESH_WITH_STACK)) { - process.getManagerThread().schedule(new SuspendContextCommandImpl(newSuspendContext) { + newSuspendContext.getManagerThread().schedule(new SuspendContextCommandImpl(newSuspendContext) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { ThreadReferenceProxyImpl threadProxy = newContext.getThreadProxy(); diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaExecutionStack.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaExecutionStack.java index a198c01409c0..30d2e0557372 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaExecutionStack.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaExecutionStack.java @@ -191,7 +191,8 @@ public class JavaExecutionStack extends XExecutionStack { if (container.isObsolete()) return; SuspendContextImpl pausedContext = SuspendManagerUtil.getPausedSuspendingContext(myDebugProcess.getSuspendManager(), myThreadProxy); SuspendContextImpl context = pausedContext != null ? pausedContext : myDebugProcess.getDebuggerContext().getSuspendContext(); - myDebugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(context) { + if (context == null) return; + context.getManagerThread().schedule(new SuspendContextCommandImpl(context) { @Override public Priority getPriority() { return Priority.NORMAL; @@ -214,7 +215,7 @@ public class JavaExecutionStack extends XExecutionStack { iterator.next(); added++; } - myDebugProcess.getManagerThread().schedule( + suspendContext.getManagerThread().schedule( new AppendFrameCommand(suspendContext, iterator, container, added, firstFrameIndex)); } catch (EvaluateException e) { @@ -393,7 +394,7 @@ public class JavaExecutionStack extends XExecutionStack { @Nullable List asyncStackFrames, @Nullable List creationStackFrames, boolean separator) { - myDebugProcess.getManagerThread().schedule( + suspendContext.getManagerThread().schedule( new AppendFrameCommand(suspendContext, stackFramesIterator, myContainer, myAdded, mySkip, myHiddenFrames, asyncStackFrames, creationStackFrames, myAddedAsync, separator)); } diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java index ecfeaf7bccfc..c5b92941779e 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java @@ -115,7 +115,7 @@ public class JavaStackFrame extends XStackFrame implements JVMStackFrameInfoProv } private void scheduleComputeChildrenTask(@NotNull XCompositeNode node, DebuggerContextImpl context, ThreadReferenceProxyImpl thread) { - myDebugProcess.getManagerThread().schedule(new DebuggerContextCommandImpl(context, thread) { + Objects.requireNonNull(context.getManagerThread()).schedule(new DebuggerContextCommandImpl(context, thread) { @Override public Priority getPriority() { return Priority.NORMAL; diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java index bb5acdd45f5f..74a1923a87cf 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java @@ -522,7 +522,7 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV public void computeTypeSourcePosition(@NotNull final XNavigatable navigatable) { if (myEvaluationContext.getSuspendContext().isResumed()) return; DebugProcessImpl debugProcess = myEvaluationContext.getDebugProcess(); - debugProcess.getManagerThread().schedule(new NavigateCommand(getDebuggerContext(), myValueDescriptor, debugProcess, null) { + myEvaluationContext.getManagerThread().schedule(new NavigateCommand(getDebuggerContext(), myValueDescriptor, debugProcess, null) { @Override public Priority getPriority() { return Priority.HIGH; @@ -738,7 +738,7 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV catch (ClassNotLoadedException ex) { final String className = ex.className(); if (loadClass(className) != null) { - myDebugProcess.getManagerThread().schedule(createRetryCommand()); + suspendContext.getManagerThread().schedule(createRetryCommand()); } } } diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValueModifier.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValueModifier.java index 6aa4badef9d8..5c5810d0313c 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValueModifier.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValueModifier.java @@ -254,7 +254,7 @@ public abstract class JavaValueModifier extends XValueModifier implements XStrin }; progressWindow.setTitle(JavaDebuggerBundle.message("title.evaluating")); - evaluationContext.getDebugProcess().getManagerThread().startProgress(askSetAction, progressWindow); + evaluationContext.getManagerThread().startProgress(askSetAction, progressWindow); } @Override diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/PossiblySyncCommand.java b/java/debugger/impl/src/com/intellij/debugger/engine/PossiblySyncCommand.java index 7f002f80dcd7..a74f9636de06 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/PossiblySyncCommand.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/PossiblySyncCommand.java @@ -33,8 +33,7 @@ public abstract class PossiblySyncCommand extends SuspendContextCommandImpl { if (delay < 0 || myRetries-- <= 0) { return false; } - DebugProcess process = suspendContext.getDebugProcess(); - DebuggerManagerThreadImpl managerThread = ((DebuggerManagerThreadImpl)process.getManagerThread()); + DebuggerManagerThreadImpl managerThread = suspendContext.getManagerThread(); VirtualMachine virtualMachine = suspendContext.getVirtualMachineProxy().getVirtualMachine(); if (!(virtualMachine instanceof VirtualMachineImpl) || !managerThread.hasAsyncCommands() && ((VirtualMachineImpl)virtualMachine).isIdle()) { @@ -43,10 +42,7 @@ public abstract class PossiblySyncCommand extends SuspendContextCommandImpl { else { // reschedule with a small delay hold(); - AppExecutorUtil.getAppScheduledExecutorService().schedule(() -> { - DebuggerManagerThreadImpl thread = (DebuggerManagerThreadImpl)process.getManagerThread(); - return thread.schedule(this); - }, delay, TimeUnit.MILLISECONDS); + AppExecutorUtil.getAppScheduledExecutorService().schedule(() -> managerThread.schedule(this), delay, TimeUnit.MILLISECONDS); return true; } } diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/SteppingProgressTracker.kt b/java/debugger/impl/src/com/intellij/debugger/engine/SteppingProgressTracker.kt index 7df2fb3a2832..ca242c8d4c8e 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/SteppingProgressTracker.kt +++ b/java/debugger/impl/src/com/intellij/debugger/engine/SteppingProgressTracker.kt @@ -49,7 +49,8 @@ private class CancelingSteppingListener : SteppingListener { val steppingName = steppingAction.steppingName val stepCompetedStatus = CompletableDeferred() - debuggerProcessImpl.managerThread.schedule(PrioritizedTask.Priority.NORMAL) { + val managerThread = suspendContext.managerThread + managerThread.schedule(PrioritizedTask.Priority.NORMAL) { // Need to schedule in the separate debugger command, so async name getter will not fail // because of the current suspend context become resumed val whereStrFuture: CompletableFuture = if (threadForStepping != null) { @@ -64,11 +65,11 @@ private class CancelingSteppingListener : SteppingListener { whereStrFuture.thenAccept { whereStr -> @Suppress("HardCodedStringLiteral") val steppingRestrictionMessage = getSteppingRestrictionMessage(whereStr, steppingAction) - debuggerProcessImpl.managerThread.makeCancelable(debuggerProcessImpl.project, steppingRestrictionMessage, steppingName, stepCompetedStatus) { + managerThread.makeCancelable(debuggerProcessImpl.project, steppingRestrictionMessage, steppingName, stepCompetedStatus) { val command: DebuggerCommandImpl = if (needSuspendOnlyThread) debuggerProcessImpl.createFreezeThreadCommand(threadForStepping) else debuggerProcessImpl.createPauseCommand(threadForStepping) - debuggerProcessImpl.managerThread.schedule(command) + managerThread.schedule(command) } } } diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/SuspendContextImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/SuspendContextImpl.java index 39cc627fa13e..93b30f957cc3 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/SuspendContextImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/SuspendContextImpl.java @@ -487,7 +487,7 @@ public abstract class SuspendContextImpl extends XSuspendContext implements Susp @Override public void computeExecutionStacks(final XExecutionStackContainer container) { assertCanBeUsed(); - myDebugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(this) { + getManagerThread().schedule(new SuspendContextCommandImpl(this) { final Set myAddedThreads = new HashSet<>(); @Override diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerImpl.java index 8ec9e348cf90..3a8ddae27f15 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerImpl.java @@ -348,7 +348,7 @@ public class SuspendManagerImpl implements SuspendManager { } // resume in a separate request to allow other requests be processed (e.g. dependent bpts enable) suspendContext.myIsGoingToResume = true; - myDebugProcess.getManagerThread().schedule(PrioritizedTask.Priority.HIGH, () -> resume(suspendContext)); + suspendContext.getManagerThread().schedule(PrioritizedTask.Priority.HIGH, () -> resume(suspendContext)); } private void notifyPaused(@NotNull SuspendContextImpl suspendContext, boolean pushPaused) { diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerUtil.java b/java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerUtil.java index f863fe3483c8..2cb0dc209ff0 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerUtil.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/SuspendManagerUtil.java @@ -87,7 +87,7 @@ public final class SuspendManagerUtil { public static void switchToThreadInSuspendAllContext(@NotNull SuspendContextImpl suspendAllContext, @NotNull ThreadReferenceProxyImpl threadProxy) { assert suspendAllContext.getSuspendPolicy() == EventRequest.SUSPEND_ALL; DebugProcessImpl debugProcess = suspendAllContext.getDebugProcess(); - debugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(suspendAllContext) { + suspendAllContext.getManagerThread().schedule(new SuspendContextCommandImpl(suspendAllContext) { @Override public void contextAction(@NotNull SuspendContextImpl c) { DebuggerSession session = debugProcess.getSession(); diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/SuspendOtherThreadsRequestor.java b/java/debugger/impl/src/com/intellij/debugger/engine/SuspendOtherThreadsRequestor.java index e2310bca65f7..c86d8147dacd 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/SuspendOtherThreadsRequestor.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/SuspendOtherThreadsRequestor.java @@ -123,7 +123,7 @@ public class SuspendOtherThreadsRequestor implements FilteredRequestor { //noinspection DataFlowIssue newSuspendContext.setThread(suspendContext.getEventThread().getThreadReference()); if (processSuspendAll(newSuspendContext, suspendContext, performOnSuspendAll)) { - process.getManagerThread().schedule(new SuspendContextCommandImpl(newSuspendContext) { + newSuspendContext.getManagerThread().schedule(new SuspendContextCommandImpl(newSuspendContext) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { //noinspection DataFlowIssue @@ -199,7 +199,7 @@ public class SuspendOtherThreadsRequestor implements FilteredRequestor { .warn("Fails attempt to switch from suspend-thread context to suspend-all context. Will be rescheduled."); // Reschedule the request after some time to finish the evaluation. // noinspection SSBasedInspection - new SingleAlarm(() -> myProcess.getManagerThread().schedule(new DebuggerCommandImpl() { + new SingleAlarm(() -> suspendContext.getManagerThread().schedule(new DebuggerCommandImpl() { @Override protected void action() { enableRequest(myProcess, myParameters); diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/ThreadBlockedMonitor.java b/java/debugger/impl/src/com/intellij/debugger/engine/ThreadBlockedMonitor.java index b46501b9fc1c..30eee16aeada 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/ThreadBlockedMonitor.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/ThreadBlockedMonitor.java @@ -117,7 +117,7 @@ public class ThreadBlockedMonitor { protected void action() { ThreadReferenceProxyImpl threadProxy = process.getVirtualMachineProxy().getThreadReferenceProxy(blockingThread); SuspendContextImpl suspendingContext = SuspendManagerUtil.getSuspendingContext(process.getSuspendManager(), threadProxy); - process.getManagerThread() + getCommandManagerThread() .invoke(process.createResumeThreadCommand(suspendingContext, threadProxy)); } }); diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/dfaassist/DfaAssist.java b/java/debugger/impl/src/com/intellij/debugger/engine/dfaassist/DfaAssist.java index 6d3833b24b03..6776c09a67cd 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/dfaassist/DfaAssist.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/dfaassist/DfaAssist.java @@ -36,6 +36,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.concurrency.CancellablePromise; +import java.util.Objects; import java.util.concurrent.Callable; import static com.intellij.xdebugger.impl.dfaassist.DfaAssistBase.AssistMode.*; @@ -123,7 +124,7 @@ public final class DfaAssist extends DfaAssistBase implements DebuggerContextLis return; } SmartPsiElementPointer pointer = SmartPointerManager.createPointer(element); - debugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(newContext.getSuspendContext()) { + Objects.requireNonNull(newContext.getManagerThread()).schedule(new SuspendContextCommandImpl(newContext.getSuspendContext()) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { StackFrameProxyImpl proxy = suspendContext.getFrameProxy(); diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/DefaultCodeFragmentFactory.java b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/DefaultCodeFragmentFactory.java index d5ebd9719f16..8d5854baf09d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/DefaultCodeFragmentFactory.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/DefaultCodeFragmentFactory.java @@ -6,6 +6,7 @@ import com.intellij.codeInsight.completion.JavaCompletionUtil; import com.intellij.debugger.DebuggerManagerEx; import com.intellij.debugger.JavaDebuggerBundle; import com.intellij.debugger.codeinsight.RuntimeTypeEvaluator; +import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.debugger.engine.JavaDebuggerCodeFragmentFactory; import com.intellij.debugger.engine.evaluation.expression.EvaluatorBuilder; import com.intellij.debugger.engine.evaluation.expression.EvaluatorBuilderImpl; @@ -82,8 +83,8 @@ public class DefaultCodeFragmentFactory extends JavaDebuggerCodeFragmentFactory } final DebuggerContextImpl debuggerContext = DebuggerManagerEx.getInstanceEx(project).getContext(); - DebuggerSession debuggerSession = debuggerContext.getDebuggerSession(); - if (debuggerSession != null && debuggerContext.getSuspendContext() != null) { + DebuggerManagerThreadImpl managerThread = debuggerContext.getManagerThread(); + if (managerThread != null) { final Semaphore semaphore = new Semaphore(); semaphore.down(); final AtomicReference nameRef = new AtomicReference<>(); @@ -95,7 +96,7 @@ public class DefaultCodeFragmentFactory extends JavaDebuggerCodeFragmentFactory semaphore.up(); } }; - debuggerSession.getProcess().getManagerThread().invoke(worker); + managerThread.invoke(worker); for (int i = 0; i < 50; i++) { ProgressManager.checkCanceled(); if (semaphore.waitFor(20)) break; diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/EvaluationContextImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/EvaluationContextImpl.java index 7f72bc4481c8..810a03229fc5 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/EvaluationContextImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/EvaluationContextImpl.java @@ -83,7 +83,7 @@ public final class EvaluationContextImpl extends UserDataHolderBase implements E } public DebuggerManagerThreadImpl getManagerThread() { - return getDebugProcess().getManagerThread(); + return getSuspendContext().getManagerThread(); } @Override diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/events/SuspendContextCommandImpl.kt b/java/debugger/impl/src/com/intellij/debugger/engine/events/SuspendContextCommandImpl.kt index 1ad4e9cc2819..4a9dd0082495 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/events/SuspendContextCommandImpl.kt +++ b/java/debugger/impl/src/com/intellij/debugger/engine/events/SuspendContextCommandImpl.kt @@ -83,7 +83,7 @@ abstract class SuspendContextCommandImpl protected constructor(open val suspendC else { val postponed = suspendContext.pollPostponedCommand() if (postponed != null) { - suspendContext.debugProcess.managerThread.pushBack(postponed) + suspendContext.managerThread.pushBack(postponed) } } } diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextImpl.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextImpl.java index 312ad60bce80..1eaf18d60bba 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextImpl.java @@ -90,6 +90,13 @@ public final class DebuggerContextImpl implements DebuggerContext { return myFrameProxy; } + public @Nullable DebuggerManagerThreadImpl getManagerThread() { + if (mySuspendContext != null) return mySuspendContext.getManagerThread(); + DebugProcessImpl debugProcess = getDebugProcess(); + //noinspection UsagesOfObsoleteApi + return debugProcess != null ? debugProcess.getManagerThread() : null; + } + public SourcePosition getSourcePosition() { LOG.assertTrue(myInitialized); return mySourcePosition; diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextUtil.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextUtil.java index d62f4eda2057..ee6b75d2ff33 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextUtil.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextUtil.java @@ -28,6 +28,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.Objects; import java.util.function.Consumer; import java.util.function.Function; @@ -38,7 +39,7 @@ public final class DebuggerContextUtil { final DebuggerSession session = context.getDebuggerSession(); if (session != null) { - session.getProcess().getManagerThread().schedule(new DebuggerCommandImpl(PrioritizedTask.Priority.HIGH) { + Objects.requireNonNull(context.getManagerThread()).schedule(new DebuggerCommandImpl(PrioritizedTask.Priority.HIGH) { @Override protected void action() { SuspendContextImpl threadSuspendContext = @@ -86,7 +87,7 @@ public final class DebuggerContextUtil { action.accept(defaultDebuggerContext); } else { - debugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(pausedContext) { + pausedContext.getManagerThread().schedule(new SuspendContextCommandImpl(pausedContext) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { DebuggerContextImpl debuggerContext = DebuggerContextImpl.createDebuggerContext( diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java index 44dc9492ca6a..5ad013a0efbe 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java @@ -176,11 +176,12 @@ public final class DebuggerSession implements AbstractDebuggerSession { fireStateChanged(context, event); }; - if (context.getSuspendContext() == null) { + SuspendContextImpl suspendContext = context.getSuspendContext(); + if (suspendContext == null) { setStateRunnable.run(); } else { - getProcess().getManagerThread().schedule(new SuspendContextCommandImpl(context.getSuspendContext()) { + suspendContext.getManagerThread().schedule(new SuspendContextCommandImpl(suspendContext) { @Override public Priority getPriority() { return Priority.HIGH; @@ -783,7 +784,7 @@ public final class DebuggerSession implements AbstractDebuggerSession { public static void switchContext(@NotNull SuspendContextImpl suspendContext) { DebugProcessImpl debugProcess = suspendContext.getDebugProcess(); - debugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(suspendContext) { + suspendContext.getManagerThread().schedule(new SuspendContextCommandImpl(suspendContext) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { DebuggerSession session = debugProcess.getSession(); diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/SourceCodeChecker.java b/java/debugger/impl/src/com/intellij/debugger/impl/SourceCodeChecker.java index 89dd1eb25ec9..4a04bbb459a6 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/SourceCodeChecker.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/SourceCodeChecker.java @@ -54,7 +54,7 @@ public final class SourceCodeChecker { if (suspendContext == null) { return; } - suspendContext.getDebugProcess().getManagerThread().schedule(new SuspendContextCommandImpl(suspendContext) { + suspendContext.getManagerThread().schedule(new SuspendContextCommandImpl(suspendContext) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { diff --git a/java/debugger/impl/src/com/intellij/debugger/memory/action/CalculateRetainedSizeAction.java b/java/debugger/impl/src/com/intellij/debugger/memory/action/CalculateRetainedSizeAction.java index 6714845d5ef8..2b380dc219e1 100644 --- a/java/debugger/impl/src/com/intellij/debugger/memory/action/CalculateRetainedSizeAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/memory/action/CalculateRetainedSizeAction.java @@ -45,7 +45,7 @@ public class CalculateRetainedSizeAction extends DebuggerTreeAction { dialog.show(); SuspendContextImpl suspendContext = debugProcess.getSuspendManager().getPausedContext(); - debugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(suspendContext) { + suspendContext.getManagerThread().schedule(new SuspendContextCommandImpl(suspendContext) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { try { diff --git a/java/debugger/impl/src/com/intellij/debugger/memory/agent/ui/PathsToClosestGcRootsDialog.java b/java/debugger/impl/src/com/intellij/debugger/memory/agent/ui/PathsToClosestGcRootsDialog.java index a4d9b3920e75..0ab81e9fa818 100644 --- a/java/debugger/impl/src/com/intellij/debugger/memory/agent/ui/PathsToClosestGcRootsDialog.java +++ b/java/debugger/impl/src/com/intellij/debugger/memory/agent/ui/PathsToClosestGcRootsDialog.java @@ -56,7 +56,7 @@ public class PathsToClosestGcRootsDialog extends MemoryAgentDialog { DebugProcessImpl debugProcess = javaDebugProcess.getDebuggerSession().getProcess(); SuspendContextImpl suspendContext = debugProcess.getSuspendManager().getPausedContext(); PathsToClosestGcRootsDialog dialog = this; - debugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(suspendContext) { + suspendContext.getManagerThread().schedule(new SuspendContextCommandImpl(suspendContext) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { if (dialog.isDisposed()) { diff --git a/java/debugger/impl/src/com/intellij/debugger/memory/ui/ClassesFilteredView.java b/java/debugger/impl/src/com/intellij/debugger/memory/ui/ClassesFilteredView.java index 92f675a42db3..acd0f4da14c8 100644 --- a/java/debugger/impl/src/com/intellij/debugger/memory/ui/ClassesFilteredView.java +++ b/java/debugger/impl/src/com/intellij/debugger/memory/ui/ClassesFilteredView.java @@ -210,7 +210,7 @@ public class ClassesFilteredView extends ClassesFilteredViewBase { @Override protected void scheduleUpdateClassesCommand(XSuspendContext context) { SuspendContextImpl suspendContext = (SuspendContextImpl)context; - suspendContext.getDebugProcess().getManagerThread().schedule(new MyUpdateClassesCommand(suspendContext)); + suspendContext.getManagerThread().schedule(new MyUpdateClassesCommand(suspendContext)); } @Nullable diff --git a/java/debugger/impl/src/com/intellij/debugger/memory/ui/CollectionHistoryView.kt b/java/debugger/impl/src/com/intellij/debugger/memory/ui/CollectionHistoryView.kt index 217ce1d20f45..84335ae2b06d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/memory/ui/CollectionHistoryView.kt +++ b/java/debugger/impl/src/com/intellij/debugger/memory/ui/CollectionHistoryView.kt @@ -167,7 +167,7 @@ class CollectionHistoryView(private val myClsName: String, private fun createChildren(values: List, renderer: NodeRenderer?): XValueChildrenList { val children = XValueChildrenList() - myDebugProcess.managerThread.invokeAndWait(object : DebuggerCommandImpl() { + mySuspendContext.managerThread.invokeAndWait(object : DebuggerCommandImpl() { override fun action() { for (ins in values) { val evalContext = EvaluationContextImpl(mySuspendContext, mySuspendContext.frameProxy) @@ -184,7 +184,7 @@ class CollectionHistoryView(private val myClsName: String, } private fun invokeInDebuggerThread(runnable: () -> Unit) { - myDebugProcess.managerThread.schedule(object : DebuggerCommandImpl() { + mySuspendContext.managerThread.schedule(object : DebuggerCommandImpl() { override fun action() { runnable() } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java index af18943c94dd..e383048d8fb4 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java @@ -46,6 +46,7 @@ import org.jetbrains.java.debugger.breakpoints.properties.JavaBreakpointProperti import javax.swing.*; import java.util.List; +import java.util.Objects; public abstract class BreakpointWithHighlighter

extends Breakpoint

{ private static final Logger LOG = Logger.getInstance(BreakpointWithHighlighter.class); @@ -337,7 +338,7 @@ public abstract class BreakpointWithHighlighter

getNodeFactory().setHistoryByContext(context)); + managerThread.schedule(PrioritizedTask.Priority.NORMAL, () -> getNodeFactory().setHistoryByContext(context)); build(context); } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTreeNodeImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTreeNodeImpl.java index de3752d0db11..8f0a7cfc0f03 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTreeNodeImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/DebuggerTreeNodeImpl.java @@ -28,6 +28,7 @@ import javax.swing.*; import javax.swing.tree.MutableTreeNode; import java.util.HashMap; import java.util.Map; +import java.util.Objects; public class DebuggerTreeNodeImpl extends TreeBuilderNode implements DebuggerTreeNode, NodeDescriptorProvider, MutableTreeNode { private Icon myIcon; @@ -108,7 +109,7 @@ public class DebuggerTreeNodeImpl extends TreeBuilderNode implements DebuggerTre myIcon = DebuggerTreeRenderer.getDescriptorIcon(MessageDescriptor.EVALUATING); myText = DebuggerTreeRenderer.getDescriptorText(context, MessageDescriptor.EVALUATING, false); - context.getDebugProcess().getManagerThread().invoke(new DebuggerContextCommandImpl(context) { + Objects.requireNonNull(context.getManagerThread()).invoke(new DebuggerContextCommandImpl(context) { @Override public void threadAction(@NotNull SuspendContextImpl suspendContext) { runnable.run(); diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java index dbf9581a1a15..a50abd9c3126 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java @@ -173,7 +173,7 @@ public abstract class ValueDescriptorImpl extends NodeDescriptorImpl implements final Semaphore semaphore = new Semaphore(); semaphore.down(); - evalContext.getDebugProcess().getManagerThread().invoke(new SuspendContextCommandImpl(evalContext.getSuspendContext()) { + evalContext.getManagerThread().invoke(new SuspendContextCommandImpl(evalContext.getSuspendContext()) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { // re-setting the context will cause value recalculation diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ArrayFilterInplaceEditor.kt b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ArrayFilterInplaceEditor.kt index f169d082634f..46df182d1706 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ArrayFilterInplaceEditor.kt +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ArrayFilterInplaceEditor.kt @@ -96,8 +96,7 @@ final class ArrayFilterInplaceEditor(node: XDebuggerTreeNode, private val myTemp fun edit(node: XDebuggerTreeNode, temp: Boolean) { val javaValue = (node.parent as XValueNodeImpl).valueContainer if (javaValue is JavaValue) { - val debugProcess = javaValue.evaluationContext.debugProcess - debugProcess.managerThread.schedule( + javaValue.evaluationContext.managerThread.schedule( object : SuspendContextCommandImpl(javaValue.evaluationContext.suspendContext) { override fun getPriority(): PrioritizedTask.Priority { return PrioritizedTask.Priority.NORMAL diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java index aecf2589bf05..1c0ff4e11847 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/BatchEvaluator.java @@ -25,32 +25,28 @@ import java.util.*; public final class BatchEvaluator { private static final Logger LOG = Logger.getInstance(BatchEvaluator.class); - private final DebugProcess myDebugProcess; - private static final Key BATCH_EVALUATOR_KEY = new Key<>("BatchEvaluator"); public static final Key REMOTE_SESSION_KEY = new Key<>("is_remote_session_key"); private final HashMap> myBuffer = new HashMap<>(); - private BatchEvaluator(DebugProcess process) { - myDebugProcess = process; + private BatchEvaluator() { } public void invoke(ToStringCommand command) { DebuggerManagerThreadImpl.assertIsManagerThread(); + EvaluationContext evaluationContext = command.getEvaluationContext(); + SuspendContextImpl suspendContext = (SuspendContextImpl)evaluationContext.getSuspendContext(); if (!Registry.is("debugger.batch.evaluation.force") && !Registry.is("debugger.batch.evaluation")) { - myDebugProcess.getManagerThread().invokeCommand(command); + suspendContext.getManagerThread().invokeCommand(command); } else { - EvaluationContext evaluationContext = command.getEvaluationContext(); - SuspendContext suspendContext = evaluationContext.getSuspendContext(); - List toStringCommands = myBuffer.get(suspendContext); if (toStringCommands == null) { toStringCommands = new ArrayList<>(); myBuffer.put(suspendContext, toStringCommands); - ((DebuggerManagerThreadImpl)myDebugProcess.getManagerThread()).schedule(new BatchEvaluatorCommand(evaluationContext)); + suspendContext.getManagerThread().schedule(new BatchEvaluatorCommand(evaluationContext)); } toStringCommands.add(command); @@ -61,7 +57,7 @@ public final class BatchEvaluator { BatchEvaluator batchEvaluator = debugProcess.getUserData(BATCH_EVALUATOR_KEY); if (batchEvaluator == null) { - batchEvaluator = new BatchEvaluator(debugProcess); + batchEvaluator = new BatchEvaluator(); debugProcess.putUserData(BATCH_EVALUATOR_KEY, batchEvaluator); } return batchEvaluator; diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ColorObjectRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ColorObjectRenderer.java index ff4882fd28fb..d5beeb026912 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ColorObjectRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ColorObjectRenderer.java @@ -55,7 +55,7 @@ final class ColorObjectRenderer extends CompoundRendererProvider { else { EvaluationContextImpl evalContext = ((EvaluationContextImpl)evaluationContext); DebugProcessImpl debugProcess = evalContext.getDebugProcess(); - debugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(evalContext.getSuspendContext()) { + evalContext.getManagerThread().schedule(new SuspendContextCommandImpl(evalContext.getSuspendContext()) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { try { diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ExpressionChildrenRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ExpressionChildrenRenderer.java index 2b757e319c6a..1fe19d2fb108 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ExpressionChildrenRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ExpressionChildrenRenderer.java @@ -58,7 +58,7 @@ public final class ExpressionChildrenRenderer extends ReferenceRenderer implemen @Override public void buildChildren(Value value, ChildrenBuilder builder, EvaluationContext evaluationContext) { EvaluationContextImpl evaluationContextImpl = (EvaluationContextImpl)evaluationContext; - evaluationContextImpl.getDebugProcess().getManagerThread().schedule(new PossiblySyncCommand(evaluationContextImpl.getSuspendContext()) { + evaluationContextImpl.getManagerThread().schedule(new PossiblySyncCommand(evaluationContextImpl.getSuspendContext()) { @Override public void syncAction(@NotNull SuspendContextImpl suspendContext) { try { @@ -153,8 +153,7 @@ public final class ExpressionChildrenRenderer extends ReferenceRenderer implemen public CompletableFuture isExpandableAsync(Value value, EvaluationContext context, NodeDescriptor parentDescriptor) { CompletableFuture res = new CompletableFuture<>(); EvaluationContextImpl evaluationContextImpl = (EvaluationContextImpl)context; - DebugProcessImpl debugProcess = evaluationContextImpl.getDebugProcess(); - debugProcess.getManagerThread().schedule(new PossiblySyncCommand(evaluationContextImpl.getSuspendContext()) { + evaluationContextImpl.getManagerThread().schedule(new PossiblySyncCommand(evaluationContextImpl.getSuspendContext()) { @Override public void syncAction(@NotNull SuspendContextImpl suspendContext) { EvaluationContext evaluationContext = context.createEvaluationContext(value); diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/IconObjectRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/IconObjectRenderer.java index e2c8939d24fa..b48d951e067f 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/IconObjectRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/IconObjectRenderer.java @@ -38,7 +38,7 @@ final class IconObjectRenderer extends CompoundRendererProvider { if (!Registry.is("debugger.auto.fetch.icons") || DebuggerUtilsImpl.isRemote(debugProcess)) return null; - debugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(evalContext.getSuspendContext()) { + ((EvaluationContextImpl)evaluationContext).getManagerThread().schedule(new SuspendContextCommandImpl(evalContext.getSuspendContext()) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { String getterName = AllIcons.Debugger.Value.getIconHeight() <= 16 ? "iconToBytesPreviewNormal" : "iconToBytesPreviewRetina"; diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LabelRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LabelRenderer.java index 3b97a9e4953a..55d52781bf7d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LabelRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LabelRenderer.java @@ -61,7 +61,7 @@ public class LabelRenderer extends ReferenceRenderer implements ValueLabelRender EvaluationContextImpl evaluationContextImpl = (EvaluationContextImpl)evaluationContext; DebugProcessImpl debugProcess = evaluationContextImpl.getDebugProcess(); - debugProcess.getManagerThread().schedule(new PossiblySyncCommand(evaluationContextImpl.getSuspendContext()) { + evaluationContextImpl.getManagerThread().schedule(new PossiblySyncCommand(evaluationContextImpl.getSuspendContext()) { @Override public void syncAction(@NotNull SuspendContextImpl suspendContext) { ExpressionEvaluator evaluator = null; diff --git a/java/testFramework/src/com/intellij/debugger/ExecutionWithDebuggerToolsTestCase.java b/java/testFramework/src/com/intellij/debugger/ExecutionWithDebuggerToolsTestCase.java index 60280448cf38..3be9a74b91ae 100644 --- a/java/testFramework/src/com/intellij/debugger/ExecutionWithDebuggerToolsTestCase.java +++ b/java/testFramework/src/com/intellij/debugger/ExecutionWithDebuggerToolsTestCase.java @@ -78,7 +78,7 @@ public abstract class ExecutionWithDebuggerToolsTestCase extends ExecutionTestCa protected void resume(SuspendContextImpl context) { DebugProcessImpl debugProcess = context.getDebugProcess(); - debugProcess.getManagerThread().schedule(debugProcess.createResumeCommand(context, PrioritizedTask.Priority.LOWEST)); + context.getManagerThread().schedule(debugProcess.createResumeCommand(context, PrioritizedTask.Priority.LOWEST)); } protected void stepInto(SuspendContextImpl context) { @@ -87,17 +87,17 @@ public abstract class ExecutionWithDebuggerToolsTestCase extends ExecutionTestCa protected void stepInto(SuspendContextImpl context, boolean ignoreFilters) { DebugProcessImpl debugProcess = context.getDebugProcess(); - debugProcess.getManagerThread().schedule(debugProcess.createStepIntoCommand(context, ignoreFilters, null)); + context.getManagerThread().schedule(debugProcess.createStepIntoCommand(context, ignoreFilters, null)); } protected void stepOver(SuspendContextImpl context) { DebugProcessImpl debugProcess = context.getDebugProcess(); - debugProcess.getManagerThread().schedule(debugProcess.createStepOverCommand(context, false)); + context.getManagerThread().schedule(debugProcess.createStepOverCommand(context, false)); } protected void stepOut(SuspendContextImpl context) { DebugProcessImpl debugProcess = context.getDebugProcess(); - debugProcess.getManagerThread().schedule(debugProcess.createStepOutCommand(context)); + context.getManagerThread().schedule(debugProcess.createStepOutCommand(context)); } @Override @@ -272,9 +272,9 @@ public abstract class ExecutionWithDebuggerToolsTestCase extends ExecutionTestCa if (!myRatherLaterRequests.isEmpty()) pumpSwingThread(); } - if (request.myDebuggerCommand instanceof SuspendContextCommandImpl) { - request.myDebugProcess.getManagerThread().schedule(new SuspendContextCommandImpl( - ((SuspendContextCommandImpl)request.myDebuggerCommand).getSuspendContext()) { + if (request.myDebuggerCommand instanceof SuspendContextCommandImpl suspendContextCommand) { + SuspendContextImpl suspendContext = suspendContextCommand.getSuspendContext(); + Objects.requireNonNull(suspendContext).getManagerThread().schedule(new SuspendContextCommandImpl(suspendContext) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { pumpDebuggerThread(request); @@ -584,7 +584,7 @@ public abstract class ExecutionWithDebuggerToolsTestCase extends ExecutionTestCa @Override public void paused(SuspendContextImpl suspendContext) { // Need to add SuspendContextCommandImpl because the stepping pause is not now in SuspendContextCommandImpl - DebuggerManagerThreadImpl debuggerManagerThread = Objects.requireNonNull(suspendContext.getDebugProcess()).getManagerThread(); + DebuggerManagerThreadImpl debuggerManagerThread = suspendContext.getManagerThread(); debuggerManagerThread.invoke(new SuspendContextCommandImpl(suspendContext) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { @@ -624,7 +624,7 @@ public abstract class ExecutionWithDebuggerToolsTestCase extends ExecutionTestCa public void resumed(SuspendContextImpl suspendContext) { SuspendContextImpl pausedContext = myDebugProcess.getSuspendManager().getPausedContext(); if (pausedContext != null) { - myDebugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(pausedContext) { + suspendContext.getManagerThread().schedule(new SuspendContextCommandImpl(pausedContext) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { paused(pausedContext); diff --git a/java/testFramework/src/com/intellij/debugger/impl/DescriptorTestCase.java b/java/testFramework/src/com/intellij/debugger/impl/DescriptorTestCase.java index a24850bed1a5..32aee203d2d8 100644 --- a/java/testFramework/src/com/intellij/debugger/impl/DescriptorTestCase.java +++ b/java/testFramework/src/com/intellij/debugger/impl/DescriptorTestCase.java @@ -74,7 +74,7 @@ public abstract class DescriptorTestCase extends DebuggerTestCase { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { flushDescriptors(); - localProcess.getManagerThread().schedule(localProcess.createResumeCommand(suspendContext, Priority.LOW)); + suspendContext.getManagerThread().schedule(localProcess.createResumeCommand(suspendContext, Priority.LOW)); } }); } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/DebuggerMethods.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/DebuggerMethods.java index ea6068b97c0a..f16a4bd216ed 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/DebuggerMethods.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/DebuggerMethods.java @@ -177,7 +177,7 @@ public interface DebuggerMethods extends CompilerMethods { DebuggerContextImpl ctx = DebuggerContextUtil.createDebuggerContext(getDebugSession(), getDebugProcess().getSuspendManager().getPausedContext()); ManagedCommand command = new ManagedCommand<>(ctx, cl); - getDebugProcess().getManagerThread().invoke(command); + ctx.getManagerThread().invoke(command); boolean finished = command.getSemaphore().waitFor(ourTimeout); assertTrue("Too long debugger action", finished); return command.getResult(); diff --git a/plugins/kotlin/jvm-debugger/core/src/org/jetbrains/kotlin/idea/debugger/core/debuggerUtil.kt b/plugins/kotlin/jvm-debugger/core/src/org/jetbrains/kotlin/idea/debugger/core/debuggerUtil.kt index ebc893bd8842..a2c1e1fee9ed 100644 --- a/plugins/kotlin/jvm-debugger/core/src/org/jetbrains/kotlin/idea/debugger/core/debuggerUtil.kt +++ b/plugins/kotlin/jvm-debugger/core/src/org/jetbrains/kotlin/idea/debugger/core/debuggerUtil.kt @@ -121,6 +121,8 @@ fun DebugProcessImpl.invokeInManagerThread(f: (DebuggerContextImpl) -> return f(debuggerContext) } var result: T? = null + @Suppress("UsagesOfObsoleteApi") + val managerThread = debuggerContext.managerThread ?: managerThread managerThread.invokeAndWait(object : DebuggerContextCommandImpl(debuggerContext) { override fun threadAction(suspendContext: SuspendContextImpl) { result = f(debuggerContext) diff --git a/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/command/CoroutineDumpAction.kt b/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/command/CoroutineDumpAction.kt index 5016e915785f..e628aa58b54e 100644 --- a/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/command/CoroutineDumpAction.kt +++ b/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/command/CoroutineDumpAction.kt @@ -35,8 +35,7 @@ class CoroutineDumpAction : AnAction() { val context = DebuggerManagerEx.getInstanceEx(project).context val session = context.debuggerSession if (session != null && session.isAttached) { - val process = context.debugProcess ?: return - process.managerThread.schedule(object : SuspendContextCommandImpl(context.suspendContext) { + context.managerThread?.schedule(object : SuspendContextCommandImpl(context.suspendContext) { override fun contextAction(suspendContext: SuspendContextImpl) { val states = CoroutineDebugProbesProxy(suspendContext).dumpCoroutines() if (states.isOk()) { diff --git a/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/view/CoroutineView.kt b/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/view/CoroutineView.kt index 2383206f6f02..d9e5f33cc4ba 100644 --- a/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/view/CoroutineView.kt +++ b/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/view/CoroutineView.kt @@ -2,7 +2,6 @@ package org.jetbrains.kotlin.idea.debugger.coroutine.view -import com.intellij.debugger.engine.DebugProcessImpl import com.intellij.debugger.engine.JavaDebugProcess import com.intellij.debugger.engine.SuspendContextImpl import com.intellij.debugger.engine.events.SuspendContextCommandImpl @@ -154,7 +153,7 @@ class CoroutineView(project: Project, javaDebugProcess: JavaDebugProcess) : inner class JobsContainer(val suspendContext: SuspendContextImpl) : RendererContainer(renderer.renderNoIconNode(KotlinDebuggerCoroutinesBundle.message("coroutine.view.node.jobs"))) { override fun computeChildren(node: XCompositeNode) { - debugProcess.invokeInSuspendContext(suspendContext) { suspendContext -> + invokeInSuspendContext(suspendContext) { suspendContext -> val coroutineCache = CoroutineDebugProbesProxy(suspendContext).dumpCoroutines() if (!coroutineCache.isOk()) { node.addChildren(XValueChildrenList.singleton(ErrorNode("coroutine.view.fetching.error")), true) @@ -219,7 +218,7 @@ class CoroutineView(project: Project, javaDebugProcess: JavaDebugProcess) : override fun computeChildren(node: XCompositeNode) { node.setAlreadySorted(true) - debugProcess.invokeInSuspendContext(suspendContext) { suspendContext -> + invokeInSuspendContext(suspendContext) { suspendContext -> val children = XValueChildrenList() jobs.forEach { @@ -243,7 +242,7 @@ class CoroutineView(project: Project, javaDebugProcess: JavaDebugProcess) : inner class DispatchersContainer(val suspendContext: SuspendContextImpl) : RendererContainer(renderer.renderNoIconNode(KotlinDebuggerCoroutinesBundle.message("coroutine.view.node.dispatchers"))) { override fun computeChildren(node: XCompositeNode) { - debugProcess.invokeInSuspendContext(suspendContext) { suspendContext -> + invokeInSuspendContext(suspendContext) { suspendContext -> val coroutineCache = CoroutineDebugProbesProxy(suspendContext).dumpCoroutines() if (!coroutineCache.isOk()) { node.addChildren(XValueChildrenList.singleton(ErrorNode("coroutine.view.fetching.error")), true) @@ -275,7 +274,7 @@ class CoroutineView(project: Project, javaDebugProcess: JavaDebugProcess) : private val coroutines: List? ) : RendererContainer(renderer.renderThreadGroup(groupName, isCurrent)) { override fun computeChildren(node: XCompositeNode) { - debugProcess.invokeInSuspendContext(suspendContext) { suspendContext -> + invokeInSuspendContext(suspendContext) { suspendContext -> val children = XValueChildrenList() coroutines?.forEach { val isCurrent = it.isRunningOnCurrentThread(suspendContext) @@ -303,7 +302,7 @@ class CoroutineView(project: Project, javaDebugProcess: JavaDebugProcess) : override fun computeChildren(node: XCompositeNode) { node.setAlreadySorted(true) - debugProcess.invokeInSuspendContext(suspendContext) { suspendContext -> + invokeInSuspendContext(suspendContext) { suspendContext -> val children = XValueChildrenList() val doubleFrameList = CoroutineFrameBuilder.build(infoData, suspendContext) doubleFrameList?.frames?.forEach { @@ -369,11 +368,11 @@ class CoroutineView(project: Project, javaDebugProcess: JavaDebugProcess) : CoroutineSelectedNodeListener(debugProcess, tree).install() } -private fun DebugProcessImpl.invokeInSuspendContext( +private fun invokeInSuspendContext( suspendContext: SuspendContextImpl, command: (SuspendContextImpl) -> Unit ): Unit = - managerThread.invoke(object : SuspendContextCommandImpl(suspendContext) { + suspendContext.managerThread.invoke(object : SuspendContextCommandImpl(suspendContext) { override fun getPriority() = PrioritizedTask.Priority.NORMAL diff --git a/plugins/kotlin/jvm-debugger/evaluation/k1/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinK1CodeFragmentFactory.kt b/plugins/kotlin/jvm-debugger/evaluation/k1/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinK1CodeFragmentFactory.kt index 4d57f5f72e16..671a6f7098da 100644 --- a/plugins/kotlin/jvm-debugger/evaluation/k1/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinK1CodeFragmentFactory.kt +++ b/plugins/kotlin/jvm-debugger/evaluation/k1/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinK1CodeFragmentFactory.kt @@ -66,7 +66,7 @@ class KotlinK1CodeFragmentFactory : JavaDebuggerCodeFragmentFactory() { } } - debuggerContext.debugProcess?.managerThread?.invoke(worker) + debuggerContext.managerThread?.invoke(worker) for (i in 0..50) { ProgressManager.checkCanceled() @@ -168,7 +168,7 @@ class KotlinK1CodeFragmentFactory : JavaDebuggerCodeFragmentFactory() { } } - debuggerContext.debugProcess?.managerThread?.invoke(worker) + debuggerContext.managerThread?.invoke(worker) for (i in 0..50) { if (semaphore.waitFor(20)) break diff --git a/plugins/kotlin/jvm-debugger/evaluation/k1/src/org/jetbrains/kotlin/idea/debugger/surroundWith/KotlinRuntimeTypeCastSurrounder.kt b/plugins/kotlin/jvm-debugger/evaluation/k1/src/org/jetbrains/kotlin/idea/debugger/surroundWith/KotlinRuntimeTypeCastSurrounder.kt index 8e19551331b7..629c02e8a2f4 100644 --- a/plugins/kotlin/jvm-debugger/evaluation/k1/src/org/jetbrains/kotlin/idea/debugger/surroundWith/KotlinRuntimeTypeCastSurrounder.kt +++ b/plugins/kotlin/jvm-debugger/evaluation/k1/src/org/jetbrains/kotlin/idea/debugger/surroundWith/KotlinRuntimeTypeCastSurrounder.kt @@ -57,7 +57,7 @@ class KotlinRuntimeTypeCastSurrounder : Surrounder { val progressWindow = ProgressWindow(true, expression.project) val worker = SurroundWithCastWorker(editor, expression, debuggerContext, progressWindow) progressWindow.title = JavaDebuggerBundle.message("title.evaluating") - debuggerContext.debugProcess?.managerThread?.startProgress(worker, progressWindow) + debuggerContext.managerThread?.startProgress(worker, progressWindow) } return null } diff --git a/plugins/kotlin/jvm-debugger/test/test/org/jetbrains/kotlin/idea/debugger/test/AbstractIrKotlinEvaluateExpressionTest.kt b/plugins/kotlin/jvm-debugger/test/test/org/jetbrains/kotlin/idea/debugger/test/AbstractIrKotlinEvaluateExpressionTest.kt index 37e3750871ae..0e38fc24c1c9 100644 --- a/plugins/kotlin/jvm-debugger/test/test/org/jetbrains/kotlin/idea/debugger/test/AbstractIrKotlinEvaluateExpressionTest.kt +++ b/plugins/kotlin/jvm-debugger/test/test/org/jetbrains/kotlin/idea/debugger/test/AbstractIrKotlinEvaluateExpressionTest.kt @@ -198,7 +198,7 @@ abstract class AbstractIrKotlinEvaluateExpressionTest : KotlinDescriptorTestCase print(result, ProcessOutputTypes.SYSTEM) } assert(debugProcess.isAttached) - debugProcess.managerThread.schedule(object : SuspendContextCommandImpl(suspendContext) { + suspendContext.managerThread.schedule(object : SuspendContextCommandImpl(suspendContext) { override fun contextAction(suspendContext: SuspendContextImpl) { completion() } diff --git a/plugins/kotlin/jvm-debugger/test/test/org/jetbrains/kotlin/idea/debugger/test/KotlinDescriptorTestCaseWithStepping.kt b/plugins/kotlin/jvm-debugger/test/test/org/jetbrains/kotlin/idea/debugger/test/KotlinDescriptorTestCaseWithStepping.kt index e9acc6ef054b..cb48b6a218ee 100644 --- a/plugins/kotlin/jvm-debugger/test/test/org/jetbrains/kotlin/idea/debugger/test/KotlinDescriptorTestCaseWithStepping.kt +++ b/plugins/kotlin/jvm-debugger/test/test/org/jetbrains/kotlin/idea/debugger/test/KotlinDescriptorTestCaseWithStepping.kt @@ -146,14 +146,14 @@ abstract class KotlinDescriptorTestCaseWithStepping : KotlinDescriptorTestCase() runReadAction { commandProvider.getStepIntoCommand(this, ignoreFilters, smartStepFilter) } ?: dp.createStepIntoCommand(this, ignoreFilters, smartStepFilter) - dp.managerThread.schedule(stepIntoCommand) + managerThread.schedule(stepIntoCommand) } private fun SuspendContextImpl.doStepOut() { val stepOutCommand = runReadAction { commandProvider.getStepOutCommand(this, debuggerContext) } ?: dp.createStepOutCommand(this) - dp.managerThread.schedule(stepOutCommand) + managerThread.schedule(stepOutCommand) } private fun SuspendContextImpl.doRunToCursor(lineIndex: Int, fileName: String) { @@ -165,7 +165,7 @@ abstract class KotlinDescriptorTestCaseWithStepping : KotlinDescriptorTestCase() commandProvider.getRunToCursorCommand(this, xSourcePosition, false) ?: dp.createRunToCursorCommand(this, xSourcePosition, false) } - dp.managerThread.schedule(runToCursorCommand) + managerThread.schedule(runToCursorCommand) } override fun setUp() { @@ -179,7 +179,7 @@ abstract class KotlinDescriptorTestCaseWithStepping : KotlinDescriptorTestCase() commandProvider.getStepOverCommand(this, ignoreBreakpoints, sourcePosition) } ?: dp.createStepOverCommand(this, ignoreBreakpoints) - dp.managerThread.schedule(stepOverCommand) + managerThread.schedule(stepOverCommand) } private fun process(instruction: SteppingInstruction) { @@ -348,7 +348,7 @@ abstract class KotlinDescriptorTestCaseWithStepping : KotlinDescriptorTestCase() } // Try to execute the action inside a command if we aren't already inside it. - debuggerSession.process.managerThread.invoke(command) + managerThread.invoke(command) } } diff --git a/plugins/kotlin/jvm-debugger/test/test/org/jetbrains/kotlin/idea/debugger/test/util/FramePrinter.kt b/plugins/kotlin/jvm-debugger/test/test/org/jetbrains/kotlin/idea/debugger/test/util/FramePrinter.kt index c3efa4cfb48a..aa0e99d21f23 100644 --- a/plugins/kotlin/jvm-debugger/test/test/org/jetbrains/kotlin/idea/debugger/test/util/FramePrinter.kt +++ b/plugins/kotlin/jvm-debugger/test/test/org/jetbrains/kotlin/idea/debugger/test/util/FramePrinter.kt @@ -128,7 +128,7 @@ class FramePrinter(private val suspendContext: SuspendContextImpl) { semaphore.up() } - suspendContext.debugProcess.managerThread.schedule(object : SuspendContextCommandImpl(suspendContext) { + suspendContext.managerThread.schedule(object : SuspendContextCommandImpl(suspendContext) { override fun contextAction(suspendContext: SuspendContextImpl) { val evaluationContext = EvaluationContextImpl(suspendContext, suspendContext.frameProxy) valueDescriptor.setContext(evaluationContext) diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/CollectionTree.java b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/CollectionTree.java index 39922ed4615e..b6c79211f0fb 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/CollectionTree.java +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/CollectionTree.java @@ -87,7 +87,7 @@ public class CollectionTree extends XDebuggerTree implements TraceContainer { final XValueContainer container = ((XValueContainerNode)node).getValueContainer(); if (container instanceof JavaValue) { final ValueDescriptorImpl descriptor = ((JavaValue)container).getDescriptor(); - evaluationContext.getDebugProcess().getManagerThread().schedule(new DebuggerCommandImpl() { + evaluationContext.getManagerThread().schedule(new DebuggerCommandImpl() { @Override protected void action() { final Value value = descriptor.getValue();