1 19 20 package org.netbeans.modules.debugger.jpda.breakpoints; 21 22 import java.beans.PropertyChangeListener ; 23 import java.util.HashMap ; 24 import java.util.Iterator ; 25 import java.util.logging.Logger ; 26 27 import org.netbeans.api.debugger.Breakpoint; 28 import org.netbeans.api.debugger.DebuggerEngine; 29 import org.netbeans.api.debugger.DebuggerManager; 30 import org.netbeans.api.debugger.DebuggerManagerListener; 31 import org.netbeans.api.debugger.LazyActionsManagerListener; 32 import org.netbeans.api.debugger.jpda.JPDABreakpoint; 33 import org.netbeans.spi.debugger.ContextProvider; 34 import org.netbeans.api.debugger.Session; 35 import org.netbeans.api.debugger.Watch; 36 37 import org.netbeans.api.debugger.jpda.ClassLoadUnloadBreakpoint; 38 import org.netbeans.api.debugger.jpda.ExceptionBreakpoint; 39 import org.netbeans.api.debugger.jpda.FieldBreakpoint; 40 import org.netbeans.api.debugger.jpda.JPDADebugger; 41 import org.netbeans.api.debugger.jpda.LineBreakpoint; 42 import org.netbeans.api.debugger.jpda.MethodBreakpoint; 43 import org.netbeans.api.debugger.jpda.ThreadBreakpoint; 44 45 import org.netbeans.modules.debugger.jpda.SourcePath; 46 import org.netbeans.modules.debugger.jpda.JPDADebuggerImpl; 47 48 49 55 public class BreakpointsEngineListener extends LazyActionsManagerListener 56 implements PropertyChangeListener , DebuggerManagerListener { 57 58 private static Logger logger = Logger.getLogger("org.netbeans.modules.debugger.jpda.breakpoints"); 60 private JPDADebuggerImpl debugger; 61 private SourcePath engineContext; 62 private boolean started = false; 63 private Session session; 64 private BreakpointsReader breakpointsReader; 65 66 67 public BreakpointsEngineListener (ContextProvider lookupProvider) { 68 debugger = (JPDADebuggerImpl) lookupProvider.lookupFirst 69 (null, JPDADebugger.class); 70 engineContext = (SourcePath) lookupProvider. 71 lookupFirst (null, SourcePath.class); 72 session = (Session) lookupProvider.lookupFirst(null, Session.class); 73 debugger.addPropertyChangeListener ( 74 JPDADebugger.PROP_STATE, 75 this 76 ); 77 breakpointsReader = PersistenceManager.findBreakpointsReader(); 78 } 79 80 protected void destroy () { 81 debugger.removePropertyChangeListener ( 82 JPDADebugger.PROP_STATE, 83 this 84 ); 85 DebuggerManager.getDebuggerManager ().removeDebuggerListener ( 86 DebuggerManager.PROP_BREAKPOINTS, 87 this 88 ); 89 removeBreakpointImpls (); 90 } 91 92 public String [] getProperties () { 93 return new String [] {"asd"}; 94 } 95 96 public void propertyChange (java.beans.PropertyChangeEvent evt) { 97 if (debugger.getState () == JPDADebugger.STATE_RUNNING) { 98 if (started) return; 99 started = true; 100 createBreakpointImpls (); 101 DebuggerManager.getDebuggerManager ().addDebuggerListener ( 102 DebuggerManager.PROP_BREAKPOINTS, 103 this 104 ); 105 } 106 if (debugger.getState () == JPDADebugger.STATE_DISCONNECTED) { 107 removeBreakpointImpls (); 108 started = false; 109 DebuggerManager.getDebuggerManager ().removeDebuggerListener ( 110 DebuggerManager.PROP_BREAKPOINTS, 111 this 112 ); 113 } 114 } 115 116 public void actionPerformed (Object action) { 117 } 120 121 public void breakpointAdded (Breakpoint breakpoint) { 122 createBreakpointImpl (breakpoint); 123 } 124 125 public void breakpointRemoved (Breakpoint breakpoint) { 126 removeBreakpointImpl (breakpoint); 127 } 128 129 130 public Breakpoint[] initBreakpoints () {return new Breakpoint [0];} 131 public void initWatches () {} 132 public void sessionAdded (Session session) {} 133 public void sessionRemoved (Session session) {} 134 public void watchAdded (Watch watch) {} 135 public void watchRemoved (Watch watch) {} 136 public void engineAdded (DebuggerEngine engine) {} 137 public void engineRemoved (DebuggerEngine engine) {} 138 139 140 142 private HashMap <Breakpoint, BreakpointImpl> breakpointToImpl = new HashMap <Breakpoint, BreakpointImpl>(); 143 144 145 private void createBreakpointImpls () { 146 Breakpoint[] bs = DebuggerManager.getDebuggerManager ().getBreakpoints (); 147 int i, k = bs.length; 148 for (i = 0; i < k; i++) 149 createBreakpointImpl (bs [i]); 150 } 151 152 private void removeBreakpointImpls () { 153 Breakpoint[] bs = DebuggerManager.getDebuggerManager ().getBreakpoints (); 154 int i, k = bs.length; 155 for (i = 0; i < k; i++) 156 removeBreakpointImpl (bs [i]); 157 } 158 159 public void fixBreakpointImpls () { 160 Iterator <BreakpointImpl> i = breakpointToImpl.values ().iterator (); 161 while (i.hasNext ()) 162 i.next ().fixed (); 163 } 164 165 private void createBreakpointImpl (Breakpoint b) { 166 if (breakpointToImpl.containsKey (b)) return; 167 if (b instanceof LineBreakpoint) { 168 breakpointToImpl.put ( 169 b, 170 new LineBreakpointImpl ( 171 (LineBreakpoint) b, 172 breakpointsReader, 173 debugger, 174 session, 175 engineContext 176 ) 177 ); 178 } else 179 if (b instanceof ExceptionBreakpoint) { 180 breakpointToImpl.put ( 181 b, 182 new ExceptionBreakpointImpl ( 183 (ExceptionBreakpoint) b, 184 debugger, 185 session 186 ) 187 ); 188 } else 189 if (b instanceof MethodBreakpoint) { 190 breakpointToImpl.put ( 191 b, 192 new MethodBreakpointImpl ( 193 (MethodBreakpoint) b, 194 debugger, 195 session 196 ) 197 ); 198 } else 199 if (b instanceof FieldBreakpoint) { 200 breakpointToImpl.put ( 201 b, 202 new FieldBreakpointImpl ( 203 (FieldBreakpoint) b, 204 debugger, 205 session 206 ) 207 ); 208 } else 209 if (b instanceof ThreadBreakpoint) { 210 breakpointToImpl.put ( 211 b, 212 new ThreadBreakpointImpl ( 213 (ThreadBreakpoint) b, 214 debugger, 215 session 216 ) 217 ); 218 } else 219 if (b instanceof ClassLoadUnloadBreakpoint) { 220 breakpointToImpl.put ( 221 b, 222 new ClassBreakpointImpl ( 223 (ClassLoadUnloadBreakpoint) b, 224 debugger, 225 session 226 ) 227 ); 228 } 229 logger.finer("BreakpointsEngineListener: created impl "+breakpointToImpl.get(b)+" for "+b); 230 } 231 232 private void removeBreakpointImpl (Breakpoint b) { 233 BreakpointImpl impl = breakpointToImpl.get (b); 234 if (impl == null) return; 235 logger.finer("BreakpointsEngineListener: removed impl "+impl+" for "+b); 236 impl.remove (); 237 breakpointToImpl.remove (b); 238 } 239 } 240 | Popular Tags |