--- a/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Wed Jan 23 20:57:40 2013 +0000
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Wed Jan 23 13:27:24 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, 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
@@ -34,13 +34,14 @@
import java.util.Set;
import java.util.WeakHashMap;
+import javax.lang.model.type.TypeKind;
+
import com.sun.tools.javac.code.Attribute.RetentionPolicy;
import com.sun.tools.javac.code.Lint.LintCategory;
import com.sun.tools.javac.code.Type.UndetVar.InferenceBound;
import com.sun.tools.javac.comp.Check;
import com.sun.tools.javac.jvm.ClassReader;
import com.sun.tools.javac.util.*;
-import com.sun.tools.javac.util.List;
import static com.sun.tools.javac.code.BoundKind.*;
import static com.sun.tools.javac.code.Flags.*;
import static com.sun.tools.javac.code.Scope.*;
@@ -684,6 +685,8 @@
//where
private boolean isSubtypeUncheckedInternal(Type t, Type s, Warner warn) {
if (t.hasTag(ARRAY) && s.hasTag(ARRAY)) {
+ t = t.unannotatedType();
+ s = s.unannotatedType();
if (((ArrayType)t).elemtype.isPrimitive()) {
return isSameType(elemtype(t), elemtype(s));
} else {
@@ -709,7 +712,10 @@
}
private void checkUnsafeVarargsConversion(Type t, Type s, Warner warn) {
- if (t.tag != ARRAY || isReifiable(t)) return;
+ if (t.tag != ARRAY || isReifiable(t))
+ return;
+ t = t.unannotatedType();
+ s = s.unannotatedType();
ArrayType from = (ArrayType)t;
boolean shouldWarn = false;
switch (s.tag) {
@@ -742,6 +748,12 @@
if (t == s)
return true;
+ t = t.unannotatedType();
+ s = s.unannotatedType();
+
+ if (t == s)
+ return true;
+
if (s.isPartial())
return isSuperType(s, t);
@@ -1683,6 +1695,7 @@
case WILDCARD:
return elemtype(upperBound(t));
case ARRAY:
+ t = t.unannotatedType();
return ((ArrayType)t).elemtype;
case FORALL:
return elemtype(((ForAll)t).qtype);
@@ -2011,6 +2024,11 @@
public Type visitErrorType(ErrorType t, Boolean recurse) {
return t;
}
+
+ @Override
+ public Type visitAnnotatedType(AnnotatedType t, Boolean recurse) {
+ return new AnnotatedType(t.typeAnnotations, erasure(t.underlyingType, recurse));
+ }
};
private Mapping erasureFun = new Mapping ("erasure") {
@@ -2953,6 +2971,7 @@
* graph. Undefined for all but reference types.
*/
public int rank(Type t) {
+ t = t.unannotatedType();
switch(t.tag) {
case CLASS: {
ClassType cls = (ClassType)t;
@@ -3654,6 +3673,7 @@
t = subst(type1, t.tsym.type.getTypeArguments(), t.getTypeArguments());
}
}
+ t = t.unannotatedType();
ClassType cls = (ClassType)t;
if (cls.isRaw() || !cls.isParameterized())
return cls;
@@ -4172,6 +4192,8 @@
public R visitForAll(ForAll t, S s) { return visitType(t, s); }
public R visitUndetVar(UndetVar t, S s) { return visitType(t, s); }
public R visitErrorType(ErrorType t, S s) { return visitType(t, s); }
+ // Pretend annotations don't exist
+ public R visitAnnotatedType(AnnotatedType t, S s) { return visit(t.underlyingType, s); }
}
/**