|
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 Microsystems, Inc. Portions Copyright 1997-2000 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.debugger.projects; import java.io.IOException; import javax.swing.JEditorPane; import javax.swing.text.BadLocationException; import javax.swing.text.Element; import javax.swing.text.StyledDocument; import org.netbeans.api.debugger.DebuggerEngine; import org.openide.cookies.EditorCookie; import org.openide.loaders.DataObject; import org.openide.text.Annotation; import org.openide.text.DataEditorSupport; import org.openide.text.Line; import org.openide.text.NbDocument; import org.openide.text.Line.Part; import org.openide.util.RequestProcessor; import org.netbeans.api.debugger.DebuggerManager; import org.netbeans.api.debugger.jpda.InvalidExpressionException; import org.netbeans.api.debugger.Watch; import org.netbeans.api.debugger.jpda.JPDADebugger; import org.netbeans.api.debugger.jpda.JPDAWatch; import org.netbeans.api.debugger.jpda.ObjectVariable; import org.netbeans.api.debugger.jpda.Variable; import org.openide.nodes.Node; import org.openide.windows.TopComponent; public class ToolTipAnnotation extends Annotation implements Runnable { private String toolTipText = null; private StyledDocument doc; public String getShortDescription () { toolTipText = null; DebuggerEngine currentEngine = DebuggerManager.getDebuggerManager (). getCurrentEngine (); if (currentEngine == null) return null; JPDADebugger d = (JPDADebugger) currentEngine.lookupFirst (null, JPDADebugger.class); if (d == null) return null; Part lp = (Part) getAttachedAnnotatable(); Line line = lp.getLine (); DataObject dob = DataEditorSupport.findDataObject (line); if (dob == null) return null; EditorCookie ec = (EditorCookie) dob.getCookie (EditorCookie.class); if (ec != null) { // Only for editable dataobjects try { doc = ec.openDocument (); RequestProcessor.getDefault ().post (this); doc.render (this); } catch (IOException e) { } } return toolTipText; } public void run () { //1) get tooltip text Part lp = (Part) getAttachedAnnotatable (); JEditorPane ep = getCurrentEditor (); if ((lp == null) || (ep == null)) return; String text = getIdentifier ( doc, ep, NbDocument.findLineOffset ( doc, lp.getLine ().getLineNumber () ) + lp.getColumn () ); if (text == null) return; // obtain text representation of value of watch String old = toolTipText; toolTipText = null; DebuggerEngine currentEngine = DebuggerManager.getDebuggerManager (). getCurrentEngine (); if (currentEngine == null) return; JPDADebugger d = (JPDADebugger) currentEngine.lookupFirst (null, JPDADebugger.class); if (d == null) return; try { Variable v = d.evaluate (text); if (v instanceof ObjectVariable) try { toolTipText = text + " = (" + v.getType () + ") " + ((ObjectVariable) v).getToStringValue (); } catch (InvalidExpressionException ex) { toolTipText = text + " = (" + v.getType () + ") " + v.getValue (); } else toolTipText = text + " = (" + v.getType () + ") " + v.getValue (); } catch (InvalidExpressionException e) { toolTipText = text + " = >" + e.getMessage () + "<"; } firePropertyChange (PROP_SHORT_DESCRIPTION, old, toolTipText); } public String getAnnotationType () { return null; // Currently return null annotation type } private static String getIdentifier ( StyledDocument doc, JEditorPane ep, int offset ) { String t = null; if ( (ep.getSelectionStart () <= offset) && (offset <= ep.getSelectionEnd ()) ) t = ep.getSelectedText (); if (t != null) return t; int line = NbDocument.findLineNumber ( doc, offset ); int col = NbDocument.findLineColumn ( doc, offset ); try { Element lineElem = NbDocument.findLineRootElement (doc). getElement (line); if (lineElem == null) return null; int lineStartOffset = lineElem.getStartOffset (); int lineLen = lineElem.getEndOffset() - lineStartOffset; t = doc.getText (lineStartOffset, lineLen); int identStart = col; while (identStart > 0 && (Character.isJavaIdentifierPart ( t.charAt (identStart - 1) ) || (t.charAt (identStart - 1) == '.'))) { identStart--; } int identEnd = col; while (identEnd < lineLen && Character.isJavaIdentifierPart(t.charAt(identEnd)) ) { identEnd++; } if (identStart == identEnd) return null; return t.substring (identStart, identEnd); } catch (BadLocationException e) { return null; } } /** * Returns current editor component instance. * * Used in: ToolTipAnnotation */ static JEditorPane getCurrentEditor () { EditorCookie e = getCurrentEditorCookie (); if (e == null) return null; JEditorPane[] op = e.getOpenedPanes (); if ((op == null) || (op.length < 1)) return null; return op [0]; } /** * Returns current editor component instance. * * @return current editor component instance */ private static EditorCookie getCurrentEditorCookie () { Node[] nodes = TopComponent.getRegistry ().getActivatedNodes (); if ( (nodes == null) || (nodes.length != 1) ) return null; Node n = nodes [0]; return (EditorCookie) n.getCookie ( EditorCookie.class ); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 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.