--- a/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Wed Aug 25 11:24:30 2010 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Wed Aug 25 11:40:25 2010 -0700
@@ -32,6 +32,7 @@
import com.sun.tools.javac.util.List;
import com.sun.tools.javac.jvm.ClassReader;
+import com.sun.tools.javac.code.Attribute.RetentionPolicy;
import com.sun.tools.javac.comp.Check;
import static com.sun.tools.javac.code.Type.*;
@@ -3554,4 +3555,24 @@
public Type visitType(Type t, S s) { return t; }
}
// </editor-fold>
+
+
+ // <editor-fold defaultstate="collapsed" desc="Annotation support">
+
+ public RetentionPolicy getRetention(Attribute.Compound a) {
+ RetentionPolicy vis = RetentionPolicy.CLASS; // the default
+ Attribute.Compound c = a.type.tsym.attribute(syms.retentionType.tsym);
+ if (c != null) {
+ Attribute value = c.member(names.value);
+ if (value != null && value instanceof Attribute.Enum) {
+ Name levelName = ((Attribute.Enum)value).value.name;
+ if (levelName == names.SOURCE) vis = RetentionPolicy.SOURCE;
+ else if (levelName == names.CLASS) vis = RetentionPolicy.CLASS;
+ else if (levelName == names.RUNTIME) vis = RetentionPolicy.RUNTIME;
+ else ;// /* fail soft */ throw new AssertionError(levelName);
+ }
+ }
+ return vis;
+ }
+ // </editor-fold>
}