|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Micro//S ystems, Inc. Portions Copyright 1997-2001 Sun * Micro//S ystems, Inc. All Rights Reserved. */ package org.netbeans.modules.debugger.jpda.ui.breakpoints; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.HashMap; import java.util.Iterator; import org.netbeans.api.debugger.Breakpoint; import org.netbeans.api.debugger.DebuggerEngine; import org.netbeans.api.debugger.DebuggerManager; import org.netbeans.api.debugger.DebuggerManagerAdapter; import org.netbeans.api.debugger.LazyDebuggerManagerListener; import org.netbeans.api.debugger.jpda.JPDABreakpoint; import org.netbeans.api.debugger.jpda.JPDADebugger; import org.netbeans.api.debugger.jpda.LineBreakpoint; import org.netbeans.modules.debugger.jpda.ui.EditorContextBridge; /** * Listens on {@org.netbeans.api.debugger.DebuggerManager} on * {@link org.netbeans.api.debugger.DebuggerManager#PROP_BREAKPOINTS} * property and annotates JPDA Debugger line breakpoints in NetBeans editor. * It manages list of line breakpoint annotations for ToggleBreakpointPerformer * and BreakpointsUpdated too. * * @author Jan Jancura */ public class BreakpointAnnotationListener extends DebuggerManagerAdapter { private HashMap breakpointToAnnotation = new HashMap (); private boolean listen = true; public String[] getProperties () { return new String[] {DebuggerManager.PROP_BREAKPOINTS}; } /** * Listens on breakpoint. */ public void propertyChange (PropertyChangeEvent e) { String propertyName = e.getPropertyName (); if (propertyName == null) return; if (!listen) return; if ( (!propertyName.equals (LineBreakpoint.PROP_CONDITION)) && (!propertyName.equals (LineBreakpoint.PROP_URL)) && (!propertyName.equals (LineBreakpoint.PROP_LINE_NUMBER)) && (!propertyName.equals (JPDABreakpoint.PROP_ENABLED)) ) return; LineBreakpoint b = (LineBreakpoint) e.getSource (); annotate (b); } /** * Called when some breakpoint is added. * * @param b breakpoint */ public void breakpointAdded (Breakpoint b) { if (b instanceof LineBreakpoint) { ((LineBreakpoint) b).addPropertyChangeListener (this); annotate ((LineBreakpoint) b); } } /** * Called when some breakpoint is removed. * * @param breakpoint */ public void breakpointRemoved (Breakpoint b) { if (b instanceof LineBreakpoint) { ((LineBreakpoint) b).removePropertyChangeListener (this); removeAnnotation ((LineBreakpoint) b); } } public LineBreakpoint findBreakpoint (String url, int lineNumber) { Iterator i = breakpointToAnnotation.keySet ().iterator (); while (i.hasNext ()) { LineBreakpoint lb = (LineBreakpoint) i.next (); if (!lb.getURL ().equals (url)) continue; Object annotation = breakpointToAnnotation.get (lb); int ln = EditorContextBridge.getLineNumber (annotation, null); if (ln == lineNumber) return lb; } return null; } // helper methods .......................................................... private void annotate (LineBreakpoint b) { // remove old annotation Object annotation = breakpointToAnnotation.get (b); if (annotation != null) EditorContextBridge.removeAnnotation (annotation); if (b.isHidden ()) return; // add new one annotation = EditorContextBridge.annotate (b); if (annotation == null) return; breakpointToAnnotation.put (b, annotation); DebuggerEngine de = DebuggerManager.getDebuggerManager (). getCurrentEngine (); Object timeStamp = null; if (de != null) timeStamp = de.lookupFirst (null, JPDADebugger.class); update (b, timeStamp); } public void updateLineBreakpoints () { Iterator it = breakpointToAnnotation.keySet ().iterator (); while (it.hasNext ()) { LineBreakpoint lb = (LineBreakpoint) it.next (); update (lb, null); } } private void update (LineBreakpoint b, Object timeStamp) { Object annotation = breakpointToAnnotation.get (b); int ln = EditorContextBridge.getLineNumber (annotation, timeStamp); listen = false; b.setLineNumber (ln); listen = true; } private void removeAnnotation (LineBreakpoint b) { Object annotation = breakpointToAnnotation.remove (b); if (annotation != null) EditorContextBridge.removeAnnotation (annotation); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.