# HG changeset patch # User Christian Humer # Date 1420485802 -3600 # Node ID f4d78e4a878d0a3e9bfb176816413149558b7b58 # Parent 7ea9a39bd7cc537599571298ad4797ff3166b5c2 Truffle-DSL: fixed create method should have the same visibility as its originating constructor. (GRAAL-365 #resolve) diff -r 7ea9a39bd7cc -r f4d78e4a878d graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeCodeGenerator.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeCodeGenerator.java Mon Jan 05 09:58:33 2015 -0800 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeCodeGenerator.java Mon Jan 05 20:23:22 2015 +0100 @@ -101,9 +101,8 @@ } } } - Modifier templateVisibility = ElementUtils.getVisibility(node.getTemplateType().getModifiers()); - new NodeFactoryFactory(context, node, second).createFactoryMethods(first, templateVisibility); - ElementUtils.setVisibility(first.getModifiers(), templateVisibility); + new NodeFactoryFactory(context, node, second).createFactoryMethods(first); + ElementUtils.setVisibility(first.getModifiers(), ElementUtils.getVisibility(node.getTemplateType().getModifiers())); for (ExecutableElement constructor : ElementFilter.constructorsIn(first.getEnclosedElements())) { ElementUtils.setVisibility(((CodeExecutableElement) constructor).getModifiers(), Modifier.PRIVATE); } diff -r 7ea9a39bd7cc -r f4d78e4a878d graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeFactoryFactory.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeFactoryFactory.java Mon Jan 05 09:58:33 2015 -0800 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeFactoryFactory.java Mon Jan 05 20:23:22 2015 +0100 @@ -71,12 +71,12 @@ clazz.getModifiers().add(Modifier.FINAL); if (createdFactoryElement != null) { - createFactoryMethods(clazz, visibility); clazz.setSuperClass(nodeFactory); clazz.add(createNodeFactoryConstructor()); clazz.add(createCreateNodeMethod()); clazz.add(createGetInstanceMethod(visibility)); clazz.add(createInstanceConstant(clazz.asType())); + createFactoryMethods(clazz); } return clazz; @@ -229,14 +229,18 @@ return var; } - public void createFactoryMethods(CodeTypeElement clazz, Modifier createVisibility) { + public void createFactoryMethods(CodeTypeElement clazz) { List constructors = NodeBaseFactory.findUserConstructors(createdFactoryElement.asType()); for (ExecutableElement constructor : constructors) { - clazz.add(createCreateMethod(createVisibility, constructor)); + clazz.add(createCreateMethod(constructor)); + if (constructor instanceof CodeExecutableElement) { + ElementUtils.setVisibility(constructor.getModifiers(), Modifier.PRIVATE); + } } } - private CodeExecutableElement createCreateMethod(Modifier visibility, ExecutableElement constructor) { + private CodeExecutableElement createCreateMethod(ExecutableElement constructor) { + Modifier visibility = ElementUtils.getVisibility(constructor.getModifiers()); CodeExecutableElement method = CodeExecutableElement.clone(context.getEnvironment(), constructor); method.setSimpleName(CodeNames.of("create")); method.getModifiers().clear(); diff -r 7ea9a39bd7cc -r f4d78e4a878d graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java Mon Jan 05 09:58:33 2015 -0800 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java Mon Jan 05 20:23:22 2015 +0100 @@ -151,16 +151,7 @@ } } - List superConstructors = ElementFilter.constructorsIn(node.getTemplateType().getEnclosedElements()); - for (ExecutableElement superConstructor : superConstructors) { - if (getVisibility(superConstructor.getModifiers()) == PRIVATE) { - continue; - } - if (superConstructors.size() > 1 && superConstructor.getParameters().size() > 0 && - ElementUtils.typeEquals(superConstructor.getEnclosingElement().asType(), superConstructor.getParameters().get(0).asType())) { - // constructor is copy constructor - continue; - } + for (ExecutableElement superConstructor : NodeBaseFactory.findUserConstructors(node.getTemplateType().asType())) { clazz.add(createNodeConstructor(clazz, superConstructor)); } @@ -207,7 +198,8 @@ } private CodeExecutableElement createNodeConstructor(CodeTypeElement clazz, ExecutableElement superConstructor) { - CodeExecutableElement constructor = GeneratorUtils.createConstructorUsingFields(modifiers(PUBLIC), clazz, superConstructor); + CodeExecutableElement constructor = GeneratorUtils.createConstructorUsingFields(modifiers(), clazz, superConstructor); + ElementUtils.setVisibility(constructor.getModifiers(), ElementUtils.getVisibility(superConstructor.getModifiers())); List childParameters = new ArrayList<>(); for (NodeChildData child : node.getChildren()) {