am 4dc187a0: am 2c539239: am a078a044: am 8a8f7912: Doclava: Add support for building samples toc from contents of a target browsable dir.
* commit '4dc187a049ed5b1c83c1d8f68581a415a9a8130a':
Doclava: Add support for building samples toc from contents of a target browsable dir.
diff --git a/src/com/google/doclava/ClassInfo.java b/src/com/google/doclava/ClassInfo.java
index a750b11..e60f4b8 100644
--- a/src/com/google/doclava/ClassInfo.java
+++ b/src/com/google/doclava/ClassInfo.java
@@ -1208,16 +1208,12 @@
public boolean isHiddenImpl() {
ClassInfo cl = this;
while (cl != null) {
- PackageInfo pkg = cl.containingPackage();
- if (pkg != null && pkg.isHidden()) {
- return true;
+ if (cl.hasShowAnnotation()) {
+ return false;
}
- if (cl.annotations() != null) {
- for (AnnotationInstanceInfo info : cl.annotations()) {
- if (Doclava.showAnnotations.contains(info.type().qualifiedName())) {
- return false;
- }
- }
+ PackageInfo pkg = cl.containingPackage();
+ if (pkg != null && pkg.hasHideComment()) {
+ return true;
}
if (cl.comment().isHidden()) {
return true;
@@ -1227,6 +1223,17 @@
return false;
}
+ public boolean hasShowAnnotation() {
+ if (annotations() != null) {
+ for (AnnotationInstanceInfo info : annotations()) {
+ if (Doclava.showAnnotations.contains(info.type().qualifiedName())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
private MethodInfo matchMethod(ArrayList<MethodInfo> methods, String name, String[] params,
String[] dimensions, boolean varargs) {
for (MethodInfo method : methods) {
diff --git a/src/com/google/doclava/Doclava.java b/src/com/google/doclava/Doclava.java
index 213492a..b3e3eb3 100644
--- a/src/com/google/doclava/Doclava.java
+++ b/src/com/google/doclava/Doclava.java
@@ -699,7 +699,7 @@
Boolean allHidden = true;
int pass = 0;
ClassInfo[] classesToCheck = null;
- while (pass < 5) {
+ while (pass < 6) {
switch (pass) {
case 0:
classesToCheck = pkg.ordinaryClasses();
@@ -716,6 +716,9 @@
case 4:
classesToCheck = pkg.interfaces();
break;
+ case 5:
+ classesToCheck = pkg.annotations();
+ break;
default:
System.err.println("Error reading package: " + pkg.name());
break;
@@ -1072,7 +1075,7 @@
Boolean allHidden = true;
int pass = 0;
ClassInfo[] classesToCheck = null;
- while (pass < 5) {
+ while (pass < 6) {
switch (pass) {
case 0:
classesToCheck = pkg.ordinaryClasses();
@@ -1089,6 +1092,9 @@
case 4:
classesToCheck = pkg.interfaces();
break;
+ case 5:
+ classesToCheck = pkg.annotations();
+ break;
default:
System.err.println("Error reading package: " + pkg.name());
break;
@@ -1151,6 +1157,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()));
@@ -1759,4 +1766,4 @@
}
}
-}
\ No newline at end of file
+}
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 65a9639..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>();
@@ -83,7 +84,36 @@
@Override
public boolean isHidden() {
- return comment().isHidden();
+ 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[][] { annotations(), interfaces(), ordinaryClasses(), enums(), exceptions() };
+ for (ClassInfo[] type : types) {
+ if (type != null) {
+ for (ClassInfo c : type) {
+ if (c.hasShowAnnotation()) {
+ mHidden = 0;
+ return false;
+ }
+ }
+ }
+ }
+ mHidden = 1;
+ } else {
+ mHidden = 0;
+ }
+ }
+ return mHidden != 0;
+ }
+
+ /**
+ * Used by ClassInfo to determine packages default visability before annoations.
+ */
+ public boolean hasHideComment() {
+ if (mHiddenByComment == -1) {
+ mHiddenByComment = comment().isHidden() ? 1 : 0;
+ }
+ return mHiddenByComment != 0;
}
public boolean checkLevel() {
@@ -130,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());
@@ -138,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 =
@@ -190,15 +229,19 @@
return mName.hashCode();
}
+ private int mHidden = -1;
+ private int mHiddenByComment = -1;
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;
@@ -230,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);