/** @since 0.8 or earlier */ public GraphPrintVisitor beginGraph(String graphName) { ensureOpen(); if (openGroupCount == 0) { beginGroup(graphName); } maybeEndGraph(); openGraphCount++; this.currentGraphName = graphName; // save old nodes prevNodeMap = nodeMap; nodeMap = new IdentityHashMap<>(); edgeList = new ArrayList<>(); return this; }
/** @since 0.8 or earlier */ public void connectNodes(Object node, Object child) { GraphPrintVisitor.this.connectNodes(node, child, null); }
/** @since 0.8 or earlier */ public void createElementForNode(Object node) { GraphPrintVisitor.this.createElementForNode(node); }
final void createElementForNode(Object node) { boolean exists = nodeMap.containsKey(node); if (!exists) { int nodeId = !exists ? oldOrNextId(node) : nextId(); nodeMap.put(node, new NodeElement(nodeId)); String className = NodeUtil.className(node.getClass()); setNodeProperty(node, "name", dropNodeSuffix(className)); NodeInfo nodeInfo = node.getClass().getAnnotation(NodeInfo.class); if (nodeInfo != null) { setNodeProperty(node, "cost", nodeInfo.cost()); if (!nodeInfo.shortName().isEmpty()) { setNodeProperty(node, "shortName", nodeInfo.shortName()); } } setNodeProperty(node, "class", className); if (node instanceof Node) { readNodeProperties((Node) node); copyDebugProperties((Node) node); } } }
public GraphPrintVisitor visit(Object node) { if (null == graphElement) { beginGraph("truffle tree"); if (getElementByObject(node) != null && NodeUtil.findAnnotation(node.getClass(), GraphDuplicate.class) == null) { return this; createElementForNode(node); for (Map.Entry<String, Node> child : findNamedNodeChildren((Node) node).entrySet()) { visit(child.getValue()); connectNodes(node, child.getValue(), child.getKey());
private static void dumpIGV() { com.oracle.truffle.api.nodes.GraphPrintVisitor printer = new com.oracle.truffle.api.nodes.GraphPrintVisitor(); printer.beginGroup("shapes"); IGVShapeVisitor visitor = new IGVShapeVisitor(printer); for (ShapeImpl shape : getAllShapes()) { if (isRootShape(shape)) { printer.beginGraph(getId(shape) + " (" + calcShapeGraphSize(shape) + ") (" + shape.getObjectType() + ")"); visitor.visitShape(shape); printer.endGraph(); } } printer.beginGraph("all shapes"); for (ShapeImpl shape : getAllShapes()) { if (isRootShape(shape)) { visitor.visitShape(shape); } } printer.endGraph(); printer.endGroup(); printer.printToNetwork(false); }
/** @since 0.8 or earlier */ public GraphPrintVisitor visit(Object node) { if (openGraphCount == 0) { beginGraph(DEFAULT_GRAPH_NAME); } // if node is visited once again, skip if (getElementByObject(node) != null) { return this; } // respect node's custom handler if (!TruffleOptions.AOT && NodeUtil.findAnnotation(node.getClass(), CustomGraphPrintHandler.class) != null) { visit(node, createGraphPrintHandlerFromClass(NodeUtil.findAnnotation(node.getClass(), CustomGraphPrintHandler.class).handler())); } else if (NodeUtil.findAnnotation(node.getClass(), NullGraphPrintHandler.class) != null) { // ignore } else { visit(node, new DefaultGraphPrintHandler()); } return this; }
private void readNodeProperties(Node node) { NodeClass nodeClass = NodeClass.get(node); for (Object field : nodeClass.getNodeFields()) { if (isDataField(nodeClass, field)) { String key = nodeClass.getFieldName(field); if (!getElementByObject(node).getProperties().containsKey(key)) { Object value = nodeClass.getFieldValue(field, node); setNodeProperty(node, key, value); } } } }
/** @since 0.8 or earlier */ public boolean visited(Object node) { return GraphPrintVisitor.this.getElementByObject(node) != null; } }
public void setNodeProperty(Object node, String propertyName, Object value) { GraphPrintVisitor.this.setNodeProperty(node, propertyName, value); } }
protected void setNodeProperty(Object node, String propertyName, Object value) { Element nodeElem = getElementByObject(node); Element propElem = getPropertyElement(node, propertyName); // if property exists, replace // its value if (null == propElem) { // if property doesn't exist, create one propElem = dom.createElement("p"); propElem.setAttribute("name", propertyName); nodeElem.getElementsByTagName("properties").item(0).appendChild(propElem); } propElem.setTextContent(String.valueOf(value)); }
private String oldOrNextId(Object node) { if (null != prevNodeMap && prevNodeMap.containsKey(node)) { Element nodeElem = prevNodeMap.get(node); return nodeElem.getAttribute("id"); } else { return nextId(); } }
private void readNodeProperties(Node node) { NodeFieldAccessor[] fields = node.getNodeClass().getFields(); for (NodeFieldAccessor field : fields) { if (field.getKind() == NodeFieldKind.DATA) { String key = field.getName(); if (getPropertyElement(node, key) == null) { Object value = field.loadValue(node); setNodeProperty(node, key, value); } } } }
/** @since 0.8 or earlier */ public GraphPrintVisitor visit(Object node, GraphPrintHandler handler) { if (openGraphCount == 0) { beginGraph(DEFAULT_GRAPH_NAME); } handler.visit(node, new GraphPrintAdapter()); return this; }
public GraphPrintVisitor beginGraph(String graphName) { if (null == groupElement) { beginGroup(""); } else if (null != prevNodeMap) { // TODO: difference (create removeNode,removeEdge elements) } graphElement = dom.createElement("graph"); groupElement.appendChild(graphElement); Element properties = dom.createElement("properties"); graphElement.appendChild(properties); nodesElement = dom.createElement("nodes"); graphElement.appendChild(nodesElement); edgesElement = dom.createElement("edges"); graphElement.appendChild(edgesElement); // set graph name Element propName = dom.createElement("p"); propName.setAttribute("name", "name"); propName.setTextContent(graphName); properties.appendChild(propName); // save old nodes prevNodeMap = nodeMap; nodeMap = new IdentityHashMap<>(); edgeList = new ArrayList<>(); return this; }
final void createElementForNode(Object node) { boolean exists = nodeMap.containsKey(node); if (!exists) { int nodeId = !exists ? oldOrNextId(node) : nextId(); nodeMap.put(node, new NodeElement(nodeId)); String className = NodeUtil.className(node.getClass()); setNodeProperty(node, "name", dropNodeSuffix(className)); NodeInfo nodeInfo = node.getClass().getAnnotation(NodeInfo.class); if (nodeInfo != null) { setNodeProperty(node, "cost", nodeInfo.cost()); if (!nodeInfo.shortName().isEmpty()) { setNodeProperty(node, "shortName", nodeInfo.shortName()); } } setNodeProperty(node, "class", className); if (node instanceof Node) { readNodeProperties((Node) node); copyDebugProperties((Node) node); } } }
private static void dumpIGV() { com.oracle.truffle.api.nodes.GraphPrintVisitor printer = new com.oracle.truffle.api.nodes.GraphPrintVisitor(); printer.beginGroup("shapes"); IGVShapeVisitor visitor = new IGVShapeVisitor(printer); for (ShapeImpl shape : getAllShapes()) { if (isRootShape(shape)) { printer.beginGraph(getId(shape) + " (" + calcShapeGraphSize(shape) + ") (" + shape.getObjectType() + ")"); visitor.visitShape(shape); printer.endGraph(); } } printer.beginGraph("all shapes"); for (ShapeImpl shape : getAllShapes()) { if (isRootShape(shape)) { visitor.visitShape(shape); } } printer.endGraph(); printer.endGroup(); printer.printToNetwork(false); }
/** @since 0.8 or earlier */ public GraphPrintVisitor visit(Object node) { if (openGraphCount == 0) { beginGraph(DEFAULT_GRAPH_NAME); } // if node is visited once again, skip if (getElementByObject(node) != null) { return this; } // respect node's custom handler if (!TruffleOptions.AOT && NodeUtil.findAnnotation(node.getClass(), CustomGraphPrintHandler.class) != null) { visit(node, createGraphPrintHandlerFromClass(NodeUtil.findAnnotation(node.getClass(), CustomGraphPrintHandler.class).handler())); } else if (NodeUtil.findAnnotation(node.getClass(), NullGraphPrintHandler.class) != null) { // ignore } else { visit(node, new DefaultGraphPrintHandler()); } return this; }
private void readNodeProperties(Node node) { NodeClass nodeClass = NodeClass.get(node); for (Object field : nodeClass.getNodeFields()) { if (isDataField(nodeClass, field)) { String key = nodeClass.getFieldName(field); if (!getElementByObject(node).getProperties().containsKey(key)) { Object value = nodeClass.getFieldValue(field, node); setNodeProperty(node, key, value); } } } }
/** @since 0.8 or earlier */ public boolean visited(Object node) { return GraphPrintVisitor.this.getElementByObject(node) != null; } }