package jetbrains.mps.debugger.java.customViewers.plugin.plugin;
/*Generated by MPS */
import jetbrains.mps.debugger.java.api.state.proxy.ValueWrapperFactory;
import jetbrains.mps.debugger.java.api.state.proxy.ValueWrapper;
import jetbrains.mps.debugger.java.api.evaluation.proxies.IValueProxy;
import com.sun.jdi.ThreadReference;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.debugger.java.api.evaluation.EvaluationUtils;
import jetbrains.mps.debugger.java.api.evaluation.EvaluationException;
import com.sun.jdi.Value;
import java.util.List;
import jetbrains.mps.debugger.java.api.state.watchables.CustomJavaWatchable;
import jetbrains.mps.debugger.java.api.evaluation.proxies.IObjectValueProxy;
import java.util.Collections;
import java.util.ArrayList;
import jetbrains.mps.debugger.java.api.state.customViewers.CustomViewersManager;
import jetbrains.mps.debugger.java.api.evaluation.proxies.ProxyEqualsUtil;
import jetbrains.mps.debugger.java.api.evaluation.proxies.PrimitiveValueProxy;
import jetbrains.mps.debugger.java.api.evaluation.proxies.IArrayValueProxy;
public class SNodeViewer_WrapperFactory extends ValueWrapperFactory {
public SNodeViewer_WrapperFactory() {
}
public ValueWrapper createValueWrapper(IValueProxy value, ThreadReference threadReference) {
return new SNodeViewer_WrapperFactory.SNodeViewerWrapper(value, threadReference);
}
@Override
public boolean canWrapValue(@NotNull final IValueProxy proxy) {
return EvaluationUtils.consumeEvaluationException(new EvaluationUtils.EvaluationInvocatable<Boolean>() {
public Boolean invoke() throws EvaluationException {
Value value = proxy.getJDIValue();
if (value == null) {
return false;
}
if (!(EvaluationUtils.getInstance().instanceOf(value.type(), "Lorg/jetbrains/mps/openapi/model/SNode;", value.virtualMachine()))) {
return false;
}
return true;
}
}, false);
}
@Override
public String getWrappedType() {
return "Lorg/jetbrains/mps/openapi/model/SNode;";
}
public static class SNodeViewerWrapper extends ValueWrapper {
private final String myPresentation;
public SNodeViewerWrapper(IValueProxy value, ThreadReference threadReference) {
super(value, threadReference);
myPresentation = getValuePresentationImpl();
}
protected List<CustomJavaWatchable> getSubvaluesImpl() {
return EvaluationUtils.consumeEvaluationException(new EvaluationUtils.EvaluationInvocatable<List<CustomJavaWatchable>>() {
public List<CustomJavaWatchable> invoke() throws EvaluationException {
return getSubvaluesImpl((IObjectValueProxy) myValue);
}
}, Collections.<CustomJavaWatchable>emptyList());
}
protected List<CustomJavaWatchable> getSubvaluesImpl(IObjectValueProxy value) throws EvaluationException {
List<CustomJavaWatchable> result = new ArrayList<CustomJavaWatchable>();
IObjectValueProxy node = (IObjectValueProxy) value;
result.add(new SNodeWatchables.MyWatchable_text(CustomViewersManager.getInstance().fromJdi(((IObjectValueProxy) node.invokeMethod("getPresentation", "()Ljava/lang/String;", getThreadReference())).getJDIValue(), getThreadReference()), "text"));
result.add(new SNodeWatchables.MyWatchable_id(CustomViewersManager.getInstance().fromJdi(((IObjectValueProxy) node.getFieldValue("myId")).getJDIValue(), getThreadReference()), "id"));
result.add(new SNodeWatchables.MyWatchable_model(CustomViewersManager.getInstance().fromJdi(((IObjectValueProxy) node.invokeMethod("getModel", "()Lorg/jetbrains/mps/openapi/model/SModel;", getThreadReference())).getJDIValue(), getThreadReference()), "model"));
result.add(new SNodeWatchables.MyWatchable_concept(CustomViewersManager.getInstance().fromJdi(((IObjectValueProxy) ((IObjectValueProxy) node.getFieldValue("myConcept")).invokeMethod("getName", "()Ljava/lang/String;", getThreadReference())).getJDIValue(), getThreadReference()), "concept"));
if (!(ProxyEqualsUtil.javaEquals(((IObjectValueProxy) node.getFieldValue("parent")), null))) {
result.add(new SNodeWatchables.MyWatchable_parent(CustomViewersManager.getInstance().fromJdi(((IObjectValueProxy) node.getFieldValue("parent")).getJDIValue(), getThreadReference()), "parent"));
}
IObjectValueProxy properties = ((IObjectValueProxy) node.invokeMethod("getPropertyNames", "()Ljava/util/Collection;", getThreadReference()));
if (!((Boolean) ((((PrimitiveValueProxy) properties.invokeMethod("isEmpty", "()Z", getThreadReference())))).getJavaValue())) {
for (IObjectValueProxy property : EvaluationUtils.getInstance().<IObjectValueProxy>toIterableProxy(((IObjectValueProxy) ((IObjectValueProxy) EvaluationUtils.getInstance().invokeStaticMethod("jetbrains.mps.util.SNodeOperations", "getProperties", "(Lorg/jetbrains/mps/openapi/model/SNode;)Ljava/util/Map;", getThreadReference(), value)).invokeMethod("entrySet", "()Ljava/util/Set;", getThreadReference())), getThreadReference())) {
result.add(new SNodeWatchables.MyWatchable_property(CustomViewersManager.getInstance().fromJdi(property.getJDIValue(), getThreadReference()), "property"));
}
}
IObjectValueProxy currentChild = ((IObjectValueProxy) node.getFieldValue("first"));
while (!(ProxyEqualsUtil.javaEquals(currentChild, null))) {
result.add(new SNodeWatchables.MyWatchable_child(CustomViewersManager.getInstance().fromJdi(currentChild.getJDIValue(), getThreadReference()), "child"));
currentChild = ((IObjectValueProxy) node.getFieldValue("next"));
}
IArrayValueProxy references = ((IArrayValueProxy) node.getFieldValue("myReferences"));
if (!(ProxyEqualsUtil.javaEquals(references, null))) {
for (int i = 0; i < ((IArrayValueProxy) references).getLength(); i++) {
result.add(new SNodeWatchables.MyWatchable_reference(CustomViewersManager.getInstance().fromJdi(((IObjectValueProxy) references.getElementAt(i)).getJDIValue(), getThreadReference()), "reference"));
}
}
return result;
}
private String getValuePresentationImpl() {
return EvaluationUtils.consumeEvaluationException(new EvaluationUtils.EvaluationInvocatable<String>() {
public String invoke() throws EvaluationException {
return getValuePresentation((IObjectValueProxy) myValue);
}
}, super.getValuePresentation());
}
public String getValuePresentation() {
return myPresentation;
}
protected String getValuePresentation(IObjectValueProxy value) throws EvaluationException {
IObjectValueProxy node = (IObjectValueProxy) value;
String containingRole = (ProxyEqualsUtil.javaEquals(((IObjectValueProxy) node.getFieldValue("myRoleInParent")), null) ? null : (String) (((IObjectValueProxy) ((IObjectValueProxy) node.getFieldValue("myRoleInParent")).invokeMethod("getName", "()Ljava/lang/String;", getThreadReference()))).getJavaValue());
if (containingRole != null) {
containingRole = " in role: " + containingRole;
} else {
containingRole = "";
if (ProxyEqualsUtil.javaEquals(((IObjectValueProxy) node.getFieldValue("parent")), null)) {
containingRole = " (root)";
}
}
return "node<" + (String) (((IObjectValueProxy) ((IObjectValueProxy) node.getFieldValue("myConcept")).invokeMethod("getName", "()Ljava/lang/String;", getThreadReference()))).getJavaValue() + ">" + containingRole;
}
}
@Override
public String getName() {
return "SNodeViewer";
}
}