diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java @ 9754:98b004bf3985

Refactoring of NodeUtil to centralize the use of reflection
author Christian Wimmer <christian.wimmer@oracle.com>
date Thu, 16 May 2013 17:03:18 -0700
parents e2965e5cd474
children 29e9a5d18c70
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java	Thu May 16 23:30:04 2013 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/GraphPrintVisitor.java	Thu May 16 17:03:18 2013 -0700
@@ -24,7 +24,6 @@
 
 import java.io.*;
 import java.lang.annotation.*;
-import java.lang.reflect.*;
 import java.net.*;
 import java.util.*;
 
@@ -35,6 +34,10 @@
 
 import org.w3c.dom.*;
 
+import com.oracle.truffle.api.nodes.NodeUtil.NodeClass;
+import com.oracle.truffle.api.nodes.NodeUtil.NodeField;
+import com.oracle.truffle.api.nodes.NodeUtil.NodeFieldKind;
+
 /**
  * Utility class for creating output for the ideal graph visualizer.
  */
@@ -212,7 +215,7 @@
             setNodeProperty(node, "nodeType", (Node.class.isAssignableFrom(node.getClass()) ? Node.class.getSimpleName() : "other"));
             setNodeProperty(node, "nodeClass", node.getClass().getSimpleName());
             copyDebugProperties(node); // TODO: may overwrite property "name"? (currently allowed)
-            readNodeProperties(node);
+            readNodeProperties((Node) node);
         }
     }
 
@@ -254,23 +257,14 @@
         }
     }
 
-    private void readNodeProperties(Object node) {
-        Field[] fields = NodeUtil.getAllFields(node.getClass());
-        for (Field field : fields) {
-            if (Modifier.isStatic(field.getModifiers())) {
-                continue;
-            }
-            if (Node.class.isAssignableFrom(field.getType()) || (field.getType().getComponentType() != null && Node.class.isAssignableFrom(field.getType()))) {
-                continue;
-            }
-            String key = field.getName();
-            if (field.getAnnotation(HiddenField.class) == null && getPropertyElement(node, key) == null) {
-                try {
-                    field.setAccessible(true);
-                    Object value = field.get(node);
+    private void readNodeProperties(Node node) {
+        NodeField[] fields = NodeClass.get(node.getClass()).getFields();
+        for (NodeField 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);
-                } catch (IllegalArgumentException | IllegalAccessException e) {
-                    assert false : e;
                 }
             }
         }