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; } }