src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassDocCatalog.java

Thu, 02 Oct 2008 19:58:40 -0700

author
xdono
date
Thu, 02 Oct 2008 19:58:40 -0700
changeset 117
24a47c3062fe
parent 74
5a9172b251dd
child 554
9d9f26857129
permissions
-rw-r--r--

6754988: Update copyright year
Summary: Update for files that have been modified starting July 2008
Reviewed-by: ohair, tbell

duke@1 1 /*
xdono@117 2 * Copyright 2001-2008 Sun Microsystems, Inc. All Rights Reserved.
duke@1 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@1 4 *
duke@1 5 * This code is free software; you can redistribute it and/or modify it
duke@1 6 * under the terms of the GNU General Public License version 2 only, as
duke@1 7 * published by the Free Software Foundation. Sun designates this
duke@1 8 * particular file as subject to the "Classpath" exception as provided
duke@1 9 * by Sun in the LICENSE file that accompanied this code.
duke@1 10 *
duke@1 11 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@1 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@1 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@1 14 * version 2 for more details (a copy is included in the LICENSE file that
duke@1 15 * accompanied this code).
duke@1 16 *
duke@1 17 * You should have received a copy of the GNU General Public License version
duke@1 18 * 2 along with this work; if not, write to the Free Software Foundation,
duke@1 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@1 20 *
duke@1 21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
duke@1 22 * CA 95054 USA or visit www.sun.com if you need additional information or
duke@1 23 * have any questions.
duke@1 24 */
duke@1 25
duke@1 26 package com.sun.tools.doclets.internal.toolkit.util;
duke@1 27
duke@1 28 import com.sun.javadoc.*;
duke@1 29 import java.util.*;
duke@1 30
duke@1 31 /**
duke@1 32 * This class acts as an artificial PackageDoc for classes specified
duke@1 33 * on the command line when running Javadoc. For example, if you
duke@1 34 * specify several classes from package java.lang, this class will catalog
duke@1 35 * those classes so that we can retrieve all of the classes from a particular
duke@1 36 * package later.
duke@1 37 *
duke@1 38 * This code is not part of an API.
duke@1 39 * It is implementation that is subject to change.
duke@1 40 * Do not use it as an API
duke@1 41 *
duke@1 42 * @author Jamie Ho
duke@1 43 * @since 1.4
duke@1 44 */
duke@1 45
duke@1 46 public class ClassDocCatalog {
duke@1 47
duke@1 48 /**
duke@1 49 * Stores the set of packages that the classes specified on the command line
duke@1 50 * belong to. Note that the default package is "".
duke@1 51 */
jjg@74 52 private Set<String> packageSet;
duke@1 53
duke@1 54
duke@1 55 /**
duke@1 56 * Stores all classes for each package
duke@1 57 */
jjg@74 58 private Map<String,Set<ClassDoc>> allClasses;
duke@1 59
duke@1 60 /**
duke@1 61 * Stores ordinary classes (excluding Exceptions and Errors) for each
duke@1 62 * package
duke@1 63 */
jjg@74 64 private Map<String,Set<ClassDoc>> ordinaryClasses;
duke@1 65
duke@1 66 /**
duke@1 67 * Stores exceptions for each package
duke@1 68 */
jjg@74 69 private Map<String,Set<ClassDoc>> exceptions;
duke@1 70
duke@1 71 /**
duke@1 72 * Stores enums for each package.
duke@1 73 */
jjg@74 74 private Map<String,Set<ClassDoc>> enums;
duke@1 75
duke@1 76 /**
duke@1 77 * Stores annotation types for each package.
duke@1 78 */
jjg@74 79 private Map<String,Set<ClassDoc>> annotationTypes;
duke@1 80
duke@1 81 /**
duke@1 82 * Stores errors for each package
duke@1 83 */
jjg@74 84 private Map<String,Set<ClassDoc>> errors;
duke@1 85
duke@1 86 /**
duke@1 87 * Stores interfaces for each package
duke@1 88 */
jjg@74 89 private Map<String,Set<ClassDoc>> interfaces;
duke@1 90
duke@1 91 /**
duke@1 92 * Construct a new ClassDocCatalog.
duke@1 93 *
duke@1 94 * @param classdocs the array of ClassDocs to catalog
duke@1 95 */
duke@1 96 public ClassDocCatalog (ClassDoc[] classdocs) {
duke@1 97 init();
duke@1 98 for (int i = 0; i < classdocs.length; i++) {
duke@1 99 addClassDoc(classdocs[i]);
duke@1 100 }
duke@1 101 }
duke@1 102
duke@1 103 /**
duke@1 104 * Construct a new ClassDocCatalog.
duke@1 105 *
duke@1 106 */
duke@1 107 public ClassDocCatalog () {
duke@1 108 init();
duke@1 109 }
duke@1 110
duke@1 111 private void init() {
jjg@74 112 allClasses = new HashMap<String,Set<ClassDoc>>();
jjg@74 113 ordinaryClasses = new HashMap<String,Set<ClassDoc>>();
jjg@74 114 exceptions = new HashMap<String,Set<ClassDoc>>();
jjg@74 115 enums = new HashMap<String,Set<ClassDoc>>();
jjg@74 116 annotationTypes = new HashMap<String,Set<ClassDoc>>();
jjg@74 117 errors = new HashMap<String,Set<ClassDoc>>();
jjg@74 118 interfaces = new HashMap<String,Set<ClassDoc>>();
jjg@74 119 packageSet = new HashSet<String>();
duke@1 120 }
duke@1 121
duke@1 122 /**
duke@1 123 * Add the given class to the catalog.
duke@1 124 * @param classdoc the ClassDoc to add to the catelog.
duke@1 125 */
duke@1 126 public void addClassDoc(ClassDoc classdoc) {
duke@1 127 if (classdoc == null) {
duke@1 128 return;
duke@1 129 }
duke@1 130 addClass(classdoc, allClasses);
duke@1 131 if (classdoc.isOrdinaryClass()) {
duke@1 132 addClass(classdoc, ordinaryClasses);
duke@1 133 } else if (classdoc.isException()) {
duke@1 134 addClass(classdoc, exceptions);
duke@1 135 } else if (classdoc.isEnum()) {
duke@1 136 addClass(classdoc, enums);
duke@1 137 } else if (classdoc.isAnnotationType()) {
duke@1 138 addClass(classdoc, annotationTypes);
duke@1 139 } else if (classdoc.isError()) {
duke@1 140 addClass(classdoc, errors);
duke@1 141 } else if (classdoc.isInterface()) {
duke@1 142 addClass(classdoc, interfaces);
duke@1 143 }
duke@1 144 }
duke@1 145
duke@1 146 /**
duke@1 147 * Add the given class to the given map.
duke@1 148 * @param classdoc the ClassDoc to add to the catelog.
duke@1 149 * @param map the Map to add the ClassDoc to.
duke@1 150 */
jjg@74 151 private void addClass(ClassDoc classdoc, Map<String,Set<ClassDoc>> map) {
duke@1 152
duke@1 153 PackageDoc pkg = classdoc.containingPackage();
duke@1 154 if (pkg.isIncluded()) {
duke@1 155 //No need to catalog this class since it's package is
duke@1 156 //included on the command line
duke@1 157 return;
duke@1 158 }
duke@1 159 String key = Util.getPackageName(pkg);
jjg@74 160 Set<ClassDoc> s = map.get(key);
duke@1 161 if (s == null) {
duke@1 162 packageSet.add(key);
jjg@74 163 s = new HashSet<ClassDoc>();
duke@1 164 }
duke@1 165 s.add(classdoc);
duke@1 166 map.put(key, s);
duke@1 167
duke@1 168 }
duke@1 169
jjg@74 170 private ClassDoc[] getArray(Map<String,Set<ClassDoc>> m, String key) {
jjg@74 171 Set<ClassDoc> s = m.get(key);
duke@1 172 if (s == null) {
duke@1 173 return new ClassDoc[] {};
duke@1 174 } else {
jjg@74 175 return s.toArray(new ClassDoc[] {});
duke@1 176 }
duke@1 177 }
duke@1 178
duke@1 179 /**
duke@1 180 * Return all of the classes specified on the command-line that
duke@1 181 * belong to the given package.
duke@1 182 * @param packageDoc the package to return the classes for.
duke@1 183 */
duke@1 184 public ClassDoc[] allClasses(PackageDoc pkgDoc) {
duke@1 185 return pkgDoc.isIncluded() ?
duke@1 186 pkgDoc.allClasses() :
duke@1 187 getArray(allClasses, Util.getPackageName(pkgDoc));
duke@1 188 }
duke@1 189
duke@1 190 /**
duke@1 191 * Return all of the classes specified on the command-line that
duke@1 192 * belong to the given package.
duke@1 193 * @param packageName the name of the package specified on the
duke@1 194 * command-line.
duke@1 195 */
duke@1 196 public ClassDoc[] allClasses(String packageName) {
duke@1 197 return getArray(allClasses, packageName);
duke@1 198 }
duke@1 199
duke@1 200 /**
duke@1 201 * Return the array of package names that this catalog stores
duke@1 202 * ClassDocs for.
duke@1 203 */
duke@1 204 public String[] packageNames() {
jjg@74 205 return packageSet.toArray(new String[] {});
duke@1 206 }
duke@1 207
duke@1 208 /**
duke@1 209 * Return true if the given package is known to this catalog.
duke@1 210 * @param packageName the name to check.
duke@1 211 * @return true if this catalog has any information about
duke@1 212 * classes in the given package.
duke@1 213 */
duke@1 214 public boolean isKnownPackage(String packageName) {
duke@1 215 return packageSet.contains(packageName);
duke@1 216 }
duke@1 217
duke@1 218
duke@1 219 /**
duke@1 220 * Return all of the errors specified on the command-line
duke@1 221 * that belong to the given package.
duke@1 222 * @param packageName the name of the package specified on the
duke@1 223 * command-line.
duke@1 224 */
duke@1 225 public ClassDoc[] errors(String packageName) {
duke@1 226 return getArray(errors, packageName);
duke@1 227 }
duke@1 228
duke@1 229 /**
duke@1 230 * Return all of the exceptions specified on the command-line
duke@1 231 * that belong to the given package.
duke@1 232 * @param packageName the name of the package specified on the
duke@1 233 * command-line.
duke@1 234 */
duke@1 235 public ClassDoc[] exceptions(String packageName) {
duke@1 236 return getArray(exceptions, packageName);
duke@1 237 }
duke@1 238
duke@1 239 /**
duke@1 240 * Return all of the enums specified on the command-line
duke@1 241 * that belong to the given package.
duke@1 242 * @param packageName the name of the package specified on the
duke@1 243 * command-line.
duke@1 244 */
duke@1 245 public ClassDoc[] enums(String packageName) {
duke@1 246 return getArray(enums, packageName);
duke@1 247 }
duke@1 248
duke@1 249 /**
duke@1 250 * Return all of the annotation types specified on the command-line
duke@1 251 * that belong to the given package.
duke@1 252 * @param packageName the name of the package specified on the
duke@1 253 * command-line.
duke@1 254 */
duke@1 255 public ClassDoc[] annotationTypes(String packageName) {
duke@1 256 return getArray(annotationTypes, packageName);
duke@1 257 }
duke@1 258
duke@1 259 /**
duke@1 260 * Return all of the interfaces specified on the command-line
duke@1 261 * that belong to the given package.
duke@1 262 * @param packageName the name of the package specified on the
duke@1 263 * command-line.
duke@1 264 */
duke@1 265 public ClassDoc[] interfaces(String packageName) {
duke@1 266 return getArray(interfaces, packageName);
duke@1 267 }
duke@1 268
duke@1 269 /**
duke@1 270 * Return all of the ordinary classes specified on the command-line
duke@1 271 * that belong to the given package.
duke@1 272 * @param packageName the name of the package specified on the
duke@1 273 * command-line.
duke@1 274 */
duke@1 275 public ClassDoc[] ordinaryClasses(String packageName) {
duke@1 276 return getArray(ordinaryClasses, packageName);
duke@1 277 }
duke@1 278 }

mercurial