# HG changeset patch # User Roland Schatz # Date 1412584855 -7200 # Node ID da1f5b9ccac6fea84ff747b156e7cc074215fe26 # Parent a690ca62772c11a8a04df5e77caa611d27900fd5 Support private constructors on nodes. diff -r a690ca62772c -r da1f5b9ccac6 graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeGenerator.java --- a/graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeGenerator.java Mon Oct 06 09:46:27 2014 +0200 +++ b/graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeGenerator.java Mon Oct 06 10:40:55 2014 +0200 @@ -311,20 +311,28 @@ genClass = new CodeTypeElement(modifiers(FINAL), ElementKind.CLASS, packageElement, genClassName); genClass.setSuperClass(node.asType()); + boolean foundValidConstructor = false; for (ExecutableElement constructor : ElementFilter.constructorsIn(node.getEnclosedElements())) { - if (constructor.getModifiers().contains(PUBLIC)) { + if (constructor.getModifiers().contains(PRIVATE)) { + continue; + } else if (constructor.getModifiers().contains(PUBLIC)) { throw new ElementException(constructor, "Node class constructor must not be public"); } else if (!constructor.getModifiers().contains(PROTECTED)) { throw new ElementException(constructor, "Node class constructor must be protected"); } checkFactoryMethodExists(node, constructor); + foundValidConstructor = true; CodeExecutableElement subConstructor = createConstructor(genClass, constructor); subConstructor.getModifiers().removeAll(Arrays.asList(PUBLIC, PRIVATE, PROTECTED)); genClass.add(subConstructor); } + if (!foundValidConstructor) { + throw new ElementException(node, "Node class must have at least one protected constructor"); + } + if (!constructorsOnly) { DeclaredType generatedNode = (DeclaredType) getType(GeneratedNode.class); genClass.getImplements().add(generatedNode);