package bluej.debugger.jdi;
import bluej.debugger.DebuggerClass;
import bluej.debugger.DebuggerField;
import bluej.debugger.DebuggerObject;
import bluej.debugger.gentype.JavaType;
import com.sun.jdi.Field;
import com.sun.jdi.ObjectReference;
import com.sun.jdi.Value;
import threadchecker.OnThread;
import threadchecker.Tag;
| An implement of DebuggerField using the Java Debug Interface (JDI).
|
| @author Davin McCall
|
public class JdiField
extends DebuggerField{
@OnThread(Tag.Any)
private final Field field;
@OnThread(Tag.Any)
private final JdiObject object;
private boolean hidden;
@OnThread(Tag.Any)
public JdiField(Field field, JdiObject object, boolean hidden)
{
this.field = field;
this.object = object;
this.hidden = hidden;
}
@Override
@OnThread(Tag.Any)
public String getName()
{
return field.name();
}
@Override
public JavaType getType()
{
if (object != null) {
return JdiReflective.fromField(field, object);
}
else {
return JdiReflective.fromField(field);
}
}
@Override
public int getModifiers()
{
return field.modifiers();
}
@Override
@OnThread(Tag.Any)
@SuppressWarnings("threadchecker")
public String getValueString()
{
Value value;
if (object != null) {
value = object.obj.getValue(field);
}
else {
value = field.declaringType().getValue(field);
}
return JdiUtils.getJdiUtils().getValueString(value);
}
@Override
public DebuggerObject getValueObject(JavaType expectedType)
{
Value value;
if (object != null) {
value = object.obj.getValue(field);
}
else {
value = field.declaringType().getValue(field);
}
if (value == null) {
return JdiObject.getDebuggerObject(null);
}
if (value instanceof ObjectReference) {
ObjectReference or = (ObjectReference) value;
if (expectedType == null) {
expectedType = getType();
}
return JdiObject.getDebuggerObject(or, expectedType);
}
return null;
}
@Override
public DebuggerClass getDeclaringClass()
{
return new JdiClass(field.declaringType());
}
@Override
public boolean isHidden()
{
return hidden;
}
}
top,
use,
map,
class JdiField
. JdiField
. getName
. getType
. getModifiers
. getValueString
. getValueObject
. getDeclaringClass
. isHidden
138 neLoCode
+ 2 LoComm