Mercurial > hg > truffle
diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java @ 18332:65a160d9d259
Truffle: add NodeInterface and require that all child fields be of this type
author | Andreas Woess <andreas.woess@jku.at> |
---|---|
date | Mon, 10 Nov 2014 19:29:08 +0100 |
parents | c88ab4f1f04a |
children | e3c95cbbb50c |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java Mon Nov 10 19:08:52 2014 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java Mon Nov 10 19:29:08 2014 +0100 @@ -224,9 +224,13 @@ this.clazz = clazz; } + private static boolean isNodeType(Class<?> clazz) { + return Node.class.isAssignableFrom(clazz) || (clazz.isInterface() && NodeInterface.class.isAssignableFrom(clazz)); + } + private static void checkChildField(Field field) { - if (!(Node.class.isAssignableFrom(field.getType()) || field.getType().isInterface())) { - throw new AssertionError("@Child field type must be a subclass of Node or an interface (" + field + ")"); + if (!isNodeType(field.getType())) { + throw new AssertionError("@Child field type must be a subclass of Node or an interface extending NodeInterface (" + field + ")"); } if (Modifier.isFinal(field.getModifiers())) { throw new AssertionError("@Child field must not be final (" + field + ")"); @@ -234,8 +238,8 @@ } private static void checkChildrenField(Field field) { - if (!(field.getType().isArray() && (Node.class.isAssignableFrom(field.getType().getComponentType()) || field.getType().getComponentType().isInterface()))) { - throw new AssertionError("@Children field type must be an array of a subclass of Node or an interface (" + field + ")"); + if (!(field.getType().isArray() && isNodeType(field.getType().getComponentType()))) { + throw new AssertionError("@Children field type must be an array of a subclass of Node or an interface extending NodeInterface (" + field + ")"); } if (!Modifier.isFinal(field.getModifiers())) { throw new AssertionError("@Children field must be final (" + field + ")");