changeset 16786:45c8f64978d6

Truffle-DSL: initial cleanups for code sharing with the new graal annotation processor.
author Christian Humer <christian.humer@gmail.com>
date Tue, 12 Aug 2014 17:21:06 +0200
parents af3da93ea934
children 9346cbeeded3
files graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/AnnotationProcessor.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/CodeWriter.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/ProcessorContext.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/FixWarningsVisitor.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/OrganizedImports.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/AbstractParser.java
diffstat 7 files changed, 107 insertions(+), 71 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/AnnotationProcessor.java	Tue Aug 12 14:54:36 2014 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/AnnotationProcessor.java	Tue Aug 12 17:21:06 2014 +0200
@@ -22,17 +22,13 @@
  */
 package com.oracle.truffle.dsl.processor;
 
-import java.io.*;
 import java.util.*;
 
-import javax.annotation.processing.*;
 import javax.lang.model.element.*;
 import javax.lang.model.type.*;
-import javax.tools.*;
 
 import com.oracle.truffle.dsl.processor.generator.*;
 import com.oracle.truffle.dsl.processor.java.*;
-import com.oracle.truffle.dsl.processor.java.compiler.*;
 import com.oracle.truffle.dsl.processor.java.model.*;
 import com.oracle.truffle.dsl.processor.java.transform.*;
 import com.oracle.truffle.dsl.processor.model.*;
@@ -88,7 +84,7 @@
                 DeclaredType overrideType = (DeclaredType) context.getType(Override.class);
                 DeclaredType unusedType = (DeclaredType) context.getType(SuppressWarnings.class);
                 unit.accept(new GenerateOverrideVisitor(overrideType), null);
-                unit.accept(new FixWarningsVisitor(context, unusedType, overrideType), null);
+                unit.accept(new FixWarningsVisitor(context.getEnvironment(), unusedType, overrideType), null);
 
                 if (!callback) {
                     unit.accept(new CodeWriter(context.getEnvironment(), element), null);
@@ -97,33 +93,4 @@
         }
     }
 
-    private static class CodeWriter extends AbstractCodeWriter {
-
-        private final Element originalElement;
-        private final ProcessingEnvironment env;
-
-        public CodeWriter(ProcessingEnvironment env, Element originalElement) {
-            this.env = env;
-            this.originalElement = originalElement;
-        }
-
-        @Override
-        protected Writer createWriter(CodeTypeElement clazz) throws IOException {
-            JavaFileObject jfo = env.getFiler().createSourceFile(clazz.getQualifiedName(), originalElement);
-            return new BufferedWriter(jfo.openWriter());
-        }
-
-        @Override
-        protected void writeHeader() {
-            if (env == null) {
-                return;
-            }
-            String comment = CompilerFactory.getCompiler(originalElement).getHeaderComment(env, originalElement);
-            if (comment != null) {
-                writeLn(comment);
-            }
-        }
-
-    }
-
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/CodeWriter.java	Tue Aug 12 17:21:06 2014 +0200
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.truffle.dsl.processor;
+
+import java.io.*;
+
+import javax.annotation.processing.*;
+import javax.lang.model.element.*;
+import javax.tools.*;
+
+import com.oracle.truffle.dsl.processor.java.compiler.*;
+import com.oracle.truffle.dsl.processor.java.model.*;
+import com.oracle.truffle.dsl.processor.java.transform.*;
+
+public final class CodeWriter extends AbstractCodeWriter {
+
+    private final Element originalElement;
+    private final ProcessingEnvironment env;
+
+    public CodeWriter(ProcessingEnvironment env, Element originalElement) {
+        this.env = env;
+        this.originalElement = originalElement;
+    }
+
+    @Override
+    protected Writer createWriter(CodeTypeElement clazz) throws IOException {
+        JavaFileObject jfo = env.getFiler().createSourceFile(clazz.getQualifiedName(), originalElement);
+        return new BufferedWriter(jfo.openWriter());
+    }
+
+    @Override
+    protected void writeHeader() {
+        if (env == null) {
+            return;
+        }
+        String comment = CompilerFactory.getCompiler(originalElement).getHeaderComment(env, originalElement);
+        if (comment != null) {
+            writeLn(comment);
+        }
+    }
+
+}
\ No newline at end of file
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/ProcessorContext.java	Tue Aug 12 14:54:36 2014 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/ProcessorContext.java	Tue Aug 12 17:21:06 2014 +0200
@@ -84,35 +84,7 @@
     }
 
     public TypeMirror getType(Class<?> element) {
-        TypeMirror mirror;
-        if (element.isPrimitive()) {
-            if (element == boolean.class) {
-                mirror = environment.getTypeUtils().getPrimitiveType(TypeKind.BOOLEAN);
-            } else if (element == byte.class) {
-                mirror = environment.getTypeUtils().getPrimitiveType(TypeKind.BYTE);
-            } else if (element == short.class) {
-                mirror = environment.getTypeUtils().getPrimitiveType(TypeKind.SHORT);
-            } else if (element == char.class) {
-                mirror = environment.getTypeUtils().getPrimitiveType(TypeKind.CHAR);
-            } else if (element == int.class) {
-                mirror = environment.getTypeUtils().getPrimitiveType(TypeKind.INT);
-            } else if (element == long.class) {
-                mirror = environment.getTypeUtils().getPrimitiveType(TypeKind.LONG);
-            } else if (element == float.class) {
-                mirror = environment.getTypeUtils().getPrimitiveType(TypeKind.FLOAT);
-            } else if (element == double.class) {
-                mirror = environment.getTypeUtils().getPrimitiveType(TypeKind.DOUBLE);
-            } else if (element == void.class) {
-                mirror = environment.getTypeUtils().getNoType(TypeKind.VOID);
-            } else {
-                assert false;
-                return null;
-            }
-        } else {
-            TypeElement typeElement = environment.getElementUtils().getTypeElement(element.getCanonicalName());
-            mirror = typeElement.asType();
-        }
-        return mirror;
+        return ElementUtils.getType(environment, element);
     }
 
     public interface ProcessCallback {
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java	Tue Aug 12 14:54:36 2014 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java	Tue Aug 12 17:21:06 2014 +0200
@@ -40,6 +40,39 @@
  */
 public class ElementUtils {
 
+    public static TypeMirror getType(ProcessingEnvironment processingEnv, Class<?> element) {
+        TypeMirror mirror;
+        if (element.isPrimitive()) {
+            TypeKind typeKind;
+            if (element == boolean.class) {
+                typeKind = TypeKind.BOOLEAN;
+            } else if (element == byte.class) {
+                typeKind = TypeKind.BYTE;
+            } else if (element == short.class) {
+                typeKind = TypeKind.SHORT;
+            } else if (element == char.class) {
+                typeKind = TypeKind.CHAR;
+            } else if (element == int.class) {
+                typeKind = TypeKind.INT;
+            } else if (element == long.class) {
+                typeKind = TypeKind.LONG;
+            } else if (element == float.class) {
+                typeKind = TypeKind.FLOAT;
+            } else if (element == double.class) {
+                typeKind = TypeKind.DOUBLE;
+            } else if (element == void.class) {
+                typeKind = TypeKind.VOID;
+            } else {
+                assert false;
+                return null;
+            }
+            mirror = processingEnv.getTypeUtils().getPrimitiveType(typeKind);
+        } else {
+            mirror = processingEnv.getElementUtils().getTypeElement(element.getCanonicalName()).asType();
+        }
+        return mirror;
+    }
+
     public static ExecutableElement findExecutableElement(DeclaredType type, String name) {
         List<? extends ExecutableElement> elements = ElementFilter.methodsIn(type.asElement().getEnclosedElements());
         for (ExecutableElement executableElement : elements) {
@@ -801,7 +834,7 @@
         return null;
     }
 
-    private static PackageElement findPackageElement(Element type) {
+    public static PackageElement findPackageElement(Element type) {
         List<Element> hierarchy = getElementHierarchy(type);
         for (Element element : hierarchy) {
             if (element.getKind() == ElementKind.PACKAGE) {
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/FixWarningsVisitor.java	Tue Aug 12 14:54:36 2014 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/FixWarningsVisitor.java	Tue Aug 12 17:21:06 2014 +0200
@@ -28,10 +28,10 @@
 import java.io.*;
 import java.util.*;
 
+import javax.annotation.processing.*;
 import javax.lang.model.element.*;
 import javax.lang.model.type.*;
 
-import com.oracle.truffle.dsl.processor.*;
 import com.oracle.truffle.dsl.processor.java.*;
 import com.oracle.truffle.dsl.processor.java.model.*;
 
@@ -39,12 +39,12 @@
 
     private final Set<String> symbolsUsed = new HashSet<>();
 
-    private final ProcessorContext context;
+    private final ProcessingEnvironment processingEnv;
     private final DeclaredType unusedAnnotation;
     private final DeclaredType overrideType;
 
-    public FixWarningsVisitor(ProcessorContext context, DeclaredType unusedAnnotation, DeclaredType overrideType) {
-        this.context = context;
+    public FixWarningsVisitor(ProcessingEnvironment processingEnv, DeclaredType unusedAnnotation, DeclaredType overrideType) {
+        this.processingEnv = processingEnv;
         this.unusedAnnotation = unusedAnnotation;
         this.overrideType = overrideType;
     }
@@ -56,7 +56,7 @@
             String qualifiedName = ElementUtils.getQualifiedName(type);
             if (qualifiedName.equals(Serializable.class.getCanonicalName())) {
                 if (!e.containsField("serialVersionUID")) {
-                    e.add(new CodeVariableElement(modifiers(PRIVATE, STATIC, FINAL), context.getType(long.class), "serialVersionUID", "1L"));
+                    e.add(new CodeVariableElement(modifiers(PRIVATE, STATIC, FINAL), ElementUtils.getType(processingEnv, long.class), "serialVersionUID", "1L"));
                 }
                 break;
             }
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/OrganizedImports.java	Tue Aug 12 14:54:36 2014 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/OrganizedImports.java	Tue Aug 12 17:21:06 2014 +0200
@@ -481,7 +481,9 @@
 
         @Override
         public void visitTypeReference(Element enclosedType, TypeMirror type) {
-            createTypeReference(enclosedType, type);
+            if (type != null) {
+                createTypeReference(enclosedType, type);
+            }
         }
 
     }
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/AbstractParser.java	Tue Aug 12 14:54:36 2014 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/AbstractParser.java	Tue Aug 12 17:21:06 2014 +0200
@@ -37,7 +37,7 @@
 /**
  * THIS IS NOT PUBLIC API.
  */
-public abstract class AbstractParser<M extends Template> {
+public abstract class AbstractParser<M extends MessageContainer> {
 
     protected final ProcessorContext context;
     protected final ProcessingEnvironment processingEnv;