changeset 22328:d376969da381

GraphPrintVisitor: subgroup support
author Andreas Woess <andreas.woess@oracle.com>
date Mon, 19 Oct 2015 18:28:41 +0200
parents 4a43dc00a654
children 0981139c6a29
files truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java
diffstat 1 files changed, 25 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java	Mon Oct 26 14:07:38 2015 +0100
+++ b/truffle/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java	Mon Oct 19 18:28:41 2015 +0200
@@ -24,7 +24,6 @@
  */
 package com.oracle.truffle.api.nodes;
 
-import com.oracle.truffle.api.nodes.NodeFieldAccessor.NodeFieldKind;
 import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -36,11 +35,14 @@
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 import java.net.Socket;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
+import java.util.Deque;
 import java.util.IdentityHashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -50,10 +52,13 @@
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
+
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
+import com.oracle.truffle.api.nodes.NodeFieldAccessor.NodeFieldKind;
+
 /**
  * Utility class for creating output for the ideal graph visualizer.
  */
@@ -68,10 +73,10 @@
     private Map<Object, Element> prevNodeMap;
     private int id;
     private Element graphDocument;
-    private Element groupElement;
     private Element graphElement;
     private Element nodesElement;
     private Element edgesElement;
+    private Deque<Element> groupElementStack;
 
     public GraphPrintVisitor() {
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
@@ -85,11 +90,16 @@
 
         graphDocument = dom.createElement("graphDocument");
         dom.appendChild(graphDocument);
+        groupElementStack = new ArrayDeque<>();
     }
 
     public GraphPrintVisitor beginGroup(String groupName) {
-        groupElement = dom.createElement("group");
-        graphDocument.appendChild(groupElement);
+        Element parent = groupElement() != null ? groupElement() : graphDocument;
+
+        Element groupElement = dom.createElement("group");
+        groupElementStack.push(groupElement);
+        parent.appendChild(groupElement);
+
         Element properties = dom.createElement("properties");
         groupElement.appendChild(properties);
 
@@ -108,15 +118,20 @@
         return this;
     }
 
+    public GraphPrintVisitor endGroup() {
+        groupElementStack.pop();
+        return this;
+    }
+
     public GraphPrintVisitor beginGraph(String graphName) {
-        if (null == groupElement) {
+        if (null == groupElement()) {
             beginGroup("");
         } else if (null != prevNodeMap) {
             // TODO: difference (create removeNode,removeEdge elements)
         }
 
         graphElement = dom.createElement("graph");
-        groupElement.appendChild(graphElement);
+        groupElement().appendChild(graphElement);
         Element properties = dom.createElement("properties");
         graphElement.appendChild(properties);
         nodesElement = dom.createElement("nodes");
@@ -138,6 +153,10 @@
         return this;
     }
 
+    private Element groupElement() {
+        return groupElementStack.peek();
+    }
+
     @Override
     public String toString() {
         if (null != dom) {