|
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.