package org.eclipse.jdt.internal.debug.ui; | |
/* | |
* (c) Copyright IBM Corp. 2000, 2001. | |
* All Rights Reserved. | |
*/ | |
import org.eclipse.debug.core.DebugException; | |
import org.eclipse.debug.core.DebugPlugin; | |
import org.eclipse.debug.core.ILaunchManager; | |
import org.eclipse.debug.core.model.IDebugTarget; | |
import org.eclipse.debug.core.model.IValue; | |
import org.eclipse.debug.core.model.IVariable; | |
import org.eclipse.jdt.debug.core.IJavaDebugTarget; | |
import org.eclipse.jdt.debug.core.IJavaType; | |
import org.eclipse.jdt.debug.core.IJavaValue; | |
import org.eclipse.jdt.ui.text.java.hover.IJavaEditorTextHover; | |
import org.eclipse.jface.text.BadLocationException; | |
import org.eclipse.jface.text.IRegion; | |
import org.eclipse.jface.text.ITextViewer; | |
import org.eclipse.ui.IEditorPart; | |
public class JavaDebugHover implements IJavaEditorTextHover { | |
protected IEditorPart fEditor; | |
public JavaDebugHover() { | |
} | |
/** | |
* @see IJavaEditorTextHover#setEditor(IEditorPart) | |
*/ | |
public void setEditor(IEditorPart editor) { | |
fEditor= editor; | |
} | |
/** | |
* @see ITextHover#getHoverRegion(ITextViewer, int) | |
*/ | |
public IRegion getHoverRegion(ITextViewer textViewer, int offset) { | |
return JavaWordFinder.findWord(textViewer.getDocument(), offset); | |
} | |
/** | |
* @see ITextHover#getHoverInfo(ITextViewer, IRegion) | |
*/ | |
public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { | |
DebugPlugin debugPlugin= DebugPlugin.getDefault(); | |
if (debugPlugin == null) | |
return null; | |
ILaunchManager launchManager= debugPlugin.getLaunchManager(); | |
if (launchManager == null) | |
return null; | |
IDebugTarget[] targets= launchManager.getDebugTargets(); | |
if (targets != null && targets.length > 0) { | |
try { | |
String variableName= textViewer.getDocument().get(hoverRegion.getOffset(), hoverRegion.getLength()); | |
boolean first= true; | |
StringBuffer buffer= new StringBuffer(); | |
for (int i= 0; i < targets.length; i++) { | |
IJavaDebugTarget javaTarget = (IJavaDebugTarget) targets[i].getAdapter(IJavaDebugTarget.class); | |
if (javaTarget != null) { | |
try { | |
IVariable variable= javaTarget.findVariable(variableName); | |
if (variable != null) { | |
if (!first) | |
buffer.append('\n'); | |
first= false; | |
appendVariable(buffer, variable); | |
} | |
} catch (DebugException x) { | |
} | |
} | |
} | |
if (buffer.length() > 0) | |
return buffer.toString(); | |
} catch (BadLocationException x) { | |
} | |
} | |
return null; | |
} | |
private static String getTypeName(IVariable variable) throws DebugException { | |
IValue value= variable.getValue(); | |
if (value instanceof IJavaValue) { | |
IJavaType type= ((IJavaValue) value).getJavaType(); | |
if (type == null) | |
return null; | |
return type.getName(); | |
} | |
return value.getReferenceTypeName(); | |
} | |
private static void appendVariable(StringBuffer buffer, IVariable variable) throws DebugException { | |
buffer.append(variable.getName()); | |
buffer.append(" ="); //$NON-NLS-1$ | |
String type= getTypeName(variable); | |
String value= variable.getValue().getValueString().trim(); | |
if (type == null) { | |
buffer.append(" null"); //$NON-NLS-1$ | |
} else if (type.equals("java.lang.String")) { //$NON-NLS-1$ | |
buffer.append(" \""); //$NON-NLS-1$ | |
buffer.append(value); | |
buffer.append('"'); | |
} else if (type.equals("boolean")) { //$NON-NLS-1$ | |
buffer.append(' '); | |
buffer.append(value); | |
} else { | |
buffer.append(" ("); //$NON-NLS-1$ | |
buffer.append(type); | |
buffer.append(") "); //$NON-NLS-1$ | |
buffer.append(value); | |
} | |
} | |
} |