diff -r 67b01d295cd2 -r f72c9c5aeaef src/share/classes/com/sun/tools/javac/code/Symbol.java --- a/src/share/classes/com/sun/tools/javac/code/Symbol.java Wed Dec 19 11:29:56 2012 +0000 +++ b/src/share/classes/com/sun/tools/javac/code/Symbol.java Sun Dec 16 11:09:36 2012 +0100 @@ -83,13 +83,13 @@ * Attributes of class symbols should be accessed through the accessor * method to make sure that the class symbol is loaded. */ - public List getAnnotationMirrors() { - return Assert.checkNonNull(annotations.getAttributes()); + public List getRawAttributes() { + return annotations.getAttributes(); } /** Fetch a particular annotation from a symbol. */ public Attribute.Compound attribute(Symbol anno) { - for (Attribute.Compound a : getAnnotationMirrors()) { + for (Attribute.Compound a : getRawAttributes()) { if (a.type.tsym == anno) return a; } return null; @@ -447,6 +447,14 @@ } /** + * This is the implementation for {@code + * javax.lang.model.element.Element.getAnnotationMirrors()}. + */ + public final List getAnnotationMirrors() { + return getRawAttributes(); + } + + /** * @deprecated this method should never be used by javac internally. */ @Deprecated @@ -662,15 +670,21 @@ return flags_field; } - public List getAnnotationMirrors() { + @Override + public List getRawAttributes() { if (completer != null) complete(); if (package_info != null && package_info.completer != null) { package_info.complete(); - if (annotations.isEmpty()) { - annotations.setAttributes(package_info.annotations); + mergeAttributes(); } + return super.getRawAttributes(); + } + + private void mergeAttributes() { + if (annotations.isEmpty() && + !package_info.annotations.isEmpty()) { + annotations.setAttributes(package_info.annotations); } - return Assert.checkNonNull(annotations.getAttributes()); } /** A package "exists" if a type or package that exists has @@ -770,9 +784,10 @@ return members_field; } - public List getAnnotationMirrors() { + @Override + public List getRawAttributes() { if (completer != null) complete(); - return Assert.checkNonNull(annotations.getAttributes()); + return super.getRawAttributes(); } public Type erasure(Types types) {