diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeFactoryFactory.java @ 18780:f4d78e4a878d

Truffle-DSL: fixed create method should have the same visibility as its originating constructor. (GRAAL-365 #resolve)
author Christian Humer <christian.humer@gmail.com>
date Mon, 05 Jan 2015 20:23:22 +0100
parents a720bf2e2f43
children 4ce856e65728
line wrap: on
line diff
--- 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<ExecutableElement> 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();