changeset 9716:e0b95acd24ae

add check for final-ness and visibility of @Input and @Successor fields to NodeClass
author Lukas Stadler <lukas.stadler@jku.at>
date Wed, 15 May 2013 10:43:26 +0200
parents badabdca0c53
children 6623dda5fabb
files graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java
diffstat 1 files changed, 8 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java	Wed May 15 10:43:03 2013 +0200
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java	Wed May 15 10:43:26 2013 +0200
@@ -190,9 +190,13 @@
             if (field.isAnnotationPresent(Node.Input.class)) {
                 assert !field.isAnnotationPresent(Node.Successor.class) : "field cannot be both input and successor";
                 if (INPUT_LIST_CLASS.isAssignableFrom(type)) {
+                    assert Modifier.isFinal(field.getModifiers()) : "NodeInputList input field " + field + " should be final";
+                    assert !Modifier.isPublic(field.getModifiers()) : "NodeInputList input field " + field + " should not be public";
                     inputListOffsets.add(offset);
                 } else {
                     assert NODE_CLASS.isAssignableFrom(type) || type.isInterface() : "invalid input type: " + type;
+                    assert !Modifier.isFinal(field.getModifiers()) : "Node input field " + field + " should not be final";
+                    assert Modifier.isPrivate(field.getModifiers()) : "Node input field " + field + " should be private";
                     inputOffsets.add(offset);
                 }
                 if (field.getAnnotation(Node.Input.class).notDataflow()) {
@@ -200,9 +204,13 @@
                 }
             } else if (field.isAnnotationPresent(Node.Successor.class)) {
                 if (SUCCESSOR_LIST_CLASS.isAssignableFrom(type)) {
+                    assert Modifier.isFinal(field.getModifiers()) : "NodeSuccessorList successor field " + field + " should be final";
+                    assert !Modifier.isPublic(field.getModifiers()) : "NodeSuccessorList successor field " + field + " should not be public";
                     successorListOffsets.add(offset);
                 } else {
                     assert NODE_CLASS.isAssignableFrom(type) : "invalid successor type: " + type;
+                    assert !Modifier.isFinal(field.getModifiers()) : "Node successor field " + field + " should not be final";
+                    assert Modifier.isPrivate(field.getModifiers()) : "Node successor field " + field + " should be private";
                     successorOffsets.add(offset);
                 }
             } else {