Mercurial > hg > graal-jvmci-8
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; } } }