package jetbrains.mps.debugger.java.api.state.watchables;
/*Generated by MPS */
import jetbrains.mps.debug.api.programState.IWatchable;
import com.sun.jdi.ObjectReference;
import jetbrains.mps.debugger.java.api.state.proxy.JavaStackFrame;
import jetbrains.mps.debugger.java.api.state.proxy.JavaValue;
import com.sun.jdi.ThreadReference;
import jetbrains.mps.debugger.java.api.state.customViewers.CustomViewersManager;
import jetbrains.mps.debug.api.programState.IValue;
import javax.swing.Icon;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.mps.openapi.model.SNodeReference;
import jetbrains.mps.debugger.java.api.state.proxy.JavaLocation;
import jetbrains.mps.textgen.trace.TraceInfoProvider;
import java.util.Iterator;
import jetbrains.mps.textgen.trace.DebugInfo;
import jetbrains.mps.debugger.java.api.state.JavaUiState;
import java.util.List;
import jetbrains.mps.debug.api.programState.WatchablesCategory;
public class JavaThisObject extends JavaWatchable implements IWatchable {
private final ObjectReference myThisObject;
private final JavaStackFrame myStackFrame;
private final JavaValue myValue;
public JavaThisObject(ObjectReference objectReference, JavaStackFrame stackFrame, ThreadReference threadReference) {
super(threadReference);
myThisObject = objectReference;
myStackFrame = stackFrame;
myValue = CustomViewersManager.getInstance().fromJdi(myThisObject, myThreadReference);
}
public ObjectReference getThisObject() {
return myThisObject;
}
@Override
public String getName() {
return "this";
}
@Override
public IValue getValue() {
return myValue;
}
@Override
public Icon getPresentationIcon() {
return myValue.getPresentationIcon();
}
@Nullable
@Override
public SNodeReference getSourceNode() {
final JavaLocation location = myStackFrame.getLocation();
if (location == null) {
return null;
}
TraceInfoProvider traceProvider = myStackFrame.getThread().getDebugSession().getTraceProvider();
for (Iterator<DebugInfo> it = traceProvider.debugInfo(JavaUiState.modelNameFromLocation(location)).iterator(); it.hasNext();) {
DebugInfo di = it.next();
List<SNodeReference> unitNodes = di.getUnitNodesForPosition(location.getFileName(), location.getLineNumber());
if (!(unitNodes.isEmpty())) {
return unitNodes.get(0);
}
}
return null;
}
@Override
public WatchablesCategory getCategory() {
return JavaWatchablesCategory.THIS_OBJECT;
}
}