13
13
*******************************************************************************/
14
14
package org .eclipse .debug .internal .ui .views .breakpoints ;
15
15
16
+ import java .util .Collections ;
17
+ import java .util .Map ;
18
+ import java .util .WeakHashMap ;
19
+
16
20
import org .eclipse .core .resources .IMarkerDelta ;
17
21
import org .eclipse .core .runtime .CoreException ;
18
22
import org .eclipse .core .runtime .IAdaptable ;
19
23
import org .eclipse .debug .core .DebugPlugin ;
20
- import org .eclipse .debug .core .IBreakpointListener ;
24
+ import org .eclipse .debug .core .IBreakpointsListener ;
21
25
import org .eclipse .debug .core .model .IBreakpoint ;
22
26
import org .eclipse .debug .ui .AbstractBreakpointOrganizerDelegate ;
23
27
import org .eclipse .debug .ui .BreakpointTypeCategory ;
26
30
* Breakpoint organizers for breakpoint types based on breakpoint enablement
27
31
* state.
28
32
*/
29
- public class BreakpointEnablement extends AbstractBreakpointOrganizerDelegate implements IBreakpointListener {
33
+ public class BreakpointEnablement extends AbstractBreakpointOrganizerDelegate implements IBreakpointsListener {
30
34
31
35
private final BreakpointTypeCategory ENABLED = new BreakpointTypeCategory ("Enabled" , 0 ); //$NON-NLS-1$
32
36
private final BreakpointTypeCategory DISABLED = new BreakpointTypeCategory ("Disabled" , 1 ); //$NON-NLS-1$
33
37
38
+ private final Map <IBreakpoint , Boolean > breakpointCache ;
39
+
34
40
public BreakpointEnablement () {
35
41
DebugPlugin .getDefault ().getBreakpointManager ().addBreakpointListener (this );
42
+ breakpointCache = Collections .synchronizedMap (new WeakHashMap <>());
36
43
}
37
44
38
45
@ Override
39
46
public void dispose () {
40
47
DebugPlugin .getDefault ().getBreakpointManager ().removeBreakpointListener (this );
48
+ breakpointCache .clear ();
41
49
}
42
50
43
51
@ Override
@@ -49,6 +57,7 @@ public IAdaptable[] getCategories(IBreakpoint breakpoint) {
49
57
} else {
50
58
categories = new IAdaptable [] { DISABLED };
51
59
}
60
+ breakpointCache .put (breakpoint , breakpoint .isEnabled ());
52
61
return categories ;
53
62
} catch (CoreException e ) {
54
63
DebugPlugin .log (e );
@@ -57,15 +66,40 @@ public IAdaptable[] getCategories(IBreakpoint breakpoint) {
57
66
}
58
67
59
68
@ 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
+ }
61
77
}
62
78
63
79
@ 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
+ }
65
84
}
66
85
67
86
@ 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
+ }
70
104
}
71
105
}
0 commit comments