package jetbrains.mps.debugger.java.api.state.watchables;
/*Generated by MPS */
import jetbrains.mps.debug.api.programState.IWatchable;
import com.sun.jdi.ReferenceType;
import com.sun.jdi.ThreadReference;
import jetbrains.mps.debug.api.programState.WatchablesCategory;
import jetbrains.mps.debug.api.programState.IValue;
import javax.swing.Icon;
import jetbrains.mps.debugger.java.api.ui.Icons;
import java.util.List;
import java.util.ArrayList;
import com.sun.jdi.Field;
public class JavaStaticContext extends JavaWatchable implements IWatchable {
private final ReferenceType myStaticType;
private final JavaStaticContext.StaticContextValue myValue;
public JavaStaticContext(ReferenceType staticType, ThreadReference threadReference) {
super(threadReference);
myStaticType = staticType;
myValue = new JavaStaticContext.StaticContextValue();
}
@Override
public String getName() {
return "static";
}
@Override
public WatchablesCategory getCategory() {
return JavaWatchablesCategory.STATIC_CONTEXT;
}
@Override
public IValue getValue() {
assert myValue != null;
return myValue;
}
@Override
public Icon getPresentationIcon() {
return Icons.WATCHABLE_STATIC;
}
private class StaticContextValue implements IValue {
private final String myName;
private volatile List<IWatchable> mySubvalues;
private StaticContextValue() {
myName = myStaticType.name();
}
@Override
public String getValuePresentation() {
return myName;
}
@Override
public Icon getPresentationIcon() {
return Icons.VALUE_OBJECT;
}
@Override
public boolean isStructure() {
return true;
}
public List<IWatchable> calculateSubvalues() {
List<IWatchable> result = new ArrayList<IWatchable>();
for (Field field : myStaticType.fields()) {
if (!(field.isStatic())) {
continue;
}
result.add(new JavaStaticField(field, myThreadReference));
}
return result;
}
@Override
public List<IWatchable> getSubvalues() {
return mySubvalues;
}
@Override
public void initSubvalues() {
mySubvalues = calculateSubvalues();
}
}
}