# HG changeset patch # User Andreas Woess # Date 1405008509 -7200 # Node ID d41922beb512e738f430f8dd72388add26f0d3f5 # Parent 456abab80eb553242a6cd300a2d0ddf840e18fb5 Truffle: use ClassValue for NodeClass diff -r 456abab80eb5 -r d41922beb512 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java Thu Jul 10 18:08:29 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java Thu Jul 10 18:08:29 2014 +0200 @@ -157,8 +157,14 @@ * every subclass of {@link Node} that is used. */ public static final class NodeClass { - - private static final Map, NodeClass> nodeClasses = new IdentityHashMap<>(); + private static final ClassValue nodeClasses = new ClassValue() { + @SuppressWarnings("unchecked") + @Override + protected NodeClass computeValue(Class clazz) { + assert Node.class.isAssignableFrom(clazz); + return new NodeClass((Class) clazz, unsafeFieldOffsetProvider); + } + }; // The comprehensive list of all fields. private final NodeField[] fields; @@ -168,12 +174,7 @@ private final long[] childrenOffsets; public static NodeClass get(Class clazz) { - NodeClass nodeClass = nodeClasses.get(clazz); - if (nodeClass == null) { - nodeClass = new NodeClass(clazz, unsafeFieldOffsetProvider); - nodeClasses.put(clazz, nodeClass); - } - return nodeClass; + return nodeClasses.get(clazz); } public NodeClass(Class clazz, FieldOffsetProvider fieldOffsetProvider) {