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