From b06b7d10fcdbf8ffaaf3db5f9b463a0af19dc994 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Mon, 31 Jan 2005 18:44:26 +0300 Subject: [PATCH] (no message) --- .../debugger/actions/StepOverAction.java | 6 +-- .../intellij/debugger/engine/ContextUtil.java | 8 ++- .../debugger/engine/DebugProcessEvents.java | 22 +++----- .../debugger/engine/DebugProcessImpl.java | 50 +++++++++++-------- .../intellij/debugger/engine/RequestHint.java | 24 +++++++-- .../debugger/engine/SuspendManagerImpl.java | 18 +++---- .../engine/requests/RequestManagerImpl.java | 20 ++++---- .../debugger/impl/DebuggerSession.java | 4 +- .../debugger/ui/PositionHighlighter.java | 4 +- .../breakpoints/AnyExceptionBreakpoint.java | 2 + .../ui/breakpoints/BreakpointManager.java | 2 +- .../BreakpointWithHighlighter.java | 2 + .../ui/breakpoints/ExceptionBreakpoint.java | 5 +- .../ui/breakpoints/FilteredRequestor.java | 2 +- 14 files changed, 98 insertions(+), 71 deletions(-) diff --git a/source/com/intellij/debugger/actions/StepOverAction.java b/source/com/intellij/debugger/actions/StepOverAction.java index 44bc0fbe8bb9..fb59b1415058 100644 --- a/source/com/intellij/debugger/actions/StepOverAction.java +++ b/source/com/intellij/debugger/actions/StepOverAction.java @@ -1,12 +1,10 @@ package com.intellij.debugger.actions; -import com.intellij.debugger.DebuggerManager; import com.intellij.debugger.DebuggerManagerEx; import com.intellij.debugger.engine.SuspendContextImpl; -import com.intellij.debugger.impl.DebuggerSession; -import com.intellij.debugger.impl.DebuggerSession; import com.intellij.debugger.impl.DebuggerContextImpl; +import com.intellij.debugger.impl.DebuggerSession; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataConstants; @@ -31,8 +29,10 @@ public class StepOverAction extends AnAction { } final DebuggerContextImpl context = (DebuggerManagerEx.getInstanceEx(project)).getContext(); DebuggerSession debuggerSession = context.getDebuggerSession(); + final boolean isPaused = debuggerSession != null && debuggerSession.isPaused(); final SuspendContextImpl suspendContext = context.getSuspendContext(); + final boolean hasCurrentThread = suspendContext != null && suspendContext.getThread() != null; presentation.setEnabled(isPaused && hasCurrentThread); } diff --git a/source/com/intellij/debugger/engine/ContextUtil.java b/source/com/intellij/debugger/engine/ContextUtil.java index 61c5a4fb2b56..ba6495fd9df5 100644 --- a/source/com/intellij/debugger/engine/ContextUtil.java +++ b/source/com/intellij/debugger/engine/ContextUtil.java @@ -30,8 +30,12 @@ public class ContextUtil { public static SourcePosition getSourcePosition(final StackFrameContext context) { DebugProcessImpl debugProcess = (DebugProcessImpl)context.getDebugProcess(); - if(debugProcess == null) return null; - if(context.getFrameProxy() == null) return null; + if(debugProcess == null) { + return null; + } + if(context.getFrameProxy() == null) { + return null; + } Location location = null; try { location = context.getFrameProxy().location(); diff --git a/source/com/intellij/debugger/engine/DebugProcessEvents.java b/source/com/intellij/debugger/engine/DebugProcessEvents.java index 0efafc3f4cc2..8395edbbbc32 100644 --- a/source/com/intellij/debugger/engine/DebugProcessEvents.java +++ b/source/com/intellij/debugger/engine/DebugProcessEvents.java @@ -1,5 +1,6 @@ package com.intellij.debugger.engine; +import com.intellij.debugger.DebuggerManagerEx; import com.intellij.debugger.engine.events.DebuggerCommandImpl; import com.intellij.debugger.engine.events.SuspendContextCommandImpl; import com.intellij.debugger.engine.requests.LocatableEventRequestor; @@ -8,18 +9,13 @@ import com.intellij.debugger.jdi.VirtualMachineProxyImpl; import com.intellij.debugger.requests.Requestor; import com.intellij.debugger.ui.breakpoints.Breakpoint; import com.intellij.debugger.ui.breakpoints.LineBreakpoint; -import com.intellij.debugger.DebuggerManagerEx; -import com.intellij.debugger.DebuggerManagerEx; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; -import com.intellij.util.concurrency.Semaphore; import com.sun.jdi.*; import com.sun.jdi.event.*; import com.sun.jdi.request.EventRequest; -import javax.swing.*; - /** * Created by IntelliJ IDEA. * User: lex @@ -39,10 +35,8 @@ public class DebugProcessEvents extends DebugProcessImpl { super.commitVM(vm); if(vm != null) { vmAttached(); - myEventThread = new DebuggerEventThread(); myEventThread.start(); - } } @@ -177,13 +171,10 @@ public class DebugProcessEvents extends DebugProcessImpl { EventQueue eventQueue = myVmProxy.eventQueue(); while (!isStopped()) { try { - if (LOG.isDebugEnabled()) { - LOG.debug("Listening events"); - } final EventSet eventSet = eventQueue.remove(); if (LOG.isDebugEnabled()) { - LOG.debug("EventSet " + eventSet.toString() + ", suspendPolicy=" + eventSet.suspendPolicy() + ";size=" + eventSet.size()); + LOG.debug("EVENTSET " + eventSet); } DebugProcessEvents.this.getManagerThread().invokeAndWait(new DebuggerCommandImpl() { @@ -194,7 +185,7 @@ public class DebugProcessEvents extends DebugProcessImpl { final Event event = eventIterator.nextEvent(); if (LOG.isDebugEnabled()) { - LOG.debug("Event : " + event); + LOG.debug("EVENT : " + event); } try { if (event instanceof VMStartEvent) { @@ -342,7 +333,9 @@ public class DebugProcessEvents extends DebugProcessImpl { if (LOG.isDebugEnabled()) { LOG.debug("STEPOUT doStep"); } - shouldResume = doStep(suspendContext.getThread(), hint.getDepth(), hint); + final ThreadReferenceProxyImpl threadProxy = suspendContext.getThread(); + doStep(threadProxy, hint.getDepth(), hint); + shouldResume = true; } if(!shouldResume && hint.isRestoreBreakpoints()) { @@ -352,7 +345,8 @@ public class DebugProcessEvents extends DebugProcessImpl { if(shouldResume) { getSuspendManager().voteResume(suspendContext); - } else { + } + else { showStatusText(""); getSuspendManager().voteSuspend(suspendContext); } diff --git a/source/com/intellij/debugger/engine/DebugProcessImpl.java b/source/com/intellij/debugger/engine/DebugProcessImpl.java index 62001b512d24..7b4b09b8d469 100644 --- a/source/com/intellij/debugger/engine/DebugProcessImpl.java +++ b/source/com/intellij/debugger/engine/DebugProcessImpl.java @@ -144,9 +144,15 @@ public abstract class DebugProcessImpl implements DebugProcess { if ("SENDS".compareToIgnoreCase(token) == 0) { mask |= VirtualMachine.TRACE_SENDS; } + else if ("RAW_SENDS".compareToIgnoreCase(token) == 0) { + mask |= 0x01000000; + } else if ("RECEIVES".compareToIgnoreCase(token) == 0) { mask |= VirtualMachine.TRACE_RECEIVES; } + else if ("RAW_RECEIVES".compareToIgnoreCase(token) == 0) { + mask |= 0x02000000; + } else if ("EVENTS".compareToIgnoreCase(token) == 0) { mask |= VirtualMachine.TRACE_EVENTS; } @@ -212,26 +218,26 @@ public abstract class DebugProcessImpl implements DebugProcess { /** * - * @return * @param stepThread * @param depth * @param hint may be null */ - protected boolean doStep(ThreadReferenceProxyImpl stepThread, int depth, RequestHint hint) { - final ThreadReferenceProxyImpl currentThreadProxy = stepThread; - if (currentThreadProxy == null || !currentThreadProxy.isSuspended()) { + protected void doStep(final ThreadReferenceProxyImpl stepThread, int depth, RequestHint hint) { + /* + if (stepThread == null || !stepThread.isSuspended()) { return false; } + */ if (LOG.isDebugEnabled()) { - LOG.debug("DO_STEP: creating step request for " + currentThreadProxy.getThreadReference()); + LOG.debug("DO_STEP: creating step request for " + stepThread.getThreadReference()); } - deleteStepRequests(currentThreadProxy); + deleteStepRequests(stepThread); EventRequestManager requestManager = getVirtualMachineProxy().eventRequestManager(); - StepRequest stepRequest = requestManager.createStepRequest(currentThreadProxy.getThreadReference(), StepRequest.STEP_LINE, depth); + StepRequest stepRequest = requestManager.createStepRequest(stepThread.getThreadReference(), StepRequest.STEP_LINE, depth); DebuggerSettings settings = DebuggerSettings.getInstance(); if (!(hint != null && hint.isIgnoreFilters()) && depth == StepRequest.STEP_INTO) { if (settings.TRACING_FILTERS_ENABLED) { - String currentClassName = getCurrentClassName(currentThreadProxy); + String currentClassName = getCurrentClassName(stepThread); if (currentClassName == null || !settings.isNameFiltered(currentClassName)) { // add class filters ClassFilter[] filters = settings.getFilters(); @@ -250,7 +256,6 @@ public abstract class DebugProcessImpl implements DebugProcess { stepRequest.putProperty("hint", hint); } stepRequest.enable(); - return true; } void deleteStepRequests(ThreadReferenceProxy requestsInThread) { @@ -334,7 +339,9 @@ public abstract class DebugProcessImpl implements DebugProcess { return connector.accept(myArguments); } finally { - if(myArguments != null) connector.stopListening(myArguments); + if(myArguments != null) { + connector.stopListening(myArguments); + } } } else { @@ -1172,9 +1179,10 @@ public abstract class DebugProcessImpl implements DebugProcess { public void contextAction() { showStatusText("Stepping into"); final SuspendContextImpl suspendContext = getSuspendContext(); - RequestHint hint = new RequestHint(suspendContext, StepRequest.STEP_INTO); + final ThreadReferenceProxyImpl stepThread = suspendContext.getThread(); + RequestHint hint = new RequestHint(stepThread, suspendContext, StepRequest.STEP_INTO); hint.setIgnoreFilters(myIgnoreFilters); - doStep(suspendContext.getThread(), StepRequest.STEP_INTO, hint); + doStep(stepThread, StepRequest.STEP_INTO, hint); super.contextAction(); } } @@ -1190,14 +1198,14 @@ public abstract class DebugProcessImpl implements DebugProcess { public void contextAction() { showStatusText("Stepping over"); final SuspendContextImpl suspendContext = getSuspendContext(); - RequestHint hint = new RequestHint(suspendContext, StepRequest.STEP_OVER); + final ThreadReferenceProxyImpl steppingThread = suspendContext.getThread(); + RequestHint hint = new RequestHint(steppingThread, suspendContext, StepRequest.STEP_OVER); hint.setRestoreBreakpoints(myIsIgnoreBreakpoints); - final boolean succeeded = doStep(suspendContext.getThread(), StepRequest.STEP_OVER, hint); - if (succeeded) { - if (myIsIgnoreBreakpoints) { - DebuggerManagerEx.getInstanceEx(myProject).getBreakpointManager().disableBreakpoints(DebugProcessImpl.this); - } + doStep(steppingThread, StepRequest.STEP_OVER, hint); + + if (myIsIgnoreBreakpoints) { + DebuggerManagerEx.getInstanceEx(myProject).getBreakpointManager().disableBreakpoints(DebugProcessImpl.this); } super.contextAction(); } @@ -1219,7 +1227,7 @@ public abstract class DebugProcessImpl implements DebugProcess { } myRunToCursorBreakpoint.SUSPEND_POLICY = DebuggerSettings.SUSPEND_ALL; myRunToCursorBreakpoint.LOG_ENABLED = false; - getRequestsManager().createRequest(myRunToCursorBreakpoint); + myRunToCursorBreakpoint.createRequest(getSuspendContext().getDebugProcess()); DebugProcessImpl.this.myRunToCursorBreakpoint = myRunToCursorBreakpoint; super.contextAction(); } @@ -1243,7 +1251,9 @@ public abstract class DebugProcessImpl implements DebugProcess { } public void action() { - if (!isAttached()) return; + if (!isAttached()) { + return; + } logThreads(); getVirtualMachineProxy().suspend(); logThreads(); diff --git a/source/com/intellij/debugger/engine/RequestHint.java b/source/com/intellij/debugger/engine/RequestHint.java index cf496e863dda..beecf6812528 100644 --- a/source/com/intellij/debugger/engine/RequestHint.java +++ b/source/com/intellij/debugger/engine/RequestHint.java @@ -7,6 +7,7 @@ package com.intellij.debugger.engine; import com.intellij.debugger.SourcePosition; import com.intellij.debugger.engine.evaluation.EvaluateException; +import com.intellij.debugger.engine.jdi.StackFrameProxy; import com.intellij.debugger.impl.PositionUtil; import com.intellij.debugger.jdi.ThreadReferenceProxyImpl; import com.intellij.debugger.jdi.VirtualMachineProxyImpl; @@ -33,18 +34,33 @@ class RequestHint { private boolean myRestoreBreakpoints = false; private boolean mySkipThisMethod = false; - public RequestHint(final SuspendContextImpl suspendContext, int depth) { + public RequestHint(final ThreadReferenceProxyImpl stepThread, final SuspendContextImpl suspendContext, int depth) { final DebugProcessImpl debugProcess = suspendContext.getDebugProcess(); myDepth = depth; myVirtualMachineProxy = debugProcess.getVirtualMachineProxy(); try { - final ThreadReferenceProxyImpl thread = suspendContext.getThread(); - myFrameCount = thread.frameCount(); + myFrameCount = stepThread.frameCount(); ApplicationManager.getApplication().runReadAction(new Runnable() { public void run() { - myPosition = ContextUtil.getSourcePosition(suspendContext); + myPosition = ContextUtil.getSourcePosition(new StackFrameContext() { + public StackFrameProxy getFrameProxy() { + try { + return stepThread.frame(0); + } + catch (EvaluateException e) { + if (LOG.isDebugEnabled()) { + LOG.debug(e); + } + return null; + } + } + + public DebugProcess getDebugProcess() { + return suspendContext.getDebugProcess(); + } + }); } }); } diff --git a/source/com/intellij/debugger/engine/SuspendManagerImpl.java b/source/com/intellij/debugger/engine/SuspendManagerImpl.java index ed0df3102c5a..0efb80dd34f0 100644 --- a/source/com/intellij/debugger/engine/SuspendManagerImpl.java +++ b/source/com/intellij/debugger/engine/SuspendManagerImpl.java @@ -1,12 +1,11 @@ package com.intellij.debugger.engine; -import com.intellij.debugger.engine.events.SuspendContextCommandImpl; +import com.intellij.Patches; import com.intellij.debugger.jdi.ThreadReferenceProxyImpl; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.Patches; +import com.sun.jdi.InternalException; import com.sun.jdi.event.EventSet; import com.sun.jdi.request.EventRequest; -import com.sun.jdi.InternalException; import java.util.*; @@ -98,7 +97,8 @@ public class SuspendManagerImpl implements SuspendManager { LOG.debug("Start resuming eventSet " + set.toString() + " suspendPolicy = " + set.suspendPolicy() + ",size = " + set.size()); } myDebugProcess.logThreads(); - LOG.assertTrue(getThread() != null ? getThread().isSuspended() : true); + final ThreadReferenceProxyImpl thread = getThread(); + LOG.assertTrue(thread != null ? thread.isSuspended() : true); try { set.resume(); } @@ -142,7 +142,6 @@ public class SuspendManagerImpl implements SuspendManager { myDebugProcess.clearCashes(suspendPolicy); } - public void popFrame(SuspendContextImpl suspendContext) { popContext(suspendContext); SuspendContextImpl newSuspendContext = pushSuspendContext(suspendContext.getSuspendPolicy(), 0); @@ -160,9 +159,9 @@ public class SuspendManagerImpl implements SuspendManager { LOG.debug("popContext, suspends = " + suspends); } DebuggerManagerThreadImpl.assertIsManagerThread(); - boolean removed = myEventContexts.remove(suspendContext); - if(LOG.isDebugEnabled()) { - LOG.assertTrue(removed, suspendContext.toString()); + final boolean removed = myEventContexts.remove(suspendContext); + if (!removed) { + LOG.assertTrue(false, suspendContext.toString()); } myPausedContexts.remove(suspendContext); } @@ -255,7 +254,8 @@ public class SuspendManagerImpl implements SuspendManager { if(suspendContext.myVotesToVote == 0) { if(suspendContext.myIsVotedForResume) { resume(suspendContext); - } else { + } + else { if (LOG.isDebugEnabled()) { LOG.debug("vote paused"); } diff --git a/source/com/intellij/debugger/engine/requests/RequestManagerImpl.java b/source/com/intellij/debugger/engine/requests/RequestManagerImpl.java index 762eae8693fb..4d6de265acdd 100644 --- a/source/com/intellij/debugger/engine/requests/RequestManagerImpl.java +++ b/source/com/intellij/debugger/engine/requests/RequestManagerImpl.java @@ -229,17 +229,15 @@ public class RequestManagerImpl extends DebugProcessAdapterImpl implements Reque return req; } - public void createRequest(Breakpoint breakpoint) { - DebuggerManagerThreadImpl.assertIsManagerThread(); - if(!myDebugProcess.isAttached() || !findRequests(breakpoint).isEmpty()) return; - breakpoint.createRequest(myDebugProcess); - } - public void deleteRequest(Requestor requestor) { DebuggerManagerThreadImpl.assertIsManagerThread(); - if(!myDebugProcess.isAttached()) return; + if(!myDebugProcess.isAttached()) { + return; + } Set requests = myRequestorToBelongedRequests.get(requestor); - if(requests == null) return; + if(requests == null) { + return; + } myRequestorToBelongedRequests.remove(requestor); for (Iterator iterator = requests.iterator(); iterator.hasNext();) { EventRequest eventRequest = (EventRequest) iterator.next(); @@ -335,7 +333,7 @@ public class RequestManagerImpl extends DebugProcessAdapterImpl implements Reque for (Iterator iterator = breakpointManager.getBreakpoints().iterator(); iterator.hasNext();) { Breakpoint breakpoint = iterator.next(); - myDebugProcess.getRequestsManager().createRequest(breakpoint); + breakpoint.createRequest(myDebugProcess); } } @@ -383,7 +381,7 @@ public class RequestManagerImpl extends DebugProcessAdapterImpl implements Reque public static void createRequests(final Breakpoint breakpoint) { invoke(breakpoint.getProject(), new AllProcessesCommand (){ public void action(DebugProcessImpl process) { - process.getRequestsManager().createRequest(breakpoint); + breakpoint.createRequest(process); } }); } @@ -393,7 +391,7 @@ public class RequestManagerImpl extends DebugProcessAdapterImpl implements Reque public void action(DebugProcessImpl process) { process.getRequestsManager().myInvalidRequestors.remove(breakpoint); process.getRequestsManager().deleteRequest(breakpoint); - process.getRequestsManager().createRequest(breakpoint); + breakpoint.createRequest(process); } }); } diff --git a/source/com/intellij/debugger/impl/DebuggerSession.java b/source/com/intellij/debugger/impl/DebuggerSession.java index d721c85fdb59..2a839763c1c0 100644 --- a/source/com/intellij/debugger/impl/DebuggerSession.java +++ b/source/com/intellij/debugger/impl/DebuggerSession.java @@ -380,9 +380,9 @@ public class DebuggerSession { } /* Stepping */ - private void resumeAction(final SuspendContextCommandImpl action, int event) { + private void resumeAction(final SuspendContextCommandImpl command, int event) { getContextManager().setState(SESSION_EMPTY_CONTEXT, STATE_WAIT_EVALUATION, event, null); - myDebugProcess.getManagerThread().invokeLater(action, DebuggerManagerThreadImpl.HIGH_PRIORITY); + myDebugProcess.getManagerThread().invokeLater(command, DebuggerManagerThreadImpl.HIGH_PRIORITY); } public void stepOut() { diff --git a/source/com/intellij/debugger/ui/PositionHighlighter.java b/source/com/intellij/debugger/ui/PositionHighlighter.java index 89fe772f892b..a98a944ec976 100644 --- a/source/com/intellij/debugger/ui/PositionHighlighter.java +++ b/source/com/intellij/debugger/ui/PositionHighlighter.java @@ -9,6 +9,7 @@ import com.intellij.debugger.engine.DebugProcessImpl; import com.intellij.debugger.engine.events.DebuggerContextCommandImpl; import com.intellij.debugger.impl.*; import com.intellij.debugger.jdi.StackFrameProxyImpl; +import com.intellij.debugger.jdi.ThreadReferenceProxyImpl; import com.intellij.debugger.settings.DebuggerColors; import com.intellij.debugger.ui.breakpoints.Breakpoint; import com.intellij.debugger.ui.breakpoints.BreakpointWithHighlighter; @@ -297,7 +298,8 @@ public class PositionHighlighter { try { StackFrameProxyImpl frameProxy = myContext.getFrameProxy(); - isExecutionPoint = frameProxy.equals(getSuspendContext().getThread().frame(0)); + final ThreadReferenceProxyImpl thread = getSuspendContext().getThread(); + isExecutionPoint = (thread != null)? frameProxy.equals(thread.frame(0)) : false; } catch(Throwable th) { LOG.debug(th); } diff --git a/source/com/intellij/debugger/ui/breakpoints/AnyExceptionBreakpoint.java b/source/com/intellij/debugger/ui/breakpoints/AnyExceptionBreakpoint.java index 2af5bbc64630..9c0cee1f19f8 100644 --- a/source/com/intellij/debugger/ui/breakpoints/AnyExceptionBreakpoint.java +++ b/source/com/intellij/debugger/ui/breakpoints/AnyExceptionBreakpoint.java @@ -6,6 +6,7 @@ package com.intellij.debugger.ui.breakpoints; import com.intellij.debugger.engine.DebugProcessImpl; import com.intellij.debugger.engine.DebugProcess; +import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.InvalidDataException; import com.sun.jdi.ReferenceType; @@ -22,6 +23,7 @@ public class AnyExceptionBreakpoint extends ExceptionBreakpoint { } public void createRequest(DebugProcessImpl debuggerProcess) { + DebuggerManagerThreadImpl.assertIsManagerThread(); if (!ENABLED || !debuggerProcess.isAttached() || !debuggerProcess.getRequestsManager().findRequests(this).isEmpty()) { return; } diff --git a/source/com/intellij/debugger/ui/breakpoints/BreakpointManager.java b/source/com/intellij/debugger/ui/breakpoints/BreakpointManager.java index f0fc29122749..d32fe9bd7b20 100644 --- a/source/com/intellij/debugger/ui/breakpoints/BreakpointManager.java +++ b/source/com/intellij/debugger/ui/breakpoints/BreakpointManager.java @@ -718,7 +718,7 @@ public class BreakpointManager implements JDOMExternalizable { List breakpoints = getBreakpoints(); for (Iterator iterator = breakpoints.iterator(); iterator.hasNext();) { Breakpoint breakpoint = iterator.next(); - debugProcess.getRequestsManager().createRequest(breakpoint); + breakpoint.createRequest(debugProcess); } } diff --git a/source/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java b/source/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java index 7e8658764f66..78665d2482e0 100644 --- a/source/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java +++ b/source/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java @@ -5,6 +5,7 @@ import com.intellij.debugger.actions.ViewBreakpointsAction; import com.intellij.debugger.engine.DebugProcess; import com.intellij.debugger.engine.DebugProcessImpl; import com.intellij.debugger.engine.JVMNameUtil; +import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.debugger.engine.events.DebuggerCommandImpl; import com.intellij.debugger.engine.requests.RequestManagerImpl; import com.intellij.debugger.impl.DebuggerContextImpl; @@ -219,6 +220,7 @@ public abstract class BreakpointWithHighlighter extends Breakpoint { } public void createRequest(DebugProcessImpl debugProcess) { + DebuggerManagerThreadImpl.assertIsManagerThread(); // check is this breakpoint is enabled, vm reference is valid and there're no requests created yet if (!ENABLED || !debugProcess.isAttached() || !debugProcess.getRequestsManager().findRequests(this).isEmpty()) { return; diff --git a/source/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java b/source/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java index 517f2c6fa4d2..2e680b40a58b 100644 --- a/source/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java +++ b/source/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java @@ -4,12 +4,10 @@ */ package com.intellij.debugger.ui.breakpoints; -import com.intellij.debugger.engine.DebugProcess; import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.SourcePosition; -import com.intellij.debugger.engine.DebugProcessImpl; -import com.intellij.debugger.engine.SuspendContextImpl; import com.intellij.debugger.engine.DebugProcess; +import com.intellij.debugger.engine.*; import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; import com.intellij.debugger.impl.DebuggerUtilsEx; import com.intellij.openapi.diagnostic.Logger; @@ -79,6 +77,7 @@ public class ExceptionBreakpoint extends Breakpoint { } public void createRequest(DebugProcessImpl debugProcess) { + DebuggerManagerThreadImpl.assertIsManagerThread(); if (!ENABLED || !debugProcess.isAttached() || !debugProcess.getRequestsManager().findRequests(this).isEmpty()) { return; } diff --git a/source/com/intellij/debugger/ui/breakpoints/FilteredRequestor.java b/source/com/intellij/debugger/ui/breakpoints/FilteredRequestor.java index e77f9c493140..64167248a6d2 100644 --- a/source/com/intellij/debugger/ui/breakpoints/FilteredRequestor.java +++ b/source/com/intellij/debugger/ui/breakpoints/FilteredRequestor.java @@ -123,7 +123,7 @@ public abstract class FilteredRequestor implements LocatableEventRequestor, JDOM if(COUNT_FILTER_ENABLED) { context.getDebugProcess().getVirtualMachineProxy().suspend(); context.getDebugProcess().getRequestsManager().deleteRequest(this); - context.getDebugProcess().getRequestsManager().createRequest((Breakpoint)this); + ((Breakpoint)this).createRequest(context.getDebugProcess()); context.getDebugProcess().getVirtualMachineProxy().resume(); } if (INSTANCE_FILTERS_ENABLED) {