changeset 8454:fec5ebd058b7

Fixed ecj fails when performing type erasure on void types.
author Christian Humer <christian.humer@gmail.com>
date Fri, 22 Mar 2013 18:01:22 +0100
parents ce7aae2d4fc7
children 00d2e017073d
files graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/MethodSubstitutionVerifier.java
diffstat 1 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/MethodSubstitutionVerifier.java	Fri Mar 22 16:02:43 2013 +0100
+++ b/graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/MethodSubstitutionVerifier.java	Fri Mar 22 18:01:22 2013 +0100
@@ -187,11 +187,22 @@
     }
 
     private boolean isTypeCompatible(TypeMirror originalType, TypeMirror substitutionType) {
-        TypeMirror original = env.getTypeUtils().erasure(originalType);
-        TypeMirror substitution = env.getTypeUtils().erasure(substitutionType);
+        TypeMirror original = originalType;
+        TypeMirror substitution = substitutionType;
+        if (needsErasure(original)) {
+            original = env.getTypeUtils().erasure(original);
+        }
+        if (needsErasure(substitution)) {
+            substitution = env.getTypeUtils().erasure(substitution);
+        }
         return env.getTypeUtils().isSameType(original, substitution);
     }
 
+    private static boolean needsErasure(TypeMirror typeMirror) {
+        return typeMirror.getKind() != TypeKind.NONE && typeMirror.getKind() != TypeKind.VOID && !typeMirror.getKind().isPrimitive() && typeMirror.getKind() != TypeKind.OTHER &&
+                        typeMirror.getKind() != TypeKind.NULL;
+    }
+
     private static TypeElement findEnclosingClass(Element element) {
         if (element.getKind().isClass()) {
             return (TypeElement) element;