diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java index 3fe8b70d1a8d..08d7012eeeea 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java @@ -91,7 +91,7 @@ public class XDebugSessionImpl implements XDebugSession { private XDebugProcess myDebugProcess; private final Map, CustomizedBreakpointPresentation> myRegisteredBreakpoints = new THashMap, CustomizedBreakpointPresentation>(); - private final Set> myInactiveSlaveBreakpoints = new SmartHashSet>(); + private final Set> myInactiveSlaveBreakpoints = Collections.synchronizedSet(new SmartHashSet>()); private boolean myBreakpointsDisabled; private final XDebuggerManagerImpl myDebuggerManager; private MyBreakpointListener myBreakpointListener; @@ -295,12 +295,15 @@ public class XDebugSessionImpl implements XDebugSession { XBreakpointManagerImpl breakpointManager = myDebuggerManager.getBreakpointManager(); XDependentBreakpointManager dependentBreakpointManager = breakpointManager.getDependentBreakpointManager(); disableSlaveBreakpoints(dependentBreakpointManager); - processAllBreakpoints(true, false); + // listeners have to be applied before processing all existing breakpoints, + // otherwise we may not process breakpoints added during the processing myBreakpointListener = new MyBreakpointListener(); breakpointManager.addBreakpointListener(myBreakpointListener); myDependentBreakpointListener = new MyDependentBreakpointListener(); dependentBreakpointManager.addListener(myDependentBreakpointListener); + + processAllBreakpoints(true, false); } @Override diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointManagerImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointManagerImpl.java index be227cec1698..ebcd027c2643 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointManagerImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointManagerImpl.java @@ -240,14 +240,15 @@ public class XBreakpointManagerImpl implements XBreakpointManager, PersistentSta @NotNull public > Collection getBreakpoints(@NotNull final XBreakpointType type) { ApplicationManager.getApplication().assertReadAccessAllowed(); - Collection> breakpoints = myBreakpoints.get(type); - Collection regular = breakpoints != null ? Collections.unmodifiableCollection((Collection)breakpoints) : Collections.emptyList(); - - final XBreakpointBase defaultBreakpoint = myDefaultBreakpoints.get(type); - if (defaultBreakpoint == null) return regular; List result = new ArrayList(); - result.add((B)defaultBreakpoint); - result.addAll(regular); + B defaultBreakpoint = getDefaultBreakpoint(type); + if (defaultBreakpoint != null) { + result.add(defaultBreakpoint); + } + Collection> breakpoints = myBreakpoints.get(type); + if (breakpoints != null) { + result.addAll((Collection)breakpoints); + } return result; }