Merge "Spit out annotations used in showAnnotations param"
diff --git a/src/com/google/doclava/AnnotationInstanceInfo.java b/src/com/google/doclava/AnnotationInstanceInfo.java
index ff17e8d..c72ca9a 100644
--- a/src/com/google/doclava/AnnotationInstanceInfo.java
+++ b/src/com/google/doclava/AnnotationInstanceInfo.java
@@ -16,6 +16,8 @@
package com.google.doclava;
+import com.google.clearsilver.jsilver.data.Data;
+
import java.util.ArrayList;
import java.util.Arrays;
@@ -117,4 +119,32 @@
return allResolved;
}
+
+ public static void makeLinkListHDF(Data data, String base, AnnotationInstanceInfo[] annotations) {
+ if (annotations == null) return;
+
+ final int N = annotations.length;
+ for (int i = 0; i < N; i++) {
+ AnnotationInstanceInfo aii = annotations[i];
+ aii.type().makeShortDescrHDF(data, base + "." + i);
+ }
+ }
+
+ /**
+ * Get a new list containing the set of annotations that are shared between
+ * the input annotations collection and the names of annotations passed in
+ * the showAnnotations parameter
+ */
+ public static ArrayList<AnnotationInstanceInfo> getShowAnnotationsIntersection(
+ ArrayList<AnnotationInstanceInfo> annotations) {
+ ArrayList<AnnotationInstanceInfo> list = new ArrayList<AnnotationInstanceInfo>();
+ if (annotations != null) {
+ for (AnnotationInstanceInfo info : annotations) {
+ if (Doclava.showAnnotations.contains(info.type().qualifiedName())) {
+ list.add(info);
+ }
+ }
+ }
+ return list;
+ }
}
diff --git a/src/com/google/doclava/ClassInfo.java b/src/com/google/doclava/ClassInfo.java
index 7ab7a6a..e8b1f89 100644
--- a/src/com/google/doclava/ClassInfo.java
+++ b/src/com/google/doclava/ClassInfo.java
@@ -104,6 +104,7 @@
mQualifiedTypeName = qualifiedTypeName;
mIsPrimitive = isPrimitive;
mAnnotations = annotations;
+ mShowAnnotations = AnnotationInstanceInfo.getShowAnnotationsIntersection(annotations);
}
public void init(TypeInfo typeInfo, ArrayList<ClassInfo> interfaces,
@@ -135,6 +136,7 @@
mRealSuperclass = superclass;
mRealSuperclassType = superclassType;
mAnnotations = annotations;
+ mShowAnnotations = AnnotationInstanceInfo.getShowAnnotationsIntersection(annotations);
// after providing new methods and new superclass info,clear any cached
// lists of self + superclass methods, ctors, etc.
@@ -1025,6 +1027,12 @@
if (isDeprecated()) {
data.setValue(base + ".deprecatedsince", getDeprecatedSince());
}
+
+ AnnotationInstanceInfo.makeLinkListHDF(
+ data,
+ base + ".showAnnotations",
+ showAnnotations().toArray(new AnnotationInstanceInfo[showAnnotations().size()]));
+
setFederatedReferences(data, base);
}
@@ -1062,6 +1070,11 @@
data.setValue("class.abstract", "abstract");
}
+ AnnotationInstanceInfo.makeLinkListHDF(
+ data,
+ "class.showAnnotations",
+ showAnnotations().toArray(new AnnotationInstanceInfo[showAnnotations().size()]));
+
// class info
String kind = kind();
if (kind != null) {
@@ -1414,14 +1427,11 @@
}
public boolean hasShowAnnotation() {
- if (annotations() != null) {
- for (AnnotationInstanceInfo info : annotations()) {
- if (Doclava.showAnnotations.contains(info.type().qualifiedName())) {
- return true;
- }
- }
- }
- return false;
+ return mShowAnnotations.size() > 0;
+ }
+
+ public ArrayList<AnnotationInstanceInfo> showAnnotations() {
+ return mShowAnnotations;
}
private MethodInfo matchMethod(ArrayList<MethodInfo> methods, String name, String[] params,
@@ -1686,6 +1696,7 @@
private TypeInfo mRealSuperclassType;
private ClassInfo mSuperclass;
private ArrayList<AnnotationInstanceInfo> mAnnotations;
+ private ArrayList<AnnotationInstanceInfo> mShowAnnotations;
private boolean mSuperclassInit;
private boolean mDeprecatedKnown;
diff --git a/src/com/google/doclava/MemberInfo.java b/src/com/google/doclava/MemberInfo.java
index 800edba..76087eb 100644
--- a/src/com/google/doclava/MemberInfo.java
+++ b/src/com/google/doclava/MemberInfo.java
@@ -38,30 +38,23 @@
mIsSynthetic = isSynthetic;
mKind = kind;
mAnnotations = annotations;
+ mShowAnnotations = AnnotationInstanceInfo.getShowAnnotationsIntersection(annotations);
}
public abstract boolean isExecutable();
@Override
public boolean isHidden() {
- if (mAnnotations != null) {
- for (AnnotationInstanceInfo info : mAnnotations) {
- if (Doclava.showAnnotations.contains(info.type().qualifiedName())) {
- return false;
- }
- }
+ if (mShowAnnotations.size() > 0) {
+ return false;
}
return super.isHidden();
}
@Override
public boolean isRemoved() {
- if (mAnnotations != null) {
- for (AnnotationInstanceInfo info : mAnnotations) {
- if (Doclava.showAnnotations.contains(info.type().qualifiedName())) {
- return false;
- }
- }
+ if (mShowAnnotations.size() > 0) {
+ return false;
}
return super.isRemoved();
}
@@ -163,6 +156,10 @@
return mAnnotations;
}
+ public ArrayList<AnnotationInstanceInfo> showAnnotations() {
+ return mShowAnnotations;
+ }
+
ClassInfo mContainingClass;
ClassInfo mRealContainingClass;
String mName;
@@ -176,5 +173,6 @@
boolean mIsSynthetic;
String mKind;
private ArrayList<AnnotationInstanceInfo> mAnnotations;
+ private ArrayList<AnnotationInstanceInfo> mShowAnnotations;
}
diff --git a/src/com/google/doclava/MethodInfo.java b/src/com/google/doclava/MethodInfo.java
index 999de0b..8c5e271 100644
--- a/src/com/google/doclava/MethodInfo.java
+++ b/src/com/google/doclava/MethodInfo.java
@@ -575,7 +575,12 @@
if (mTypeParameters != null) {
TypeInfo.makeHDF(data, base + ".generic.typeArguments", mTypeParameters, false);
}
-
+
+ AnnotationInstanceInfo.makeLinkListHDF(
+ data,
+ base + ".showAnnotations",
+ showAnnotations().toArray(new AnnotationInstanceInfo[showAnnotations().size()]));
+
setFederatedReferences(data, base);
}