001: /*
002: * Copyright 1998-2004 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package com.sun.tools.doclets.internal.toolkit.util;
027:
028: import com.sun.javadoc.*;
029: import java.util.*;
030:
031: /**
032: * Build list of all the deprecated classes, constructors, fields and methods.
033: *
034: * @author Atul M Dambalkar
035: */
036: public class DeprecatedAPIListBuilder {
037:
038: public static final int NUM_TYPES = 11;
039:
040: public static final int INTERFACE = 0;
041: public static final int CLASS = 1;
042: public static final int ENUM = 2;
043: public static final int EXCEPTION = 3;
044: public static final int ERROR = 4;
045: public static final int ANNOTATION_TYPE = 5;
046: public static final int FIELD = 6;
047: public static final int METHOD = 7;
048: public static final int CONSTRUCTOR = 8;
049: public static final int ENUM_CONSTANT = 9;
050: public static final int ANNOTATION_TYPE_MEMBER = 10;
051:
052: /**
053: * List of deprecated type Lists.
054: */
055: private List deprecatedLists;
056:
057: /**
058: * Constructor.
059: *
060: * @param root Root of the tree.
061: */
062: public DeprecatedAPIListBuilder(RootDoc root) {
063: deprecatedLists = new ArrayList();
064: for (int i = 0; i < NUM_TYPES; i++) {
065: deprecatedLists.add(i, new ArrayList());
066: }
067: buildDeprecatedAPIInfo(root);
068: }
069:
070: /**
071: * Build the sorted list of all the deprecated APIs in this run.
072: * Build separate lists for deprecated classes, constructors, methods and
073: * fields.
074: *
075: * @param root Root of the tree.
076: */
077: private void buildDeprecatedAPIInfo(RootDoc root) {
078: ClassDoc[] classes = root.classes();
079: for (int i = 0; i < classes.length; i++) {
080: ClassDoc cd = classes[i];
081: if (Util.isDeprecated(cd)) {
082: if (cd.isOrdinaryClass()) {
083: getList(CLASS).add(cd);
084: } else if (cd.isInterface()) {
085: getList(INTERFACE).add(cd);
086: } else if (cd.isException()) {
087: getList(EXCEPTION).add(cd);
088: } else if (cd.isEnum()) {
089: getList(ENUM).add(cd);
090: } else if (cd.isError()) {
091: getList(ERROR).add(cd);
092: } else if (cd.isAnnotationType()) {
093: getList(ANNOTATION_TYPE).add(cd);
094: }
095: }
096: composeDeprecatedList(getList(FIELD), cd.fields());
097: composeDeprecatedList(getList(METHOD), cd.methods());
098: composeDeprecatedList(getList(CONSTRUCTOR), cd
099: .constructors());
100: if (cd.isEnum()) {
101: composeDeprecatedList(getList(ENUM_CONSTANT), cd
102: .enumConstants());
103: }
104: if (cd.isAnnotationType()) {
105: composeDeprecatedList(getList(ANNOTATION_TYPE_MEMBER),
106: ((AnnotationTypeDoc) cd).elements());
107: }
108: }
109: sortDeprecatedLists();
110: }
111:
112: /**
113: * Add the members into a single list of deprecated members.
114: *
115: * @param list List of all the particular deprecated members, e.g. methods.
116: * @param members members to be added in the list.
117: */
118: private void composeDeprecatedList(List list, MemberDoc[] members) {
119: for (int i = 0; i < members.length; i++) {
120: if (Util.isDeprecated(members[i])) {
121: list.add(members[i]);
122: }
123: }
124: }
125:
126: /**
127: * Sort the deprecated lists for class kinds, fields, methods and
128: * constructors.
129: */
130: private void sortDeprecatedLists() {
131: for (int i = 0; i < NUM_TYPES; i++) {
132: Collections.sort(getList(i));
133: }
134: }
135:
136: /**
137: * Return the list of deprecated Doc objects of a given type.
138: *
139: * @param the constant representing the type of list being returned.
140: */
141: public List getList(int type) {
142: return (List) deprecatedLists.get(type);
143: }
144:
145: /**
146: * Return true if the list of a given type has size greater than 0.
147: *
148: * @param type the type of list being checked.
149: */
150: public boolean hasDocumentation(int type) {
151: return ((List) deprecatedLists.get(type)).size() > 0;
152: }
153: }
|