changeset 20943:810d466073f0

Truffle-DSL: fixed common supertype was always Object if generic child types contained void.
author Christian Humer <christian.humer@gmail.com>
date Tue, 14 Apr 2015 19:23:32 +0200
parents a2e295c6cf7c
children 354b7f1b4acf
files 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/AbstractCodeWriter.java
diffstat 2 files changed, 6 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java	Tue Apr 14 19:23:32 2015 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java	Tue Apr 14 19:23:32 2015 +0200
@@ -165,6 +165,9 @@
         TypeElement element1 = fromTypeMirror(type1);
         TypeElement element2 = fromTypeMirror(type2);
         if (element1 == null || element2 == null) {
+            if (element1 != null) {
+                return type1;
+            }
             return context.getType(Object.class);
         }
 
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/AbstractCodeWriter.java	Tue Apr 14 19:23:32 2015 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/transform/AbstractCodeWriter.java	Tue Apr 14 19:23:32 2015 +0200
@@ -258,7 +258,7 @@
             init = ((CodeVariableElement) f).getInit();
         }
 
-        if (parent.getKind() == ElementKind.ENUM && f.getModifiers().contains(Modifier.STATIC)) {
+        if (parent != null && parent.getKind() == ElementKind.ENUM && f.getModifiers().contains(Modifier.STATIC)) {
             write(f.getSimpleName());
             if (init != null) {
                 write("(");
@@ -266,12 +266,11 @@
                 write(")");
             }
         } else {
-            Element enclosing = f.getEnclosingElement();
             writeModifiers(f.getModifiers(), true);
 
             boolean varArgs = false;
-            if (enclosing.getKind() == ElementKind.METHOD) {
-                ExecutableElement method = (ExecutableElement) enclosing;
+            if (parent != null && parent.getKind() == ElementKind.METHOD) {
+                ExecutableElement method = (ExecutableElement) parent;
                 if (method.isVarArgs() && method.getParameters().indexOf(f) == method.getParameters().size() - 1) {
                     varArgs = true;
                 }