Index: dev/src/com/sun/tools/doclets/doccheck/DocCheck.java
===================================================================
--- dev/src/com/sun/tools/doclets/doccheck/DocCheck.java (revision 367)
+++ dev/src/com/sun/tools/doclets/doccheck/DocCheck.java (revision 371)
@@ -375,17 +375,79 @@
boolean trace = false;
if (trace) System.out.println("#pkgs="+root.specifiedPackages().length);
if (root.specifiedPackages().length != 0) {
- processPackages(root.specifiedPackages());
+ processPackages(root.specifiedPackages(), true);
}
if (trace) System.out.println("#classes="+root.specifiedClasses().length);
- if (root.specifiedClasses().length != 0) {
- PkgTracker anon = new PkgTracker("(anonymous)");
- processClasses(root.specifiedClasses(), false, anon);
- totalErrors.addSub(anon);
+ for (int index = 0; index < root.specifiedClasses().length; ++index) {
+ ClassDoc cd = root.specifiedClasses()[index];
+ String packageName = cd.containingPackage().name();
+
+ // process the package if not already done so
+ if (!isPkgTrackerRegistered(packageName)) {
+ PackageDoc[] pds = new PackageDoc[] { cd.containingPackage() };
+ processPackages(pds, false);
+ }
+
+ // process the individual class
+ PkgTracker pet = getPkgTracker(packageName);
+ ClassDoc[] cds = new ClassDoc[] { cd };
+ processClasses(cds, false, pet);
}
printErrorPages();
}
+ /**
+ * Get the PkgTracker or create a new one for the given package name.
+ * TODO: this logic looks happier in the ErrorTracker class.
+ *
+ * @param pkgName the package name.
+ * @return the PkgTracker.
+ */
+ private PkgTracker getPkgTracker(String pkgName) {
+ String displayName = pkgName.length() == 0 ? "(anonymous)" : pkgName;
+
+ for (ListIterator iterator = totalErrors.subIterator(); iterator.hasNext(); ) {
+ PkgTracker pet = (PkgTracker) iterator.next();
+ if (displayName.equals(pet.name)) {
+ return pet;
+ }
+ }
+
+ return new PkgTracker(displayName);
+ }
+
+ /**
+ * Checks if the PkgTracker is already registered.
+ * TODO: this logic looks happier in the ErrorTracker class.
+ *
+ * @param toCheck the PkgTracker to check.
+ * @return true
if the PkgTracker is already registered.
+ */
+ private boolean isPkgTrackerRegistered(String toCheck) {
+ for (ListIterator iterator = totalErrors.subIterator(); iterator.hasNext(); ) {
+ PkgTracker pet = (PkgTracker) iterator.next();
+ if (toCheck.equals(pet.name)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Registers the PkgTracker to totalErrors.
+ * TODO: this logic looks happier in the ErrorTracker class.
+ *
+ * @param toRegister the PkgTracker to register.
+ */
+ private void registerPkgTracker(PkgTracker toRegister) {
+ if (isPkgTrackerRegistered(toRegister.name)) {
+ return;
+ }
+
+ totalErrors.addSub(toRegister);
+ }
+
protected List groupList = new LinkedList();
protected List majorErrs = new LinkedList();
protected List minorErrs = new LinkedList();
@@ -1489,8 +1551,9 @@
* Process each package and the classes/interfaces within it.
*
* @param pd an array of PackageDoc objects
+ * @param processClasses true
if the classes contained also need to be processed.
*/
- public void processPackages(PackageDoc[] pd)
+ public void processPackages(PackageDoc[] pd, boolean processClasses)
{
boolean trace = false;
if (trace) System.out.println("PROCESSING PACKAGES, number="+pd.length);
@@ -1514,7 +1577,7 @@
}
// Package error tracker
- ErrorTracker pet = new PkgTracker(pkgName);
+ PkgTracker pet = getPkgTracker(pkgName);
String data = pd[i].commentText();
if ((data == null) || data.equals("")) {
pet.addErr(PKG_ERR, NO_COMMENT);
@@ -1542,16 +1605,18 @@
pet.addErr(TAG_ERR, NO_SINCE);
}
}
- List classList = new LinkedList(Arrays.asList(pd[i].allClasses()));
-
- // Filter out classes which are not public
- //TODO
-
- Collections.sort(classList);
- ClassDoc[] classes = new ClassDoc[classList.size()];
- classes = (ClassDoc[])classList.toArray(classes);
- processClasses(classes, false, pet);
- totalErrors.addSub(pet);
+ if (processClasses) {
+ List classList = new LinkedList(Arrays.asList(pd[i].allClasses()));
+
+ // Filter out classes which are not public
+ //TODO
+
+ Collections.sort(classList);
+ ClassDoc[] classes = new ClassDoc[classList.size()];
+ classes = (ClassDoc[])classList.toArray(classes);
+ processClasses(classes, false, pet);
+ }
+ registerPkgTracker(pet);
}
} // processPackages