Mercurial > hg > truffle
comparison 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 |
comparison
equal
deleted
inserted
replaced
18331:803b0b06e408 | 18332:65a160d9d259 |
---|---|
222 this.childOffsets = toLongArray(childOffsetsList); | 222 this.childOffsets = toLongArray(childOffsetsList); |
223 this.childrenOffsets = toLongArray(childrenOffsetsList); | 223 this.childrenOffsets = toLongArray(childrenOffsetsList); |
224 this.clazz = clazz; | 224 this.clazz = clazz; |
225 } | 225 } |
226 | 226 |
227 private static boolean isNodeType(Class<?> clazz) { | |
228 return Node.class.isAssignableFrom(clazz) || (clazz.isInterface() && NodeInterface.class.isAssignableFrom(clazz)); | |
229 } | |
230 | |
227 private static void checkChildField(Field field) { | 231 private static void checkChildField(Field field) { |
228 if (!(Node.class.isAssignableFrom(field.getType()) || field.getType().isInterface())) { | 232 if (!isNodeType(field.getType())) { |
229 throw new AssertionError("@Child field type must be a subclass of Node or an interface (" + field + ")"); | 233 throw new AssertionError("@Child field type must be a subclass of Node or an interface extending NodeInterface (" + field + ")"); |
230 } | 234 } |
231 if (Modifier.isFinal(field.getModifiers())) { | 235 if (Modifier.isFinal(field.getModifiers())) { |
232 throw new AssertionError("@Child field must not be final (" + field + ")"); | 236 throw new AssertionError("@Child field must not be final (" + field + ")"); |
233 } | 237 } |
234 } | 238 } |
235 | 239 |
236 private static void checkChildrenField(Field field) { | 240 private static void checkChildrenField(Field field) { |
237 if (!(field.getType().isArray() && (Node.class.isAssignableFrom(field.getType().getComponentType()) || field.getType().getComponentType().isInterface()))) { | 241 if (!(field.getType().isArray() && isNodeType(field.getType().getComponentType()))) { |
238 throw new AssertionError("@Children field type must be an array of a subclass of Node or an interface (" + field + ")"); | 242 throw new AssertionError("@Children field type must be an array of a subclass of Node or an interface extending NodeInterface (" + field + ")"); |
239 } | 243 } |
240 if (!Modifier.isFinal(field.getModifiers())) { | 244 if (!Modifier.isFinal(field.getModifiers())) { |
241 throw new AssertionError("@Children field must be final (" + field + ")"); | 245 throw new AssertionError("@Children field must be final (" + field + ")"); |
242 } | 246 } |
243 } | 247 } |