Output annotations in package-summary docs.
Bug 10749552
Bug 6333357
Change-Id: Iffdd04c911bafc8f2c368fc0d24af926f155928a
diff --git a/src/com/google/doclava/Doclava.java b/src/com/google/doclava/Doclava.java
index bc57fa2..14acf33 100644
--- a/src/com/google/doclava/Doclava.java
+++ b/src/com/google/doclava/Doclava.java
@@ -688,7 +688,7 @@
Boolean allHidden = true;
int pass = 0;
ClassInfo[] classesToCheck = null;
- while (pass < 5) {
+ while (pass < 6) {
switch (pass) {
case 0:
classesToCheck = pkg.ordinaryClasses();
@@ -705,6 +705,9 @@
case 4:
classesToCheck = pkg.interfaces();
break;
+ case 5:
+ classesToCheck = pkg.annotations();
+ break;
default:
System.err.println("Error reading package: " + pkg.name());
break;
@@ -1055,7 +1058,7 @@
Boolean allHidden = true;
int pass = 0;
ClassInfo[] classesToCheck = null;
- while (pass < 5) {
+ while (pass < 6) {
switch (pass) {
case 0:
classesToCheck = pkg.ordinaryClasses();
@@ -1072,6 +1075,9 @@
case 4:
classesToCheck = pkg.interfaces();
break;
+ case 5:
+ classesToCheck = pkg.annotations();
+ break;
default:
System.err.println("Error reading package: " + pkg.name());
break;
@@ -1134,6 +1140,7 @@
data.setValue("package.descr", "...description...");
pkg.setFederatedReferences(data, "package");
+ makeClassListHDF(data, "package.annotations", ClassInfo.sortByName(pkg.annotations()));
makeClassListHDF(data, "package.interfaces", ClassInfo.sortByName(pkg.interfaces()));
makeClassListHDF(data, "package.classes", ClassInfo.sortByName(pkg.ordinaryClasses()));
makeClassListHDF(data, "package.enums", ClassInfo.sortByName(pkg.enums()));
diff --git a/src/com/google/doclava/NavTree.java b/src/com/google/doclava/NavTree.java
index aa02d7c..e36babe 100644
--- a/src/com/google/doclava/NavTree.java
+++ b/src/com/google/doclava/NavTree.java
@@ -133,6 +133,7 @@
private static Node makePackageNode(PackageInfo pkg) {
List<Node> children = new ArrayList<Node>();
+ addClassNodes(children, "Annotations", pkg.annotations());
addClassNodes(children, "Interfaces", pkg.interfaces());
addClassNodes(children, "Classes", pkg.ordinaryClasses());
addClassNodes(children, "Enums", pkg.enums());
diff --git a/src/com/google/doclava/PackageInfo.java b/src/com/google/doclava/PackageInfo.java
index ef3b2ed..43b9800 100644
--- a/src/com/google/doclava/PackageInfo.java
+++ b/src/com/google/doclava/PackageInfo.java
@@ -61,6 +61,7 @@
}
private void initializeMaps() {
+ mAnnotationsMap = new HashMap<String, ClassInfo>();
mInterfacesMap = new HashMap<String, ClassInfo>();
mOrdinaryClassesMap = new HashMap<String, ClassInfo>();
mEnumsMap = new HashMap<String, ClassInfo>();
@@ -86,7 +87,7 @@
if (mHidden == -1) {
if (hasHideComment()) {
// We change the hidden value of the package if a class wants to be not hidden.
- ClassInfo[][] types = new ClassInfo[][] { interfaces(), ordinaryClasses(), enums(), exceptions() };
+ ClassInfo[][] types = new ClassInfo[][] { annotations(), interfaces(), ordinaryClasses(), enums(), exceptions() };
for (ClassInfo[] type : types) {
if (type != null) {
for (ClassInfo c : type) {
@@ -159,6 +160,7 @@
public void makeClassLinkListHDF(Data data, String base) {
makeLink(data, base);
+ ClassInfo.makeLinkListHDF(data, base + ".annotations", annotations());
ClassInfo.makeLinkListHDF(data, base + ".interfaces", interfaces());
ClassInfo.makeLinkListHDF(data, base + ".classes", ordinaryClasses());
ClassInfo.makeLinkListHDF(data, base + ".enums", enums());
@@ -167,6 +169,14 @@
data.setValue(base + ".since", getSince());
}
+ public ClassInfo[] annotations() {
+ if (mAnnotations == null) {
+ mAnnotations =
+ ClassInfo.sortByName(filterHidden(Converter.convertClasses(mPackage.annotationTypes())));
+ }
+ return mAnnotations;
+ }
+
public ClassInfo[] interfaces() {
if (mInterfaces == null) {
mInterfaces =
@@ -224,12 +234,14 @@
private String mName;
private PackageDoc mPackage;
private ApiInfo mContainingApi;
+ private ClassInfo[] mAnnotations;
private ClassInfo[] mInterfaces;
private ClassInfo[] mOrdinaryClasses;
private ClassInfo[] mEnums;
private ClassInfo[] mExceptions;
private ClassInfo[] mErrors;
+ private HashMap<String, ClassInfo> mAnnotationsMap;
private HashMap<String, ClassInfo> mInterfacesMap;
private HashMap<String, ClassInfo> mOrdinaryClassesMap;
private HashMap<String, ClassInfo> mEnumsMap;
@@ -261,10 +273,24 @@
if (cls != null) {
return cls;
}
+ cls = mAnnotationsMap.get(className);
+
+ if (cls != null) {
+ return cls;
+ }
return mErrorsMap.get(className);
}
+ public void addAnnotation(ClassInfo cls) {
+ cls.setPackage(this);
+ mAnnotationsMap.put(cls.name(), cls);
+ }
+
+ public ClassInfo getAnnotation(String annotationName) {
+ return mAnnotationsMap.get(annotationName);
+ }
+
public void addInterface(ClassInfo cls) {
cls.setPackage(this);
mInterfacesMap.put(cls.name(), cls);