changeset 19471:880717e44675

Use typed NodeClass in node constructors.
author Roland Schatz <roland.schatz@oracle.com>
date Wed, 18 Feb 2015 12:12:26 +0100
parents d216de21bfe8
children b7c9c23f7205
files graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest2.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ArrayRangeWriteBarrier.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizingStubCall.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PostWriteBarrier.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SerialWriteBarrier.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrier.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractDeoptimizeNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractEndNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractLocalNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMemoryCheckpoint.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMergeNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractStateSplit.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginStateSplitNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryOpLogicNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/CallTargetNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ControlSinkNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ControlSplitNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizingFixedWithNextNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DispatchBeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedWithNextNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FloatingAnchoredNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FloatingGuardedNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoweredCallTargetNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnaryOpLogicNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValuePhiNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FixedBinaryNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatingNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ShiftNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SubNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnaryArithmeticNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnaryNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AbstractWriteNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ArrayRangeWriteNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedAccessNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatableAccessNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingAccessNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LocationNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewObjectNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessIndexedNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessMonitorNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorIdNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/EscapeObjectState.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicArrayCopyNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroStateSplitNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/PureFunctionMacroNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerExactArithmeticSplitNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/NeverPartOfCompilationNode.java
diffstat 84 files changed, 112 insertions(+), 108 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest2.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest2.java	Wed Feb 18 12:12:26 2015 +0100
@@ -41,7 +41,7 @@
             this(TYPE, name);
         }
 
-        protected NodeA(NodeClass<?> c, String name) {
+        protected NodeA(NodeClass<? extends NodeA> c, String name) {
             super(c);
             this.name = name;
         }
@@ -59,7 +59,7 @@
             this(TYPE, name);
         }
 
-        protected NodeB(NodeClass<?> c, String name) {
+        protected NodeB(NodeClass<? extends NodeB> c, String name) {
             super(c, name);
         }
 
@@ -73,7 +73,7 @@
             this(TYPE, name);
         }
 
-        protected NodeC(NodeClass<?> c, String name) {
+        protected NodeC(NodeClass<? extends NodeC> c, String name) {
             super(c, name);
         }
 
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java	Wed Feb 18 12:12:26 2015 +0100
@@ -202,12 +202,12 @@
     int extraUsagesCount;
 
     private Node predecessor;
-    private NodeClass<?> nodeClass;
+    private NodeClass<? extends Node> nodeClass;
 
     public static final int NODE_LIST = -2;
     public static final int NOT_ITERABLE = -1;
 
-    public Node(NodeClass<?> c) {
+    public Node(NodeClass<? extends Node> c) {
         init();
         assert c.getJavaClass() == this.getClass();
         this.nodeClass = c;
@@ -507,7 +507,7 @@
         }
     }
 
-    public final NodeClass<?> getNodeClass() {
+    public final NodeClass<? extends Node> getNodeClass() {
         return nodeClass;
     }
 
@@ -749,7 +749,7 @@
      * @return the copy of this node
      */
     final Node clone(Graph into, EnumSet<Edges.Type> edgesToCopy) {
-        final NodeClass<?> nodeClassTmp = getNodeClass();
+        final NodeClass<? extends Node> nodeClassTmp = getNodeClass();
         boolean useIntoLeafNodeCache = false;
         if (into != null) {
             if (nodeClassTmp.valueNumberable() && nodeClassTmp.isLeafNode()) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ArrayRangeWriteBarrier.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ArrayRangeWriteBarrier.java	Wed Feb 18 12:12:26 2015 +0100
@@ -33,7 +33,7 @@
     @Input ValueNode startIndex;
     @Input ValueNode length;
 
-    protected ArrayRangeWriteBarrier(NodeClass<?> c, ValueNode object, ValueNode startIndex, ValueNode length) {
+    protected ArrayRangeWriteBarrier(NodeClass<? extends ArrayRangeWriteBarrier> c, ValueNode object, ValueNode startIndex, ValueNode length) {
         super(c, object, null, null, true);
         this.startIndex = startIndex;
         this.length = length;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizingStubCall.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizingStubCall.java	Wed Feb 18 12:12:26 2015 +0100
@@ -32,7 +32,7 @@
 
     public static final NodeClass<DeoptimizingStubCall> TYPE = NodeClass.get(DeoptimizingStubCall.class);
 
-    public DeoptimizingStubCall(NodeClass<?> c, Stamp stamp) {
+    public DeoptimizingStubCall(NodeClass<? extends DeoptimizingStubCall> c, Stamp stamp) {
         super(c, stamp);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PostWriteBarrier.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PostWriteBarrier.java	Wed Feb 18 12:12:26 2015 +0100
@@ -37,7 +37,7 @@
         this(TYPE, object, value, location, precise, alwaysNull);
     }
 
-    protected G1PostWriteBarrier(NodeClass<?> c, ValueNode object, ValueNode value, LocationNode location, boolean precise, boolean alwaysNull) {
+    protected G1PostWriteBarrier(NodeClass<? extends G1PostWriteBarrier> c, ValueNode object, ValueNode value, LocationNode location, boolean precise, boolean alwaysNull) {
         super(c, object, value, location, precise);
         this.alwaysNull = alwaysNull;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SerialWriteBarrier.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SerialWriteBarrier.java	Wed Feb 18 12:12:26 2015 +0100
@@ -37,7 +37,7 @@
         this(TYPE, object, location, precise, alwaysNull);
     }
 
-    protected SerialWriteBarrier(NodeClass<?> c, ValueNode object, LocationNode location, boolean precise, boolean alwaysNull) {
+    protected SerialWriteBarrier(NodeClass<? extends SerialWriteBarrier> c, ValueNode object, LocationNode location, boolean precise, boolean alwaysNull) {
         super(c, object, null, location, precise);
         this.alwaysNull = alwaysNull;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrier.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrier.java	Wed Feb 18 12:12:26 2015 +0100
@@ -38,7 +38,7 @@
     @OptionalInput(InputType.Association) protected LocationNode location;
     protected final boolean precise;
 
-    protected WriteBarrier(NodeClass<?> c, ValueNode object, ValueNode value, LocationNode location, boolean precise) {
+    protected WriteBarrier(NodeClass<? extends WriteBarrier> c, ValueNode object, ValueNode value, LocationNode location, boolean precise) {
         super(c, StampFactory.forVoid());
         this.object = object;
         this.value = value;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -40,11 +40,11 @@
 
     public static final NodeClass<AbstractBeginNode> TYPE = NodeClass.get(AbstractBeginNode.class);
 
-    protected AbstractBeginNode(NodeClass<?> c) {
+    protected AbstractBeginNode(NodeClass<? extends AbstractBeginNode> c) {
         this(c, StampFactory.forVoid());
     }
 
-    protected AbstractBeginNode(NodeClass<?> c, Stamp stamp) {
+    protected AbstractBeginNode(NodeClass<? extends AbstractBeginNode> c, Stamp stamp) {
         super(c, stamp);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractDeoptimizeNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractDeoptimizeNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -39,7 +39,7 @@
     public static final NodeClass<AbstractDeoptimizeNode> TYPE = NodeClass.get(AbstractDeoptimizeNode.class);
     @OptionalInput(InputType.State) FrameState stateBefore;
 
-    protected AbstractDeoptimizeNode(NodeClass<?> c, FrameState stateBefore) {
+    protected AbstractDeoptimizeNode(NodeClass<? extends AbstractDeoptimizeNode> c, FrameState stateBefore) {
         super(c, StampFactory.forVoid());
         this.stateBefore = stateBefore;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractEndNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractEndNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -34,7 +34,7 @@
 
     public static final NodeClass<AbstractEndNode> TYPE = NodeClass.get(AbstractEndNode.class);
 
-    protected AbstractEndNode(NodeClass<?> c) {
+    protected AbstractEndNode(NodeClass<? extends AbstractEndNode> c) {
         super(c, StampFactory.forVoid());
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -48,7 +48,7 @@
         condition = x;
     }
 
-    protected AbstractFixedGuardNode(NodeClass<?> c, LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action, boolean negated) {
+    protected AbstractFixedGuardNode(NodeClass<? extends AbstractFixedGuardNode> c, LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action, boolean negated) {
         super(c, StampFactory.forVoid());
         this.action = action;
         this.negated = negated;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractLocalNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractLocalNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -33,7 +33,7 @@
     public static final NodeClass<AbstractLocalNode> TYPE = NodeClass.get(AbstractLocalNode.class);
     protected final int index;
 
-    protected AbstractLocalNode(NodeClass<?> c, int index, Stamp stamp) {
+    protected AbstractLocalNode(NodeClass<? extends AbstractLocalNode> c, int index, Stamp stamp) {
         super(c, stamp);
         this.index = index;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMemoryCheckpoint.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMemoryCheckpoint.java	Wed Feb 18 12:12:26 2015 +0100
@@ -35,11 +35,11 @@
 
     public static final NodeClass<AbstractMemoryCheckpoint> TYPE = NodeClass.get(AbstractMemoryCheckpoint.class);
 
-    protected AbstractMemoryCheckpoint(NodeClass<?> c, Stamp stamp) {
+    protected AbstractMemoryCheckpoint(NodeClass<? extends AbstractMemoryCheckpoint> c, Stamp stamp) {
         this(c, stamp, null);
     }
 
-    protected AbstractMemoryCheckpoint(NodeClass<?> c, Stamp stamp, FrameState stateAfter) {
+    protected AbstractMemoryCheckpoint(NodeClass<? extends AbstractMemoryCheckpoint> c, Stamp stamp, FrameState stateAfter) {
         super(c, stamp, stateAfter);
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMergeNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMergeNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -41,7 +41,7 @@
 public abstract class AbstractMergeNode extends BeginStateSplitNode implements IterableNodeType, LIRLowerable {
     public static final NodeClass<AbstractMergeNode> TYPE = NodeClass.get(AbstractMergeNode.class);
 
-    protected AbstractMergeNode(NodeClass<?> c) {
+    protected AbstractMergeNode(NodeClass<? extends AbstractMergeNode> c) {
         super(c);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractStateSplit.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractStateSplit.java	Wed Feb 18 12:12:26 2015 +0100
@@ -49,11 +49,11 @@
         return true;
     }
 
-    protected AbstractStateSplit(NodeClass<?> c, Stamp stamp) {
+    protected AbstractStateSplit(NodeClass<? extends AbstractStateSplit> c, Stamp stamp) {
         this(c, stamp, null);
     }
 
-    protected AbstractStateSplit(NodeClass<?> c, Stamp stamp, FrameState stateAfter) {
+    protected AbstractStateSplit(NodeClass<? extends AbstractStateSplit> c, Stamp stamp, FrameState stateAfter) {
         super(c, stamp);
         this.stateAfter = stateAfter;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginStateSplitNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginStateSplitNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -39,11 +39,11 @@
     public static final NodeClass<BeginStateSplitNode> TYPE = NodeClass.get(BeginStateSplitNode.class);
     @OptionalInput(InputType.State) protected FrameState stateAfter;
 
-    protected BeginStateSplitNode(NodeClass<?> c) {
+    protected BeginStateSplitNode(NodeClass<? extends BeginStateSplitNode> c) {
         super(c);
     }
 
-    protected BeginStateSplitNode(NodeClass<?> c, Stamp stamp) {
+    protected BeginStateSplitNode(NodeClass<? extends BeginStateSplitNode> c, Stamp stamp) {
         super(c, stamp);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryOpLogicNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryOpLogicNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -42,7 +42,7 @@
         return y;
     }
 
-    public BinaryOpLogicNode(NodeClass<?> c, ValueNode x, ValueNode y) {
+    public BinaryOpLogicNode(NodeClass<? extends BinaryOpLogicNode> c, ValueNode x, ValueNode y) {
         super(c);
         assert x != null && y != null && x.getKind() == y.getKind();
         this.x = x;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/CallTargetNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/CallTargetNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -67,14 +67,14 @@
     protected ResolvedJavaMethod targetMethod;
     protected InvokeKind invokeKind;
 
-    protected CallTargetNode(NodeClass<?> c, ValueNode[] arguments, ResolvedJavaMethod targetMethod, InvokeKind invokeKind) {
+    protected CallTargetNode(NodeClass<? extends CallTargetNode> c, ValueNode[] arguments, ResolvedJavaMethod targetMethod, InvokeKind invokeKind) {
         super(c, StampFactory.forVoid());
         this.targetMethod = targetMethod;
         this.invokeKind = invokeKind;
         this.arguments = new NodeInputList<>(this, arguments);
     }
 
-    protected CallTargetNode(NodeClass<?> c, List<ValueNode> arguments, ResolvedJavaMethod targetMethod, InvokeKind invokeKind) {
+    protected CallTargetNode(NodeClass<? extends CallTargetNode> c, List<ValueNode> arguments, ResolvedJavaMethod targetMethod, InvokeKind invokeKind) {
         super(c, StampFactory.forVoid());
         this.targetMethod = targetMethod;
         this.invokeKind = invokeKind;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ControlSinkNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ControlSinkNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -30,7 +30,7 @@
 public abstract class ControlSinkNode extends FixedNode {
     public static final NodeClass<ControlSinkNode> TYPE = NodeClass.get(ControlSinkNode.class);
 
-    protected ControlSinkNode(NodeClass<?> c, Stamp stamp) {
+    protected ControlSinkNode(NodeClass<? extends ControlSinkNode> c, Stamp stamp) {
         super(c, stamp);
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ControlSplitNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ControlSplitNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -34,7 +34,7 @@
 public abstract class ControlSplitNode extends FixedNode implements IterableNodeType {
     public static final NodeClass<ControlSplitNode> TYPE = NodeClass.get(ControlSplitNode.class);
 
-    protected ControlSplitNode(NodeClass<?> c, Stamp stamp) {
+    protected ControlSplitNode(NodeClass<? extends ControlSplitNode> c, Stamp stamp) {
         super(c, stamp);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizingFixedWithNextNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizingFixedWithNextNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -32,11 +32,11 @@
     public static final NodeClass<DeoptimizingFixedWithNextNode> TYPE = NodeClass.get(DeoptimizingFixedWithNextNode.class);
     @OptionalInput(InputType.State) protected FrameState stateBefore;
 
-    protected DeoptimizingFixedWithNextNode(NodeClass<?> c, Stamp stamp) {
+    protected DeoptimizingFixedWithNextNode(NodeClass<? extends DeoptimizingFixedWithNextNode> c, Stamp stamp) {
         super(c, stamp);
     }
 
-    protected DeoptimizingFixedWithNextNode(NodeClass<?> c, Stamp stamp, FrameState stateBefore) {
+    protected DeoptimizingFixedWithNextNode(NodeClass<? extends DeoptimizingFixedWithNextNode> c, Stamp stamp, FrameState stateBefore) {
         super(c, stamp);
         this.stateBefore = stateBefore;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -35,7 +35,8 @@
 
     public static final NodeClass<DirectCallTargetNode> TYPE = NodeClass.get(DirectCallTargetNode.class);
 
-    protected DirectCallTargetNode(NodeClass<?> c, List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, InvokeKind invokeKind) {
+    protected DirectCallTargetNode(NodeClass<? extends DirectCallTargetNode> c, List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target,
+                    CallingConvention.Type callType, InvokeKind invokeKind) {
         super(c, arguments, returnStamp, signature, target, callType, invokeKind);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DispatchBeginNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DispatchBeginNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -38,7 +38,7 @@
         super(TYPE);
     }
 
-    protected DispatchBeginNode(NodeClass<?> c, Stamp stamp) {
+    protected DispatchBeginNode(NodeClass<? extends DispatchBeginNode> c, Stamp stamp) {
         super(c, stamp);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -30,7 +30,7 @@
 public abstract class FixedNode extends ValueNode {
     public static final NodeClass<FixedNode> TYPE = NodeClass.get(FixedNode.class);
 
-    protected FixedNode(NodeClass<?> c, Stamp stamp) {
+    protected FixedNode(NodeClass<? extends FixedNode> c, Stamp stamp) {
         super(c, stamp);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedWithNextNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedWithNextNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -45,7 +45,7 @@
         next = x;
     }
 
-    public FixedWithNextNode(NodeClass<?> c, Stamp stamp) {
+    public FixedWithNextNode(NodeClass<? extends FixedWithNextNode> c, Stamp stamp) {
         super(c, stamp);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FloatingAnchoredNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FloatingAnchoredNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -34,11 +34,11 @@
 
     @Input(InputType.Anchor) protected AnchoringNode anchor;
 
-    public FloatingAnchoredNode(NodeClass<?> c, Stamp stamp) {
+    public FloatingAnchoredNode(NodeClass<? extends FloatingAnchoredNode> c, Stamp stamp) {
         super(c, stamp);
     }
 
-    public FloatingAnchoredNode(NodeClass<?> c, Stamp stamp, AnchoringNode anchor) {
+    public FloatingAnchoredNode(NodeClass<? extends FloatingAnchoredNode> c, Stamp stamp, AnchoringNode anchor) {
         super(c, stamp);
         this.anchor = anchor;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FloatingGuardedNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FloatingGuardedNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -34,11 +34,11 @@
 
     @OptionalInput(InputType.Guard) protected GuardingNode guard;
 
-    protected FloatingGuardedNode(NodeClass<?> c, Stamp stamp) {
+    protected FloatingGuardedNode(NodeClass<? extends FloatingGuardedNode> c, Stamp stamp) {
         super(c, stamp);
     }
 
-    protected FloatingGuardedNode(NodeClass<?> c, Stamp stamp, GuardingNode guard) {
+    protected FloatingGuardedNode(NodeClass<? extends FloatingGuardedNode> c, Stamp stamp, GuardingNode guard) {
         super(c, stamp);
         this.guard = guard;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -55,7 +55,7 @@
         this(TYPE, condition, anchor, reason, action, negated, speculation);
     }
 
-    protected GuardNode(NodeClass<?> c, LogicNode condition, AnchoringNode anchor, DeoptimizationReason reason, DeoptimizationAction action, boolean negated, JavaConstant speculation) {
+    protected GuardNode(NodeClass<? extends GuardNode> c, LogicNode condition, AnchoringNode anchor, DeoptimizationReason reason, DeoptimizationAction action, boolean negated, JavaConstant speculation) {
         super(c, StampFactory.forVoid(), anchor);
         this.condition = condition;
         this.reason = reason;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -36,8 +36,8 @@
 
     @Input protected ValueNode computedAddress;
 
-    protected IndirectCallTargetNode(NodeClass<?> c, ValueNode computedAddress, List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target,
-                    CallingConvention.Type callType, InvokeKind invokeKind) {
+    protected IndirectCallTargetNode(NodeClass<? extends IndirectCallTargetNode> c, ValueNode computedAddress, List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature,
+                    ResolvedJavaMethod target, CallingConvention.Type callType, InvokeKind invokeKind) {
         super(c, arguments, returnStamp, signature, target, callType, invokeKind);
         this.computedAddress = computedAddress;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -32,7 +32,7 @@
     public static final NodeClass<InfopointNode> TYPE = NodeClass.get(InfopointNode.class);
     protected final InfopointReason reason;
 
-    public InfopointNode(NodeClass<?> c, InfopointReason reason) {
+    public InfopointNode(NodeClass<? extends InfopointNode> c, InfopointReason reason) {
         super(c, StampFactory.forVoid());
         this.reason = reason;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -34,7 +34,7 @@
 
     public static final NodeClass<LogicNode> TYPE = NodeClass.get(LogicNode.class);
 
-    public LogicNode(NodeClass<?> c) {
+    public LogicNode(NodeClass<? extends LogicNode> c) {
         super(c, StampFactory.forVoid());
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoweredCallTargetNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoweredCallTargetNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -38,8 +38,8 @@
     protected final JavaType[] signature;
     protected final CallingConvention.Type callType;
 
-    protected LoweredCallTargetNode(NodeClass<?> c, List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType,
-                    InvokeKind invokeKind) {
+    protected LoweredCallTargetNode(NodeClass<? extends LoweredCallTargetNode> c, List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target,
+                    CallingConvention.Type callType, InvokeKind invokeKind) {
         super(c, arguments, target, invokeKind);
         this.returnStamp = returnStamp;
         this.signature = signature;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -44,7 +44,7 @@
     public static final NodeClass<PhiNode> TYPE = NodeClass.get(PhiNode.class);
     @Input(InputType.Association) protected AbstractMergeNode merge;
 
-    protected PhiNode(NodeClass<?> c, Stamp stamp, AbstractMergeNode merge) {
+    protected PhiNode(NodeClass<? extends PhiNode> c, Stamp stamp, AbstractMergeNode merge) {
         super(c, stamp);
         this.merge = merge;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -52,7 +52,7 @@
         return object;
     }
 
-    protected PiNode(NodeClass<?> c, ValueNode object, Stamp stamp) {
+    protected PiNode(NodeClass<? extends PiNode> c, ValueNode object, Stamp stamp) {
         super(c, stamp, null);
         this.object = object;
         this.piStamp = stamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -39,7 +39,7 @@
     public static final NodeClass<ProxyNode> TYPE = NodeClass.get(ProxyNode.class);
     @Input(InputType.Association) AbstractBeginNode proxyPoint;
 
-    protected ProxyNode(NodeClass<?> c, Stamp stamp, AbstractBeginNode proxyPoint) {
+    protected ProxyNode(NodeClass<? extends ProxyNode> c, Stamp stamp, AbstractBeginNode proxyPoint) {
         super(c, stamp);
         assert proxyPoint != null;
         this.proxyPoint = proxyPoint;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -34,7 +34,7 @@
 public class StartNode extends BeginStateSplitNode implements MemoryCheckpoint.Single {
     public static final NodeClass<StartNode> TYPE = NodeClass.get(StartNode.class);
 
-    protected StartNode(NodeClass<?> c) {
+    protected StartNode(NodeClass<? extends StartNode> c) {
         super(c);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnaryOpLogicNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnaryOpLogicNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -37,7 +37,7 @@
         return value;
     }
 
-    public UnaryOpLogicNode(NodeClass<?> c, ValueNode value) {
+    public UnaryOpLogicNode(NodeClass<? extends UnaryOpLogicNode> c, ValueNode value) {
         super(c);
         assert value != null;
         this.value = value;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -42,7 +42,7 @@
      */
     protected Stamp stamp;
 
-    public ValueNode(NodeClass<?> c, Stamp stamp) {
+    public ValueNode(NodeClass<? extends ValueNode> c, Stamp stamp) {
         super(c);
         this.stamp = stamp;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValuePhiNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValuePhiNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -40,7 +40,7 @@
         this(TYPE, stamp, merge);
     }
 
-    protected ValuePhiNode(NodeClass<?> c, Stamp stamp, AbstractMergeNode merge) {
+    protected ValuePhiNode(NodeClass<? extends ValuePhiNode> c, Stamp stamp, AbstractMergeNode merge) {
         super(c, stamp, merge);
         assert stamp != StampFactory.forVoid();
         values = new NodeInputList<>(this);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java	Wed Feb 18 12:12:26 2015 +0100
@@ -32,7 +32,7 @@
 @NodeInfo(allowedUsageTypes = {InputType.State})
 public abstract class VirtualState extends Node {
 
-    protected VirtualState(NodeClass<?> c) {
+    protected VirtualState(NodeClass<? extends VirtualState> c) {
         super(c);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -42,7 +42,7 @@
         this(TYPE, x, y);
     }
 
-    protected AddNode(NodeClass<?> c, ValueNode x, ValueNode y) {
+    protected AddNode(NodeClass<? extends AddNode> c, ValueNode x, ValueNode y) {
         super(c, ArithmeticOpTable::getAdd, x, y);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -46,7 +46,7 @@
 
     protected final SerializableBinaryFunction<OP> getOp;
 
-    protected BinaryArithmeticNode(NodeClass<?> c, SerializableBinaryFunction<OP> getOp, ValueNode x, ValueNode y) {
+    protected BinaryArithmeticNode(NodeClass<? extends BinaryArithmeticNode<OP>> c, SerializableBinaryFunction<OP> getOp, ValueNode x, ValueNode y) {
         super(c, getOp.apply(ArithmeticOpTable.forStamp(x.stamp())).foldStamp(x.stamp(), y.stamp()), x, y);
         this.getOp = getOp;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -63,7 +63,7 @@
      * @param x the first input instruction
      * @param y the second input instruction
      */
-    protected BinaryNode(NodeClass<?> c, Stamp stamp, ValueNode x, ValueNode y) {
+    protected BinaryNode(NodeClass<? extends BinaryNode> c, Stamp stamp, ValueNode x, ValueNode y) {
         super(c, stamp);
         this.x = x;
         this.y = y;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -50,7 +50,7 @@
      * @param x the instruction producing the first input to the instruction
      * @param y the instruction that produces the second input to this instruction
      */
-    protected CompareNode(NodeClass<?> c, Condition condition, boolean unorderedIsTrue, ValueNode x, ValueNode y) {
+    protected CompareNode(NodeClass<? extends CompareNode> c, Condition condition, boolean unorderedIsTrue, ValueNode x, ValueNode y) {
         super(c, x, y);
         this.condition = condition;
         this.unorderedIsTrue = unorderedIsTrue;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FixedBinaryNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FixedBinaryNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -35,7 +35,7 @@
     @Input protected ValueNode x;
     @Input protected ValueNode y;
 
-    public FixedBinaryNode(NodeClass<?> c, Stamp stamp, ValueNode x, ValueNode y) {
+    public FixedBinaryNode(NodeClass<? extends FixedBinaryNode> c, Stamp stamp, ValueNode x, ValueNode y) {
         super(c, stamp);
         this.x = x;
         this.y = y;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatingNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatingNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -31,7 +31,7 @@
 public abstract class FloatingNode extends ValueNode implements Node.ValueNumberable {
     public static final NodeClass<FloatingNode> TYPE = NodeClass.get(FloatingNode.class);
 
-    public FloatingNode(NodeClass<?> c, Stamp stamp) {
+    public FloatingNode(NodeClass<? extends FloatingNode> c, Stamp stamp) {
         super(c, stamp);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -50,7 +50,8 @@
     protected interface SerializableIntegerConvertFunction<T> extends Function<ArithmeticOpTable, IntegerConvertOp<T>>, Serializable {
     }
 
-    protected IntegerConvertNode(NodeClass<?> c, SerializableIntegerConvertFunction<OP> getOp, SerializableIntegerConvertFunction<REV> getReverseOp, int inputBits, int resultBits, ValueNode input) {
+    protected IntegerConvertNode(NodeClass<? extends IntegerConvertNode<OP, REV>> c, SerializableIntegerConvertFunction<OP> getOp, SerializableIntegerConvertFunction<REV> getReverseOp, int inputBits,
+                    int resultBits, ValueNode input) {
         super(c, getOp.apply(ArithmeticOpTable.forStamp(input.stamp())).foldStamp(inputBits, resultBits, input.stamp()), input);
         this.getOp = getOp;
         this.getReverseOp = getReverseOp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -43,7 +43,7 @@
         this(TYPE, x, y);
     }
 
-    protected MulNode(NodeClass<?> c, ValueNode x, ValueNode y) {
+    protected MulNode(NodeClass<? extends MulNode> c, ValueNode x, ValueNode y) {
         super(c, ArithmeticOpTable::getMul, x, y);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -39,7 +39,7 @@
         this(TYPE, x, y);
     }
 
-    protected PointerEqualsNode(NodeClass<?> c, ValueNode x, ValueNode y) {
+    protected PointerEqualsNode(NodeClass<? extends PointerEqualsNode> c, ValueNode x, ValueNode y) {
         super(c, Condition.EQ, false, x, y);
         assert x.stamp() instanceof AbstractPointerStamp;
         assert y.stamp() instanceof AbstractPointerStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ShiftNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ShiftNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -53,7 +53,7 @@
      * @param x the first input value
      * @param s the second input value
      */
-    protected ShiftNode(NodeClass<?> c, SerializableShiftFunction<OP> getOp, ValueNode x, ValueNode s) {
+    protected ShiftNode(NodeClass<? extends ShiftNode<OP>> c, SerializableShiftFunction<OP> getOp, ValueNode x, ValueNode s) {
         super(c, getOp.apply(ArithmeticOpTable.forStamp(x.stamp())).foldStamp(x.stamp(), (IntegerStamp) s.stamp()), x, s);
         assert ((IntegerStamp) s.stamp()).getBits() == 32;
         this.getOp = getOp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SubNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SubNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -43,7 +43,7 @@
         this(TYPE, x, y);
     }
 
-    protected SubNode(NodeClass<?> c, ValueNode x, ValueNode y) {
+    protected SubNode(NodeClass<? extends SubNode> c, ValueNode x, ValueNode y) {
         super(c, ArithmeticOpTable::getSub, x, y);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnaryArithmeticNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnaryArithmeticNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -43,7 +43,7 @@
 
     protected final SerializableUnaryFunction<OP> getOp;
 
-    protected UnaryArithmeticNode(NodeClass<?> c, SerializableUnaryFunction<OP> getOp, ValueNode value) {
+    protected UnaryArithmeticNode(NodeClass<? extends UnaryArithmeticNode<OP>> c, SerializableUnaryFunction<OP> getOp, ValueNode value) {
         super(c, getOp.apply(ArithmeticOpTable.forStamp(value.stamp())).foldStamp(value.stamp()), value);
         this.getOp = getOp;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnaryNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnaryNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -48,7 +48,7 @@
      * @param stamp the result type of this instruction
      * @param value the input instruction
      */
-    protected UnaryNode(NodeClass<?> c, Stamp stamp, ValueNode value) {
+    protected UnaryNode(NodeClass<? extends UnaryNode> c, Stamp stamp, ValueNode value) {
         super(c, stamp);
         this.value = value;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -50,7 +50,7 @@
         this(TYPE, name, group, increment, withContext);
     }
 
-    protected DynamicCounterNode(NodeClass<?> c, String name, String group, ValueNode increment, boolean withContext) {
+    protected DynamicCounterNode(NodeClass<? extends DynamicCounterNode> c, String name, String group, ValueNode increment, boolean withContext) {
         super(c, StampFactory.forVoid());
         this.name = name;
         this.group = group;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AbstractWriteNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AbstractWriteNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -65,17 +65,17 @@
         return initialization;
     }
 
-    protected AbstractWriteNode(NodeClass<?> c, ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType) {
+    protected AbstractWriteNode(NodeClass<? extends AbstractWriteNode> c, ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType) {
         this(c, object, value, location, barrierType, false);
     }
 
-    protected AbstractWriteNode(NodeClass<?> c, ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, boolean initialization) {
+    protected AbstractWriteNode(NodeClass<? extends AbstractWriteNode> c, ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, boolean initialization) {
         super(c, object, location, StampFactory.forVoid(), barrierType);
         this.value = value;
         this.initialization = initialization;
     }
 
-    protected AbstractWriteNode(NodeClass<?> c, ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, GuardingNode guard, boolean initialization) {
+    protected AbstractWriteNode(NodeClass<? extends AbstractWriteNode> c, ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, GuardingNode guard, boolean initialization) {
         super(c, object, location, StampFactory.forVoid(), guard, barrierType, false, null);
         this.value = value;
         this.initialization = initialization;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ArrayRangeWriteNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ArrayRangeWriteNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -35,7 +35,7 @@
 
     public static final NodeClass<ArrayRangeWriteNode> TYPE = NodeClass.get(ArrayRangeWriteNode.class);
 
-    protected ArrayRangeWriteNode(NodeClass<?> c, Stamp stamp) {
+    protected ArrayRangeWriteNode(NodeClass<? extends ArrayRangeWriteNode> c, Stamp stamp) {
         super(c, stamp);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedAccessNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedAccessNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -66,15 +66,16 @@
         this.nullCheck = check;
     }
 
-    protected FixedAccessNode(NodeClass<?> c, ValueNode object, ValueNode location, Stamp stamp) {
+    protected FixedAccessNode(NodeClass<? extends FixedAccessNode> c, ValueNode object, ValueNode location, Stamp stamp) {
         this(c, object, location, stamp, BarrierType.NONE);
     }
 
-    protected FixedAccessNode(NodeClass<?> c, ValueNode object, ValueNode location, Stamp stamp, BarrierType barrierType) {
+    protected FixedAccessNode(NodeClass<? extends FixedAccessNode> c, ValueNode object, ValueNode location, Stamp stamp, BarrierType barrierType) {
         this(c, object, location, stamp, null, barrierType, false, null);
     }
 
-    protected FixedAccessNode(NodeClass<?> c, ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType, boolean nullCheck, FrameState stateBefore) {
+    protected FixedAccessNode(NodeClass<? extends FixedAccessNode> c, ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType, boolean nullCheck,
+                    FrameState stateBefore) {
         super(c, stamp, stateBefore);
         this.object = object;
         this.location = location;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatableAccessNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatableAccessNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -35,15 +35,16 @@
 public abstract class FloatableAccessNode extends FixedAccessNode {
     public static final NodeClass<FloatableAccessNode> TYPE = NodeClass.get(FloatableAccessNode.class);
 
-    protected FloatableAccessNode(NodeClass<?> c, ValueNode object, ValueNode location, Stamp stamp) {
+    protected FloatableAccessNode(NodeClass<? extends FloatableAccessNode> c, ValueNode object, ValueNode location, Stamp stamp) {
         super(c, object, location, stamp);
     }
 
-    protected FloatableAccessNode(NodeClass<?> c, ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType) {
+    protected FloatableAccessNode(NodeClass<? extends FloatableAccessNode> c, ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType) {
         super(c, object, location, stamp, guard, barrierType, false, null);
     }
 
-    protected FloatableAccessNode(NodeClass<?> c, ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType, boolean nullCheck, FrameState stateBefore) {
+    protected FloatableAccessNode(NodeClass<? extends FloatableAccessNode> c, ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType, boolean nullCheck,
+                    FrameState stateBefore) {
         super(c, object, location, stamp, guard, barrierType, nullCheck, stateBefore);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingAccessNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingAccessNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -52,13 +52,13 @@
         return location.getLocationIdentity();
     }
 
-    protected FloatingAccessNode(NodeClass<?> c, ValueNode object, LocationNode location, Stamp stamp) {
+    protected FloatingAccessNode(NodeClass<? extends FloatingAccessNode> c, ValueNode object, LocationNode location, Stamp stamp) {
         super(c, stamp);
         this.object = object;
         this.location = location;
     }
 
-    protected FloatingAccessNode(NodeClass<?> c, ValueNode object, LocationNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType) {
+    protected FloatingAccessNode(NodeClass<? extends FloatingAccessNode> c, ValueNode object, LocationNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType) {
         super(c, stamp, guard);
         this.object = object;
         this.location = location;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -64,7 +64,7 @@
         this.foreignCalls = foreignCalls;
     }
 
-    protected ForeignCallNode(NodeClass<?> c, ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, Stamp stamp) {
+    protected ForeignCallNode(NodeClass<? extends ForeignCallNode> c, ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, Stamp stamp) {
         super(c, stamp);
         this.arguments = new NodeInputList<>(this);
         this.descriptor = descriptor;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LocationNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LocationNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -47,7 +47,7 @@
     public interface Location {
     }
 
-    protected LocationNode(NodeClass<?> c, Stamp stamp) {
+    protected LocationNode(NodeClass<? extends LocationNode> c, Stamp stamp) {
         super(c, stamp);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -51,7 +51,7 @@
      * @param value the instruction that provides the value to be switched over
      * @param successors the list of successors of this switch
      */
-    protected SwitchNode(NodeClass<?> c, ValueNode value, AbstractBeginNode[] successors, int[] keySuccessors, double[] keyProbabilities) {
+    protected SwitchNode(NodeClass<? extends SwitchNode> c, ValueNode value, AbstractBeginNode[] successors, int[] keySuccessors, double[] keyProbabilities) {
         super(c, StampFactory.forVoid());
         assert value.stamp().getStackKind().isNumericInteger() || value.stamp() instanceof AbstractPointerStamp : value.stamp() + " key not supported by SwitchNode";
         assert keySuccessors.length == keyProbabilities.length;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -39,7 +39,7 @@
     protected final Kind accessKind;
     protected final LocationIdentity locationIdentity;
 
-    protected UnsafeAccessNode(NodeClass<?> c, Stamp stamp, ValueNode object, ValueNode offset, Kind accessKind, LocationIdentity locationIdentity) {
+    protected UnsafeAccessNode(NodeClass<? extends UnsafeAccessNode> c, Stamp stamp, ValueNode object, ValueNode offset, Kind accessKind, LocationIdentity locationIdentity) {
         super(c, stamp);
         assert accessKind != null;
         this.object = object;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewArrayNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewArrayNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -43,7 +43,7 @@
         return length;
     }
 
-    public AbstractNewArrayNode(NodeClass<?> c, Stamp stamp, ValueNode length, boolean fillContents) {
+    public AbstractNewArrayNode(NodeClass<? extends AbstractNewArrayNode> c, Stamp stamp, ValueNode length, boolean fillContents) {
         super(c, stamp, fillContents);
         this.length = length;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewObjectNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewObjectNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -41,7 +41,7 @@
     public static final NodeClass<AbstractNewObjectNode> TYPE = NodeClass.get(AbstractNewObjectNode.class);
     protected final boolean fillContents;
 
-    public AbstractNewObjectNode(NodeClass<?> c, Stamp stamp, boolean fillContents) {
+    public AbstractNewObjectNode(NodeClass<? extends AbstractNewObjectNode> c, Stamp stamp, boolean fillContents) {
         super(c, stamp);
         this.fillContents = fillContents;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessArrayNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessArrayNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -45,7 +45,7 @@
      *
      * @param array the instruction that produces the array object value
      */
-    public AccessArrayNode(NodeClass<?> c, Stamp stamp, ValueNode array) {
+    public AccessArrayNode(NodeClass<? extends AccessArrayNode> c, Stamp stamp, ValueNode array) {
         super(c, stamp);
         this.array = array;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -50,7 +50,7 @@
      * @param object the instruction producing the receiver object
      * @param field the compiler interface representation of the field
      */
-    public AccessFieldNode(NodeClass<?> c, Stamp stamp, ValueNode object, ResolvedJavaField field) {
+    public AccessFieldNode(NodeClass<? extends AccessFieldNode> c, Stamp stamp, ValueNode object, ResolvedJavaField field) {
         super(c, stamp);
         this.object = object;
         this.field = field;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessIndexedNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessIndexedNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -52,7 +52,7 @@
      * @param index the instruction producing the index
      * @param elementKind the kind of the elements of the array
      */
-    protected AccessIndexedNode(NodeClass<?> c, Stamp stamp, ValueNode array, ValueNode index, Kind elementKind) {
+    protected AccessIndexedNode(NodeClass<? extends AccessIndexedNode> c, Stamp stamp, ValueNode array, ValueNode index, Kind elementKind) {
         super(c, stamp, array);
         this.index = index;
         this.elementKind = elementKind;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessMonitorNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessMonitorNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -71,7 +71,7 @@
      *
      * @param object the instruction producing the object
      */
-    protected AccessMonitorNode(NodeClass<?> c, ValueNode object, MonitorIdNode monitorId) {
+    protected AccessMonitorNode(NodeClass<? extends AccessMonitorNode> c, ValueNode object, MonitorIdNode monitorId) {
         super(c, StampFactory.forVoid());
         this.object = object;
         this.monitorId = monitorId;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -57,7 +57,7 @@
         this(TYPE, elementType, length, fillContents, knownElementKind);
     }
 
-    protected DynamicNewArrayNode(NodeClass<?> c, ValueNode elementType, ValueNode length, boolean fillContents, Kind knownElementKind) {
+    protected DynamicNewArrayNode(NodeClass<? extends DynamicNewArrayNode> c, ValueNode elementType, ValueNode length, boolean fillContents, Kind knownElementKind) {
         super(c, StampFactory.objectNonNull(), length, fillContents);
         this.elementType = elementType;
         this.knownElementKind = knownElementKind;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -58,7 +58,7 @@
         return new LoadIndexedNode(array, index, elementKind);
     }
 
-    protected LoadIndexedNode(NodeClass<?> c, Stamp stamp, ValueNode array, ValueNode index, Kind elementKind) {
+    protected LoadIndexedNode(NodeClass<? extends LoadIndexedNode> c, Stamp stamp, ValueNode array, ValueNode index, Kind elementKind) {
         super(c, stamp, array, index, elementKind);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -41,7 +41,7 @@
         this(TYPE, invokeKind, targetMethod, arguments, returnType);
     }
 
-    protected MethodCallTargetNode(NodeClass<?> c, InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, JavaType returnType) {
+    protected MethodCallTargetNode(NodeClass<? extends MethodCallTargetNode> c, InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, JavaType returnType) {
         super(c, arguments, targetMethod, invokeKind);
         this.returnType = returnType;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorIdNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorIdNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -43,7 +43,7 @@
         this(TYPE, lockDepth);
     }
 
-    protected MonitorIdNode(NodeClass<?> c, int lockDepth) {
+    protected MonitorIdNode(NodeClass<? extends MonitorIdNode> c, int lockDepth) {
         super(c, StampFactory.forVoid());
         this.lockDepth = lockDepth;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -47,7 +47,7 @@
         super(TYPE, StampFactory.exactNonNull(elementType.getArrayClass()), length, fillContents);
     }
 
-    protected NewArrayNode(NodeClass<?> c, ResolvedJavaType elementType, ValueNode length, boolean fillContents) {
+    protected NewArrayNode(NodeClass<? extends NewArrayNode> c, ResolvedJavaType elementType, ValueNode length, boolean fillContents) {
         super(c, StampFactory.exactNonNull(elementType.getArrayClass()), length, fillContents);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/EscapeObjectState.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/EscapeObjectState.java	Wed Feb 18 12:12:26 2015 +0100
@@ -37,7 +37,7 @@
         return object;
     }
 
-    public EscapeObjectState(NodeClass<?> c, VirtualObjectNode object) {
+    public EscapeObjectState(NodeClass<? extends EscapeObjectState> c, VirtualObjectNode object) {
         super(c);
         this.object = object;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -42,11 +42,11 @@
         this(TYPE, type, fields, hasIdentity);
     }
 
-    protected VirtualInstanceNode(NodeClass<?> c, ResolvedJavaType type, boolean hasIdentity) {
+    protected VirtualInstanceNode(NodeClass<? extends VirtualInstanceNode> c, ResolvedJavaType type, boolean hasIdentity) {
         this(c, type, type.getInstanceFields(true), hasIdentity);
     }
 
-    protected VirtualInstanceNode(NodeClass<?> c, ResolvedJavaType type, ResolvedJavaField[] fields, boolean hasIdentity) {
+    protected VirtualInstanceNode(NodeClass<? extends VirtualInstanceNode> c, ResolvedJavaType type, ResolvedJavaField[] fields, boolean hasIdentity) {
         super(c, type, hasIdentity);
         this.type = type;
         this.fields = fields;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -35,7 +35,7 @@
     public static final NodeClass<VirtualObjectNode> TYPE = NodeClass.get(VirtualObjectNode.class);
     protected boolean hasIdentity;
 
-    protected VirtualObjectNode(NodeClass<?> c, ResolvedJavaType type, boolean hasIdentity) {
+    protected VirtualObjectNode(NodeClass<? extends VirtualObjectNode> c, ResolvedJavaType type, boolean hasIdentity) {
         super(c, StampFactory.exactNonNull(type));
         this.hasIdentity = hasIdentity;
     }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicArrayCopyNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicArrayCopyNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -36,7 +36,7 @@
 
     public static final NodeClass<BasicArrayCopyNode> TYPE = NodeClass.get(BasicArrayCopyNode.class);
 
-    public BasicArrayCopyNode(NodeClass<?> c, Invoke invoke) {
+    public BasicArrayCopyNode(NodeClass<? extends BasicArrayCopyNode> c, Invoke invoke) {
         super(c, invoke);
     }
 
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -40,7 +40,7 @@
 
     public static final NodeClass<BasicObjectCloneNode> TYPE = NodeClass.get(BasicObjectCloneNode.class);
 
-    protected BasicObjectCloneNode(NodeClass<?> c, Invoke invoke) {
+    protected BasicObjectCloneNode(NodeClass<? extends BasicObjectCloneNode> c, Invoke invoke) {
         super(c, invoke);
     }
 
@@ -64,7 +64,7 @@
     /*
      * Looks at the given stamp and determines if it is an exact type (or can be assumed to be an
      * exact type) and if it is a cloneable type.
-     *
+     * 
      * If yes, then the exact type is returned, otherwise it returns null.
      */
     protected static ResolvedJavaType getConcreteType(Stamp stamp, Assumptions assumptions, MetaAccessProvider metaAccess) {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -67,7 +67,7 @@
     protected final JavaType returnType;
     protected final InvokeKind invokeKind;
 
-    protected MacroNode(NodeClass<?> c, Invoke invoke) {
+    protected MacroNode(NodeClass<? extends MacroNode> c, Invoke invoke) {
         super(c, StampFactory.forKind(((MethodCallTargetNode) invoke.callTarget()).targetMethod().getSignature().getReturnKind()));
         MethodCallTargetNode methodCallTarget = (MethodCallTargetNode) invoke.callTarget();
         this.arguments = new NodeInputList<>(this, methodCallTarget.arguments());
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroStateSplitNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroStateSplitNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -41,7 +41,7 @@
     public static final NodeClass<MacroStateSplitNode> TYPE = NodeClass.get(MacroStateSplitNode.class);
     @OptionalInput(InputType.State) protected FrameState stateAfter;
 
-    public MacroStateSplitNode(NodeClass<?> c, Invoke invoke) {
+    public MacroStateSplitNode(NodeClass<? extends MacroStateSplitNode> c, Invoke invoke) {
         super(c, invoke);
         this.stateAfter = invoke.stateAfter();
     }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/PureFunctionMacroNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/PureFunctionMacroNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -37,7 +37,7 @@
 
     public static final NodeClass<PureFunctionMacroNode> TYPE = NodeClass.get(PureFunctionMacroNode.class);
 
-    protected PureFunctionMacroNode(NodeClass<?> c, Invoke invoke) {
+    protected PureFunctionMacroNode(NodeClass<? extends PureFunctionMacroNode> c, Invoke invoke) {
         super(c, invoke);
     }
 
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerExactArithmeticSplitNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerExactArithmeticSplitNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -39,7 +39,7 @@
     @Input ValueNode x;
     @Input ValueNode y;
 
-    protected IntegerExactArithmeticSplitNode(NodeClass<?> c, Stamp stamp, ValueNode x, ValueNode y, AbstractBeginNode next, AbstractBeginNode overflowSuccessor) {
+    protected IntegerExactArithmeticSplitNode(NodeClass<? extends IntegerExactArithmeticSplitNode> c, Stamp stamp, ValueNode x, ValueNode y, AbstractBeginNode next, AbstractBeginNode overflowSuccessor) {
         super(c, stamp);
         this.x = x;
         this.y = y;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/NeverPartOfCompilationNode.java	Wed Feb 18 12:10:04 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/NeverPartOfCompilationNode.java	Wed Feb 18 12:12:26 2015 +0100
@@ -38,7 +38,7 @@
         this(TYPE, invoke, "This code path should never be part of a compilation.");
     }
 
-    protected NeverPartOfCompilationNode(NodeClass<?> c, Invoke invoke, String message) {
+    protected NeverPartOfCompilationNode(NodeClass<? extends NeverPartOfCompilationNode> c, Invoke invoke, String message) {
         super(c, invoke);
         this.message = message;
     }