--- old/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/DeprecatedAPIListBuilder.java Fri Jan 22 12:20:26 2016 +++ /dev/null Fri Jan 22 12:20:26 2016 @@ -1,167 +0,0 @@ -/* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package com.sun.tools.doclets.internal.toolkit.util; - -import java.util.*; - -import com.sun.javadoc.*; -import com.sun.tools.doclets.internal.toolkit.Configuration; - -/** - * Build list of all the deprecated packages, classes, constructors, fields and methods. - * - *

This is NOT part of any supported API. - * If you write code that depends on this, you do so at your own risk. - * This code and its internal interfaces are subject to change or - * deletion without notice. - * - * @author Atul M Dambalkar - */ -public class DeprecatedAPIListBuilder { - - public static final int NUM_TYPES = 12; - - public static final int PACKAGE = 0; - public static final int INTERFACE = 1; - public static final int CLASS = 2; - public static final int ENUM = 3; - public static final int EXCEPTION = 4; - public static final int ERROR = 5; - public static final int ANNOTATION_TYPE = 6; - public static final int FIELD = 7; - public static final int METHOD = 8; - public static final int CONSTRUCTOR = 9; - public static final int ENUM_CONSTANT = 10; - public static final int ANNOTATION_TYPE_MEMBER = 11; - - /** - * List of deprecated type Lists. - */ - private List> deprecatedLists; - private final Configuration configuration; - private final Utils utils; - - /** - * Constructor. - * - * @param configuration the current configuration of the doclet - */ - public DeprecatedAPIListBuilder(Configuration configuration) { - this.configuration = configuration; - this.utils = configuration.utils; - deprecatedLists = new ArrayList<>(); - for (int i = 0; i < NUM_TYPES; i++) { - deprecatedLists.add(i, new ArrayList()); - } - buildDeprecatedAPIInfo(); - } - - /** - * Build the sorted list of all the deprecated APIs in this run. - * Build separate lists for deprecated packages, classes, constructors, - * methods and fields. - * - * @param configuration the current configuration of the doclet. - */ - private void buildDeprecatedAPIInfo() { - Set packages = configuration.packages; - for (PackageDoc pkg : packages) { - if (utils.isDeprecated(pkg)) { - getList(PACKAGE).add(pkg); - } - } - for (ClassDoc cd : configuration.root.classes()) { - if (utils.isDeprecated(cd)) { - if (cd.isOrdinaryClass()) { - getList(CLASS).add(cd); - } else if (cd.isInterface()) { - getList(INTERFACE).add(cd); - } else if (cd.isException()) { - getList(EXCEPTION).add(cd); - } else if (cd.isEnum()) { - getList(ENUM).add(cd); - } else if (cd.isError()) { - getList(ERROR).add(cd); - } else if (cd.isAnnotationType()) { - getList(ANNOTATION_TYPE).add(cd); - } - } - composeDeprecatedList(getList(FIELD), cd.fields()); - composeDeprecatedList(getList(METHOD), cd.methods()); - composeDeprecatedList(getList(CONSTRUCTOR), cd.constructors()); - if (cd.isEnum()) { - composeDeprecatedList(getList(ENUM_CONSTANT), cd.enumConstants()); - } - if (cd.isAnnotationType()) { - composeDeprecatedList(getList(ANNOTATION_TYPE_MEMBER), - ((AnnotationTypeDoc) cd).elements()); - } - } - sortDeprecatedLists(); - } - - /** - * Add the members into a single list of deprecated members. - * - * @param list List of all the particular deprecated members, e.g. methods. - * @param members members to be added in the list. - */ - private void composeDeprecatedList(List list, MemberDoc[] members) { - for (MemberDoc member : members) { - if (utils.isDeprecated(member)) { - list.add(member); - } - } - } - - /** - * Sort the deprecated lists for class kinds, fields, methods and - * constructors. - */ - private void sortDeprecatedLists() { - for (int i = 0; i < NUM_TYPES; i++) { - Collections.sort(getList(i)); - } - } - - /** - * Return the list of deprecated Doc objects of a given type. - * - * @param type the constant representing the type of list being returned. - */ - public List getList(int type) { - return deprecatedLists.get(type); - } - - /** - * Return true if the list of a given type has size greater than 0. - * - * @param type the type of list being checked. - */ - public boolean hasDocumentation(int type) { - return (deprecatedLists.get(type)).size() > 0; - } -} --- /dev/null Fri Jan 22 12:20:26 2016 +++ new/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DeprecatedAPIListBuilder.java Fri Jan 22 12:20:25 2016 @@ -0,0 +1,178 @@ +/* + * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.javadoc.internal.doclets.toolkit.util; + +import java.util.*; + +import javax.lang.model.element.Element; +import javax.lang.model.element.PackageElement; +import javax.lang.model.element.TypeElement; + +import jdk.javadoc.internal.doclets.toolkit.Configuration; + +/** + * Build list of all the deprecated packages, classes, constructors, fields and methods. + * + *

This is NOT part of any supported API. + * If you write code that depends on this, you do so at your own risk. + * This code and its internal interfaces are subject to change or + * deletion without notice. + * + * @author Atul M Dambalkar + */ +public class DeprecatedAPIListBuilder { + /** + * List of deprecated type Lists. + */ + private final Map> deprecatedMap; + private final Configuration configuration; + private final Utils utils; + public static enum DeprElementKind { + PACKAGE, + INTERFACE, + CLASS, + ENUM, + EXCEPTION, // no ElementKind mapping + ERROR, // no ElementKind mapping + ANNOTATION_TYPE, + FIELD, + METHOD, + CONSTRUCTOR, + ENUM_CONSTANT, + ANNOTATION_TYPE_MEMBER // no ElementKind mapping + }; + /** + * Constructor. + * + * @param configuration the current configuration of the doclet + */ + public DeprecatedAPIListBuilder(Configuration configuration) { + this.configuration = configuration; + this.utils = configuration.utils; + deprecatedMap = new EnumMap<>(DeprElementKind.class); + for (DeprElementKind kind : DeprElementKind.values()) { + deprecatedMap.put(kind, + new TreeSet<>(utils.makeGeneralPurposeComparator())); + } + buildDeprecatedAPIInfo(); + } + + /** + * Build the sorted list of all the deprecated APIs in this run. + * Build separate lists for deprecated packages, classes, constructors, + * methods and fields. + * + * @param configuration the current configuration of the doclet. + */ + private void buildDeprecatedAPIInfo() { + SortedSet packages = configuration.packages; + SortedSet pset = deprecatedMap.get(DeprElementKind.PACKAGE); + for (Element pe : packages) { + if (utils.isDeprecated(pe)) { + pset.add(pe); + } + } + deprecatedMap.put(DeprElementKind.PACKAGE, pset); + for (Element e : configuration.root.getIncludedClasses()) { + TypeElement te = (TypeElement)e; + SortedSet eset; + if (utils.isDeprecated(e)) { + switch (e.getKind()) { + case ANNOTATION_TYPE: + eset = deprecatedMap.get(DeprElementKind.ANNOTATION_TYPE); + eset.add(e); + break; + case CLASS: + if (utils.isError(te)) { + eset = deprecatedMap.get(DeprElementKind.ERROR); + } else if (utils.isException(te)) { + eset = deprecatedMap.get(DeprElementKind.EXCEPTION); + } else { + eset = deprecatedMap.get(DeprElementKind.CLASS); + } + eset.add(e); + break; + case INTERFACE: + eset = deprecatedMap.get(DeprElementKind.INTERFACE); + eset.add(e); + break; + case ENUM: + eset = deprecatedMap.get(DeprElementKind.ENUM); + eset.add(e); + break; + } + } + composeDeprecatedList(deprecatedMap.get(DeprElementKind.FIELD), + utils.getFields(te)); + composeDeprecatedList(deprecatedMap.get(DeprElementKind.METHOD), + utils.getMethods(te)); + composeDeprecatedList(deprecatedMap.get(DeprElementKind.CONSTRUCTOR), + utils.getConstructors(te)); + if (utils.isEnum(e)) { + composeDeprecatedList(deprecatedMap.get(DeprElementKind.ENUM_CONSTANT), + utils.getEnumConstants(te)); + } + if (utils.isAnnotationType(e)) { + composeDeprecatedList(deprecatedMap.get(DeprElementKind.ANNOTATION_TYPE_MEMBER), + utils.getAnnotationMembers(te)); + + } + } + } + + /** + * Add the members into a single list of deprecated members. + * + * @param list List of all the particular deprecated members, e.g. methods. + * @param members members to be added in the list. + */ + private void composeDeprecatedList(SortedSet sset, List members) { + for (Element member : members) { + if (utils.isDeprecated(member)) { + sset.add(member); + } + } + } + + /** + * Return the list of deprecated elements of a given type. + * + * @param kind the DeprElementKind + * @return + */ + public SortedSet getSet(DeprElementKind kind) { + return deprecatedMap.get(kind); + } + + /** + * Return true if the list of a given type has size greater than 0. + * + * @param type the type of list being checked. + */ + public boolean hasDocumentation(DeprElementKind kind) { + return !deprecatedMap.get(kind).isEmpty(); + } +}