1313 *******************************************************************************/
1414package org .eclipse .debug .internal .ui .views .breakpoints ;
1515
16+ import java .util .Collections ;
17+ import java .util .Map ;
18+ import java .util .WeakHashMap ;
19+
1620import org .eclipse .core .resources .IMarkerDelta ;
1721import org .eclipse .core .runtime .CoreException ;
1822import org .eclipse .core .runtime .IAdaptable ;
1923import org .eclipse .debug .core .DebugPlugin ;
20- import org .eclipse .debug .core .IBreakpointListener ;
24+ import org .eclipse .debug .core .IBreakpointsListener ;
2125import org .eclipse .debug .core .model .IBreakpoint ;
2226import org .eclipse .debug .ui .AbstractBreakpointOrganizerDelegate ;
2327import org .eclipse .debug .ui .BreakpointTypeCategory ;
2630 * Breakpoint organizers for breakpoint types based on breakpoint enablement
2731 * state.
2832 */
29- public class BreakpointEnablement extends AbstractBreakpointOrganizerDelegate implements IBreakpointListener {
33+ public class BreakpointEnablement extends AbstractBreakpointOrganizerDelegate implements IBreakpointsListener {
3034
3135 private final BreakpointTypeCategory ENABLED = new BreakpointTypeCategory ("Enabled" , 0 ); //$NON-NLS-1$
3236 private final BreakpointTypeCategory DISABLED = new BreakpointTypeCategory ("Disabled" , 1 ); //$NON-NLS-1$
3337
38+ private final Map <IBreakpoint , Boolean > breakpointCache ;
39+
3440 public BreakpointEnablement () {
3541 DebugPlugin .getDefault ().getBreakpointManager ().addBreakpointListener (this );
42+ breakpointCache = Collections .synchronizedMap (new WeakHashMap <>());
3643 }
3744
3845 @ Override
3946 public void dispose () {
4047 DebugPlugin .getDefault ().getBreakpointManager ().removeBreakpointListener (this );
48+ breakpointCache .clear ();
4149 }
4250
4351 @ Override
@@ -49,6 +57,7 @@ public IAdaptable[] getCategories(IBreakpoint breakpoint) {
4957 } else {
5058 categories = new IAdaptable [] { DISABLED };
5159 }
60+ breakpointCache .put (breakpoint , breakpoint .isEnabled ());
5261 return categories ;
5362 } catch (CoreException e ) {
5463 DebugPlugin .log (e );
@@ -57,15 +66,40 @@ public IAdaptable[] getCategories(IBreakpoint breakpoint) {
5766 }
5867
5968 @ Override
60- public void breakpointAdded (IBreakpoint breakpoint ) {
69+ public void breakpointsAdded (IBreakpoint [] breakpoints ) {
70+ for (IBreakpoint breakpoint : breakpoints ) {
71+ try {
72+ breakpointCache .put (breakpoint , breakpoint .isEnabled ());
73+ } catch (CoreException e ) {
74+ DebugPlugin .log (e );
75+ }
76+ }
6177 }
6278
6379 @ Override
64- public void breakpointRemoved (IBreakpoint breakpoint , IMarkerDelta delta ) {
80+ public void breakpointsRemoved (IBreakpoint [] breakpoints , IMarkerDelta [] deltas ) {
81+ for (IBreakpoint breakpoint : breakpoints ) {
82+ breakpointCache .remove (breakpoint );
83+ }
6584 }
6685
6786 @ Override
68- public void breakpointChanged (IBreakpoint breakpoint , IMarkerDelta delta ) {
69- fireCategoryChanged (ENABLED );
87+ public void breakpointsChanged (IBreakpoint [] breakpoints , IMarkerDelta [] deltas ) {
88+ boolean updateCategories = false ;
89+ for (IBreakpoint breakpoint : breakpoints ) {
90+ try {
91+ boolean isEnabled = breakpoint .isEnabled ();
92+ Boolean wasEnabled = breakpointCache .get (breakpoint );
93+ if (wasEnabled == null || wasEnabled != isEnabled ) {
94+ breakpointCache .put (breakpoint , isEnabled );
95+ updateCategories = true ;
96+ }
97+ } catch (CoreException e ) {
98+ DebugPlugin .log (e );
99+ }
100+ }
101+ if (updateCategories ) {
102+ fireCategoryChanged (ENABLED );
103+ }
70104 }
71105}
0 commit comments