--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Tue Apr 22 19:52:15 2014 +0100
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Tue Apr 22 17:07:54 2014 -0400
@@ -2408,39 +2408,39 @@
return trees;
}
- public void visitTopLevel(JCCompilationUnit tree) {
- if (needPackageInfoClass(tree)) {
- Name name = names.package_info;
- long flags = Flags.ABSTRACT | Flags.INTERFACE;
- if (target.isPackageInfoSynthetic())
- // package-info is marked SYNTHETIC in JDK 1.6 and later releases
- flags = flags | Flags.SYNTHETIC;
- JCClassDecl packageAnnotationsClass
- = make.ClassDef(make.Modifiers(flags,
- tree.packageAnnotations),
- name, List.<JCTypeParameter>nil(),
- null, List.<JCExpression>nil(), List.<JCTree>nil());
- ClassSymbol c = tree.packge.package_info;
- c.flags_field |= flags;
- c.setAttributes(tree.packge);
- ClassType ctype = (ClassType) c.type;
- ctype.supertype_field = syms.objectType;
- ctype.interfaces_field = List.nil();
- packageAnnotationsClass.sym = c;
-
- translated.append(packageAnnotationsClass);
- }
+ public void visitPackageDef(JCPackageDecl tree) {
+ if (!needPackageInfoClass(tree))
+ return;
+
+ Name name = names.package_info;
+ long flags = Flags.ABSTRACT | Flags.INTERFACE;
+ if (target.isPackageInfoSynthetic())
+ // package-info is marked SYNTHETIC in JDK 1.6 and later releases
+ flags = flags | Flags.SYNTHETIC;
+ JCClassDecl packageAnnotationsClass
+ = make.ClassDef(make.Modifiers(flags, tree.getAnnotations()),
+ name, List.<JCTypeParameter>nil(),
+ null, List.<JCExpression>nil(), List.<JCTree>nil());
+ ClassSymbol c = tree.packge.package_info;
+ c.flags_field |= flags;
+ c.setAttributes(tree.packge);
+ ClassType ctype = (ClassType) c.type;
+ ctype.supertype_field = syms.objectType;
+ ctype.interfaces_field = List.nil();
+ packageAnnotationsClass.sym = c;
+
+ translated.append(packageAnnotationsClass);
}
// where
- private boolean needPackageInfoClass(JCCompilationUnit tree) {
+ private boolean needPackageInfoClass(JCPackageDecl pd) {
switch (pkginfoOpt) {
case ALWAYS:
return true;
case LEGACY:
- return tree.packageAnnotations.nonEmpty();
+ return pd.getAnnotations().nonEmpty();
case NONEMPTY:
for (Attribute.Compound a :
- tree.packge.getDeclarationAttributes()) {
+ pd.packge.getDeclarationAttributes()) {
Attribute.RetentionPolicy p = types.getRetention(a);
if (p != Attribute.RetentionPolicy.SOURCE)
return true;