package jetbrains.mps.debugger.java.api.state.proxy;
/*Generated by MPS */
import jetbrains.mps.debugger.java.api.evaluation.proxies.IValueProxy;
import jetbrains.mps.debug.api.programState.IValue;
import org.jetbrains.annotations.NotNull;
import com.sun.jdi.ThreadReference;
import javax.swing.Icon;
import jetbrains.mps.debugger.java.api.evaluation.proxies.INullValueProxy;
import jetbrains.mps.debugger.java.api.ui.Icons;
import jetbrains.mps.debugger.java.api.evaluation.proxies.PrimitiveValueProxy;
import jetbrains.mps.debugger.java.api.evaluation.proxies.IArrayValueProxy;
import java.util.List;
import jetbrains.mps.debug.api.programState.IWatchable;
import java.util.ArrayList;
import com.sun.jdi.VirtualMachine;
public abstract class ValueWrapper<V extends IValueProxy> extends JavaValue<V> implements IValue {
private final String myPresentation;
public ValueWrapper(@NotNull V value, @NotNull ThreadReference threadReference) {
super(value, threadReference);
myPresentation = myValue.getPresentation();
}
@Override
public Icon getPresentationIcon() {
if (myValue instanceof INullValueProxy) {
return Icons.VALUE_PRIMITIVE;
}
if (myValue instanceof PrimitiveValueProxy) {
return Icons.VALUE_PRIMITIVE;
}
if (myValue instanceof IArrayValueProxy) {
return Icons.VALUE_ARRAY;
}
return Icons.VALUE_OBJECT;
}
@Override
public String getValuePresentation() {
return myPresentation;
}
@Override
public List<IWatchable> calculateSubvalues() {
List<IWatchable> result = new ArrayList<IWatchable>();
for (IWatchable watchable : getSubvaluesImpl()) {
result.add(watchable);
}
return result;
}
protected abstract List<? extends IWatchable> getSubvaluesImpl();
@Override
public boolean isStructure() {
return true;
}
public ThreadReference getThreadReference() {
return myThreadReference;
}
public VirtualMachine getVM() {
return myValue.getJDIValue().virtualMachine();
}
}