src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassUseWriter.java

Print this page

        

@@ -21,28 +21,40 @@
  * 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.formats.html;
+package jdk.javadoc.internal.doclets.formats.html;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import com.sun.javadoc.*;
-import com.sun.tools.doclets.formats.html.markup.*;
-import com.sun.tools.doclets.internal.toolkit.*;
-import com.sun.tools.doclets.internal.toolkit.util.*;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+import javax.tools.Diagnostic;
 
+import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
+import jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants;
+import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
+import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
+import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
+import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
+import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.util.ClassTree;
+import jdk.javadoc.internal.doclets.toolkit.util.ClassUseMapper;
+import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
+import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
+import jdk.javadoc.internal.doclets.toolkit.util.DocletAbortException;
+
 /**
  * Generate class usage information.
  *
  *  <p><b>This is NOT part of any supported API.
  *  If you write code that depends on this, you do so at your own risk.

@@ -52,34 +64,34 @@
  * @author Robert G. Field
  * @author Bhavesh Patel (Modified)
  */
 public class ClassUseWriter extends SubWriterHolderWriter {
 
-    final ClassDoc classdoc;
-    Set<PackageDoc> pkgToPackageAnnotations = null;
-    final Map<String,List<ProgramElementDoc>> pkgToClassTypeParameter;
-    final Map<String,List<ProgramElementDoc>> pkgToClassAnnotations;
-    final Map<String,List<ProgramElementDoc>> pkgToMethodTypeParameter;
-    final Map<String,List<ProgramElementDoc>> pkgToMethodArgTypeParameter;
-    final Map<String,List<ProgramElementDoc>> pkgToMethodReturnTypeParameter;
-    final Map<String,List<ProgramElementDoc>> pkgToMethodAnnotations;
-    final Map<String,List<ProgramElementDoc>> pkgToMethodParameterAnnotations;
-    final Map<String,List<ProgramElementDoc>> pkgToFieldTypeParameter;
-    final Map<String,List<ProgramElementDoc>> pkgToFieldAnnotations;
-    final Map<String,List<ProgramElementDoc>> pkgToSubclass;
-    final Map<String,List<ProgramElementDoc>> pkgToSubinterface;
-    final Map<String,List<ProgramElementDoc>> pkgToImplementingClass;
-    final Map<String,List<ProgramElementDoc>> pkgToField;
-    final Map<String,List<ProgramElementDoc>> pkgToMethodReturn;
-    final Map<String,List<ProgramElementDoc>> pkgToMethodArgs;
-    final Map<String,List<ProgramElementDoc>> pkgToMethodThrows;
-    final Map<String,List<ProgramElementDoc>> pkgToConstructorAnnotations;
-    final Map<String,List<ProgramElementDoc>> pkgToConstructorParameterAnnotations;
-    final Map<String,List<ProgramElementDoc>> pkgToConstructorArgs;
-    final Map<String,List<ProgramElementDoc>> pkgToConstructorArgTypeParameter;
-    final Map<String,List<ProgramElementDoc>> pkgToConstructorThrows;
-    final SortedSet<PackageDoc> pkgSet;
+    final TypeElement typeElement;
+    Set<PackageElement> pkgToPackageAnnotations = null;
+    final Map<PackageElement, List<Element>> pkgToClassTypeParameter;
+    final Map<PackageElement, List<Element>> pkgToClassAnnotations;
+    final Map<PackageElement, List<Element>> pkgToMethodTypeParameter;
+    final Map<PackageElement, List<Element>> pkgToMethodArgTypeParameter;
+    final Map<PackageElement, List<Element>> pkgToMethodReturnTypeParameter;
+    final Map<PackageElement, List<Element>> pkgToMethodAnnotations;
+    final Map<PackageElement, List<Element>> pkgToMethodParameterAnnotations;
+    final Map<PackageElement, List<Element>> pkgToFieldTypeParameter;
+    final Map<PackageElement, List<Element>> pkgToFieldAnnotations;
+    final Map<PackageElement, List<Element>> pkgToSubclass;
+    final Map<PackageElement, List<Element>> pkgToSubinterface;
+    final Map<PackageElement, List<Element>> pkgToImplementingClass;
+    final Map<PackageElement, List<Element>> pkgToField;
+    final Map<PackageElement, List<Element>> pkgToMethodReturn;
+    final Map<PackageElement, List<Element>> pkgToMethodArgs;
+    final Map<PackageElement, List<Element>> pkgToMethodThrows;
+    final Map<PackageElement, List<Element>> pkgToConstructorAnnotations;
+    final Map<PackageElement, List<Element>> pkgToConstructorParameterAnnotations;
+    final Map<PackageElement, List<Element>> pkgToConstructorArgs;
+    final Map<PackageElement, List<Element>> pkgToConstructorArgTypeParameter;
+    final Map<PackageElement, List<Element>> pkgToConstructorThrows;
+    final SortedSet<PackageElement> pkgSet;
     final MethodWriterImpl methodSubWriter;
     final ConstructorWriterImpl constrSubWriter;
     final FieldWriterImpl fieldSubWriter;
     final NestedClassWriterImpl classSubWriter;
     // Summary for various use tables.

@@ -102,26 +114,28 @@
      * @throws IOException
      * @throws DocletAbortException
      */
     public ClassUseWriter(ConfigurationImpl configuration,
                           ClassUseMapper mapper, DocPath filename,
-                          ClassDoc classdoc) throws IOException {
+                          TypeElement typeElement) throws IOException {
         super(configuration, filename);
-        this.classdoc = classdoc;
-        if (mapper.classToPackageAnnotations.containsKey(classdoc.qualifiedName()))
-                pkgToPackageAnnotations = new TreeSet<>(mapper.classToPackageAnnotations.get(classdoc.qualifiedName()));
-        configuration.currentcd = classdoc;
-        this.pkgSet = new TreeSet<>();
+        this.typeElement = typeElement;
+        if (mapper.classToPackageAnnotations.containsKey(typeElement)) {
+            pkgToPackageAnnotations = new TreeSet<>(utils.makeClassUseComparator());
+            pkgToPackageAnnotations.addAll(mapper.classToPackageAnnotations.get(typeElement));
+        }
+        configuration.currentTypeElement = typeElement;
+        this.pkgSet = new TreeSet<>(utils.makePackageComparator());
         this.pkgToClassTypeParameter = pkgDivide(mapper.classToClassTypeParam);
         this.pkgToClassAnnotations = pkgDivide(mapper.classToClassAnnotations);
-        this.pkgToMethodTypeParameter = pkgDivide(mapper.classToExecMemberDocTypeParam);
-        this.pkgToMethodArgTypeParameter = pkgDivide(mapper.classToExecMemberDocArgTypeParam);
-        this.pkgToFieldTypeParameter = pkgDivide(mapper.classToFieldDocTypeParam);
-        this.pkgToFieldAnnotations = pkgDivide(mapper.annotationToFieldDoc);
-        this.pkgToMethodReturnTypeParameter = pkgDivide(mapper.classToExecMemberDocReturnTypeParam);
-        this.pkgToMethodAnnotations = pkgDivide(mapper.classToExecMemberDocAnnotations);
-        this.pkgToMethodParameterAnnotations = pkgDivide(mapper.classToExecMemberDocParamAnnotation);
+        this.pkgToMethodTypeParameter = pkgDivide(mapper.classToMethodTypeParam);
+        this.pkgToMethodArgTypeParameter = pkgDivide(mapper.classToMethodArgTypeParam);
+        this.pkgToFieldTypeParameter = pkgDivide(mapper.classToFieldTypeParam);
+        this.pkgToFieldAnnotations = pkgDivide(mapper.annotationToField);
+        this.pkgToMethodReturnTypeParameter = pkgDivide(mapper.classToMethodReturnTypeParam);
+        this.pkgToMethodAnnotations = pkgDivide(mapper.classToMethodAnnotations);
+        this.pkgToMethodParameterAnnotations = pkgDivide(mapper.classToMethodParamAnnotation);
         this.pkgToSubclass = pkgDivide(mapper.classToSubclass);
         this.pkgToSubinterface = pkgDivide(mapper.classToSubinterface);
         this.pkgToImplementingClass = pkgDivide(mapper.classToImplementingClass);
         this.pkgToField = pkgDivide(mapper.classToField);
         this.pkgToMethodReturn = pkgDivide(mapper.classToMethodReturn);

@@ -128,18 +142,19 @@
         this.pkgToMethodArgs = pkgDivide(mapper.classToMethodArgs);
         this.pkgToMethodThrows = pkgDivide(mapper.classToMethodThrows);
         this.pkgToConstructorAnnotations = pkgDivide(mapper.classToConstructorAnnotations);
         this.pkgToConstructorParameterAnnotations = pkgDivide(mapper.classToConstructorParamAnnotation);
         this.pkgToConstructorArgs = pkgDivide(mapper.classToConstructorArgs);
-        this.pkgToConstructorArgTypeParameter = pkgDivide(mapper.classToConstructorDocArgTypeParam);
+        this.pkgToConstructorArgTypeParameter = pkgDivide(mapper.classToConstructorArgTypeParam);
         this.pkgToConstructorThrows = pkgDivide(mapper.classToConstructorThrows);
         //tmp test
         if (pkgSet.size() > 0 &&
-            mapper.classToPackage.containsKey(classdoc.qualifiedName()) &&
-            !pkgSet.equals(mapper.classToPackage.get(classdoc.qualifiedName()))) {
-            configuration.root.printWarning("Internal error: package sets don't match: " + pkgSet + " with: " +
-                                   mapper.classToPackage.get(classdoc.qualifiedName()));
+            mapper.classToPackage.containsKey(this.typeElement) &&
+            !pkgSet.equals(mapper.classToPackage.get(this.typeElement))) {
+            configuration.reporter.print(Diagnostic.Kind.WARNING,
+                    "Internal error: package sets don't match: "
+                    + pkgSet + " with: " + mapper.classToPackage.get(this.typeElement));
         }
         methodSubWriter = new MethodWriterImpl(this);
         constrSubWriter = new ConstructorWriterImpl(this);
         fieldSubWriter = new FieldWriterImpl(this);
         classSubWriter = new NestedClassWriterImpl(this);

@@ -159,62 +174,59 @@
 
     /**
      * Write out class use pages.
      * @throws DocletAbortException
      */
-    public static void generate(ConfigurationImpl configuration,
-                                ClassTree classtree)  {
+    public static void generate(ConfigurationImpl configuration, ClassTree classtree)  {
         ClassUseMapper mapper = new ClassUseMapper(configuration, classtree);
-        for (ClassDoc aClass : configuration.root.classes()) {
+        for (TypeElement aClass : configuration.root.getIncludedClasses()) {
             // If -nodeprecated option is set and the containing package is marked
             // as deprecated, do not generate the class-use page. We will still generate
             // the class-use page if the class is marked as deprecated but the containing
             // package is not since it could still be linked from that package-use page.
             if (!(configuration.nodeprecated &&
-                  configuration.utils.isDeprecated(aClass.containingPackage())))
+                  configuration.utils.isDeprecated(configuration.utils.containingPackage(aClass))))
                 ClassUseWriter.generate(configuration, mapper, aClass);
         }
-        for (PackageDoc pkg : configuration.packages) {
+        for (PackageElement pkg : configuration.packages) {
             // If -nodeprecated option is set and the package is marked
             // as deprecated, do not generate the package-use page.
             if (!(configuration.nodeprecated && configuration.utils.isDeprecated(pkg)))
                 PackageUseWriter.generate(configuration, mapper, pkg);
         }
     }
 
-    private Map<String,List<ProgramElementDoc>> pkgDivide(Map<String,? extends List<? extends ProgramElementDoc>> classMap) {
-        Map<String,List<ProgramElementDoc>> map = new HashMap<>();
-        List<? extends ProgramElementDoc> list= classMap.get(classdoc.qualifiedName());
-        if (list != null) {
-            Collections.sort(list, utils.makeComparatorForClassUse());
-            for (ProgramElementDoc doc : list) {
-                PackageDoc pkg = doc.containingPackage();
+    private Map<PackageElement, List<Element>> pkgDivide(Map<TypeElement, ? extends List<? extends Element>> classMap) {
+        Map<PackageElement, List<Element>> map = new HashMap<>();
+        List<? extends Element> elements = (List<? extends Element>) classMap.get(typeElement);
+        if (elements != null) {
+            Collections.sort(elements, utils.makeClassUseComparator());
+            for (Element e : elements) {
+                PackageElement pkg = utils.containingPackage(e);
                 pkgSet.add(pkg);
-                List<ProgramElementDoc> inPkg = map.get(pkg.name());
+                List<Element> inPkg = map.get(pkg);
                 if (inPkg == null) {
                     inPkg = new ArrayList<>();
-                    map.put(pkg.name(), inPkg);
+                    map.put(pkg, inPkg);
                 }
-                inPkg.add(doc);
+                inPkg.add(e);
             }
         }
         return map;
     }
 
     /**
      * Generate a class page.
      */
-    public static void generate(ConfigurationImpl configuration,
-                                ClassUseMapper mapper, ClassDoc classdoc) {
+    public static void generate(ConfigurationImpl configuration, ClassUseMapper mapper,
+                                TypeElement typeElement) {
         ClassUseWriter clsgen;
-        DocPath path = DocPath.forPackage(classdoc)
+        DocPath path = DocPath.forPackage(configuration.utils, typeElement)
                 .resolve(DocPaths.CLASS_USE)
-                .resolve(DocPath.forName(classdoc));
+                              .resolve(DocPath.forName(configuration.utils, typeElement));
         try {
-            clsgen = new ClassUseWriter(configuration,
-                                        mapper, path,
-                                        classdoc);
+            clsgen = new ClassUseWriter(configuration, mapper, path, typeElement);
             clsgen.generateClassUseFile();
             clsgen.close();
         } catch (IOException exc) {
             configuration.standardmessage.
                 error("doclet.exception_encountered",

@@ -222,21 +234,21 @@
             throw new DocletAbortException(exc);
         }
     }
 
     /**
-     * Generate the class use list.
+     * Generate the class use elements.
      */
     protected void generateClassUseFile() throws IOException {
         HtmlTree body = getClassUseHeader();
         HtmlTree div = new HtmlTree(HtmlTag.DIV);
         div.addStyle(HtmlStyle.classUseContainer);
         if (pkgSet.size() > 0) {
             addClassUse(div);
         } else {
             div.addContent(getResource("doclet.ClassUse_No.usage.of.0",
-                    classdoc.qualifiedName()));
+                    utils.getFullyQualifiedName(typeElement)));
         }
         if (configuration.allowTag(HtmlTag.MAIN)) {
             mainTree.addContent(div);
             body.addContent(mainTree);
         } else {

@@ -268,71 +280,63 @@
         addClassList(ul);
         contentTree.addContent(ul);
     }
 
     /**
-     * Add the packages list that use the given class.
+     * Add the packages elements that use the given class.
      *
-     * @param contentTree the content tree to which the packages list will be added
+     * @param contentTree the content tree to which the packages elements will be added
      */
     protected void addPackageList(Content contentTree) throws IOException {
         Content caption = getTableCaption(configuration.getResource(
                 "doclet.ClassUse_Packages.that.use.0",
-                getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.CLASS_USE_HEADER, classdoc))));
+                getLink(new LinkInfoImpl(configuration,
+                        LinkInfoImpl.Kind.CLASS_USE_HEADER, typeElement))));
         Content table = (configuration.isOutputHtml5())
                 ? HtmlTree.TABLE(HtmlStyle.useSummary, caption)
                 : HtmlTree.TABLE(HtmlStyle.useSummary, useTableSummary, caption);
         table.addContent(getSummaryTableHeader(packageTableHeader, "col"));
         Content tbody = new HtmlTree(HtmlTag.TBODY);
-        Iterator<PackageDoc> it = pkgSet.iterator();
-        for (int i = 0; it.hasNext(); i++) {
-            PackageDoc pkg = it.next();
+        boolean altColor = true;
+        for (PackageElement pkg : pkgSet) {
             HtmlTree tr = new HtmlTree(HtmlTag.TR);
-            if (i % 2 == 0) {
-                tr.addStyle(HtmlStyle.altColor);
-            } else {
-                tr.addStyle(HtmlStyle.rowColor);
-            }
+            tr.addStyle(altColor ? HtmlStyle.altColor : HtmlStyle.rowColor);
+            altColor = !altColor;
             addPackageUse(pkg, tr);
             tbody.addContent(tr);
         }
         table.addContent(tbody);
         Content li = HtmlTree.LI(HtmlStyle.blockList, table);
         contentTree.addContent(li);
     }
 
     /**
-     * Add the package annotation list.
+     * Add the package annotation elements.
      *
-     * @param contentTree the content tree to which the package annotation list will be added
+     * @param contentTree the content tree to which the package annotation elements will be added
      */
     protected void addPackageAnnotationList(Content contentTree) throws IOException {
-        if ((!classdoc.isAnnotationType()) ||
+        if (!utils.isAnnotationType(typeElement) ||
                 pkgToPackageAnnotations == null ||
                 pkgToPackageAnnotations.isEmpty()) {
             return;
         }
         Content caption = getTableCaption(configuration.getResource(
                 "doclet.ClassUse_PackageAnnotation",
                 getLink(new LinkInfoImpl(configuration,
-                                LinkInfoImpl.Kind.CLASS_USE_HEADER, classdoc))));
+                        LinkInfoImpl.Kind.CLASS_USE_HEADER, typeElement))));
         Content table = (configuration.isOutputHtml5())
                 ? HtmlTree.TABLE(HtmlStyle.useSummary, caption)
                 : HtmlTree.TABLE(HtmlStyle.useSummary, useTableSummary, caption);
         table.addContent(getSummaryTableHeader(packageTableHeader, "col"));
         Content tbody = new HtmlTree(HtmlTag.TBODY);
-        Iterator<PackageDoc> it = pkgToPackageAnnotations.iterator();
-        for (int i = 0; it.hasNext(); i++) {
-            PackageDoc pkg = it.next();
+        boolean altColor = true;
+        for (PackageElement pkg : pkgToPackageAnnotations) {
             HtmlTree tr = new HtmlTree(HtmlTag.TR);
-            if (i % 2 == 0) {
-                tr.addStyle(HtmlStyle.altColor);
-            } else {
-                tr.addStyle(HtmlStyle.rowColor);
-            }
-            Content tdFirst = HtmlTree.TD(HtmlStyle.colFirst,
-                    getPackageLink(pkg, new StringContent(pkg.name())));
+            tr.addStyle(altColor ? HtmlStyle.altColor : HtmlStyle.rowColor);
+            altColor = !altColor;
+            Content tdFirst = HtmlTree.TD(HtmlStyle.colFirst, getPackageLink(pkg));
             tr.addContent(tdFirst);
             HtmlTree tdLast = new HtmlTree(HtmlTag.TD);
             tdLast.addStyle(HtmlStyle.colLast);
             addSummaryComment(pkg, tdLast);
             tr.addContent(tdLast);

@@ -342,25 +346,25 @@
         Content li = HtmlTree.LI(HtmlStyle.blockList, table);
         contentTree.addContent(li);
     }
 
     /**
-     * Add the class list that use the given class.
+     * Add the class elements that use the given class.
      *
-     * @param contentTree the content tree to which the class list will be added
+     * @param contentTree the content tree to which the class elements will be added
      */
     protected void addClassList(Content contentTree) throws IOException {
         HtmlTree ul = new HtmlTree(HtmlTag.UL);
         ul.addStyle(HtmlStyle.blockList);
-        for (PackageDoc pkg : pkgSet) {
+        for (PackageElement pkg : pkgSet) {
             Content markerAnchor = getMarkerAnchor(getPackageAnchorName(pkg));
             HtmlTree htmlTree = (configuration.allowTag(HtmlTag.SECTION))
                     ? HtmlTree.SECTION(markerAnchor)
                     : HtmlTree.LI(HtmlStyle.blockList, markerAnchor);
             Content link = getResource("doclet.ClassUse_Uses.of.0.in.1",
                                        getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.CLASS_USE_HEADER,
-                                                                classdoc)),
+                                                                typeElement)),
                                        getPackageLink(pkg, utils.getPackageName(pkg)));
             Content heading = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING, link);
             htmlTree.addContent(heading);
             addClassUse(pkg, htmlTree);
             if (configuration.allowTag(HtmlTag.SECTION)) {

@@ -377,11 +381,11 @@
      * Add the package use information.
      *
      * @param pkg the package that uses the given class
      * @param contentTree the content tree to which the package use information will be added
      */
-    protected void addPackageUse(PackageDoc pkg, Content contentTree) throws IOException {
+    protected void addPackageUse(PackageElement pkg, Content contentTree) throws IOException {
         Content tdFirst = HtmlTree.TD(HtmlStyle.colFirst,
                 getHyperLink(getPackageAnchorName(pkg), new StringContent(utils.getPackageName(pkg))));
         contentTree.addContent(tdFirst);
         HtmlTree tdLast = new HtmlTree(HtmlTag.TD);
         tdLast.addStyle(HtmlStyle.colLast);

@@ -393,75 +397,75 @@
      * Add the class use information.
      *
      * @param pkg the package that uses the given class
      * @param contentTree the content tree to which the class use information will be added
      */
-    protected void addClassUse(PackageDoc pkg, Content contentTree) throws IOException {
+    protected void addClassUse(PackageElement pkg, Content contentTree) throws IOException {
         Content classLink = getLink(new LinkInfoImpl(configuration,
-            LinkInfoImpl.Kind.CLASS_USE_HEADER, classdoc));
+            LinkInfoImpl.Kind.CLASS_USE_HEADER, typeElement));
         Content pkgLink = getPackageLink(pkg, utils.getPackageName(pkg));
-        classSubWriter.addUseInfo(pkgToClassAnnotations.get(pkg.name()),
+        classSubWriter.addUseInfo(pkgToClassAnnotations.get(pkg),
                 configuration.getResource("doclet.ClassUse_Annotation", classLink,
                 pkgLink), classUseTableSummary, contentTree);
-        classSubWriter.addUseInfo(pkgToClassTypeParameter.get(pkg.name()),
+        classSubWriter.addUseInfo(pkgToClassTypeParameter.get(pkg),
                 configuration.getResource("doclet.ClassUse_TypeParameter", classLink,
                 pkgLink), classUseTableSummary, contentTree);
-        classSubWriter.addUseInfo(pkgToSubclass.get(pkg.name()),
+        classSubWriter.addUseInfo(pkgToSubclass.get(pkg),
                 configuration.getResource("doclet.ClassUse_Subclass", classLink,
                 pkgLink), subclassUseTableSummary, contentTree);
-        classSubWriter.addUseInfo(pkgToSubinterface.get(pkg.name()),
+        classSubWriter.addUseInfo(pkgToSubinterface.get(pkg),
                 configuration.getResource("doclet.ClassUse_Subinterface", classLink,
                 pkgLink), subinterfaceUseTableSummary, contentTree);
-        classSubWriter.addUseInfo(pkgToImplementingClass.get(pkg.name()),
+        classSubWriter.addUseInfo(pkgToImplementingClass.get(pkg),
                 configuration.getResource("doclet.ClassUse_ImplementingClass", classLink,
                 pkgLink), classUseTableSummary, contentTree);
-        fieldSubWriter.addUseInfo(pkgToField.get(pkg.name()),
+        fieldSubWriter.addUseInfo(pkgToField.get(pkg),
                 configuration.getResource("doclet.ClassUse_Field", classLink,
                 pkgLink), fieldUseTableSummary, contentTree);
-        fieldSubWriter.addUseInfo(pkgToFieldAnnotations.get(pkg.name()),
+        fieldSubWriter.addUseInfo(pkgToFieldAnnotations.get(pkg),
                 configuration.getResource("doclet.ClassUse_FieldAnnotations", classLink,
                 pkgLink), fieldUseTableSummary, contentTree);
-        fieldSubWriter.addUseInfo(pkgToFieldTypeParameter.get(pkg.name()),
+        fieldSubWriter.addUseInfo(pkgToFieldTypeParameter.get(pkg),
                 configuration.getResource("doclet.ClassUse_FieldTypeParameter", classLink,
                 pkgLink), fieldUseTableSummary, contentTree);
-        methodSubWriter.addUseInfo(pkgToMethodAnnotations.get(pkg.name()),
+        methodSubWriter.addUseInfo(pkgToMethodAnnotations.get(pkg),
                 configuration.getResource("doclet.ClassUse_MethodAnnotations", classLink,
                 pkgLink), methodUseTableSummary, contentTree);
-        methodSubWriter.addUseInfo(pkgToMethodParameterAnnotations.get(pkg.name()),
+        methodSubWriter.addUseInfo(pkgToMethodParameterAnnotations.get(pkg),
                 configuration.getResource("doclet.ClassUse_MethodParameterAnnotations", classLink,
                 pkgLink), methodUseTableSummary, contentTree);
-        methodSubWriter.addUseInfo(pkgToMethodTypeParameter.get(pkg.name()),
+        methodSubWriter.addUseInfo(pkgToMethodTypeParameter.get(pkg),
                 configuration.getResource("doclet.ClassUse_MethodTypeParameter", classLink,
                 pkgLink), methodUseTableSummary, contentTree);
-        methodSubWriter.addUseInfo(pkgToMethodReturn.get(pkg.name()),
+        methodSubWriter.addUseInfo(pkgToMethodReturn.get(pkg),
                 configuration.getResource("doclet.ClassUse_MethodReturn", classLink,
                 pkgLink), methodUseTableSummary, contentTree);
-        methodSubWriter.addUseInfo(pkgToMethodReturnTypeParameter.get(pkg.name()),
+        methodSubWriter.addUseInfo(pkgToMethodReturnTypeParameter.get(pkg),
                 configuration.getResource("doclet.ClassUse_MethodReturnTypeParameter", classLink,
                 pkgLink), methodUseTableSummary, contentTree);
-        methodSubWriter.addUseInfo(pkgToMethodArgs.get(pkg.name()),
+        methodSubWriter.addUseInfo(pkgToMethodArgs.get(pkg),
                 configuration.getResource("doclet.ClassUse_MethodArgs", classLink,
                 pkgLink), methodUseTableSummary, contentTree);
-        methodSubWriter.addUseInfo(pkgToMethodArgTypeParameter.get(pkg.name()),
+        methodSubWriter.addUseInfo(pkgToMethodArgTypeParameter.get(pkg),
                 configuration.getResource("doclet.ClassUse_MethodArgsTypeParameters", classLink,
                 pkgLink), methodUseTableSummary, contentTree);
-        methodSubWriter.addUseInfo(pkgToMethodThrows.get(pkg.name()),
+        methodSubWriter.addUseInfo(pkgToMethodThrows.get(pkg),
                 configuration.getResource("doclet.ClassUse_MethodThrows", classLink,
                 pkgLink), methodUseTableSummary, contentTree);
-        constrSubWriter.addUseInfo(pkgToConstructorAnnotations.get(pkg.name()),
+        constrSubWriter.addUseInfo(pkgToConstructorAnnotations.get(pkg),
                 configuration.getResource("doclet.ClassUse_ConstructorAnnotations", classLink,
                 pkgLink), constructorUseTableSummary, contentTree);
-        constrSubWriter.addUseInfo(pkgToConstructorParameterAnnotations.get(pkg.name()),
+        constrSubWriter.addUseInfo(pkgToConstructorParameterAnnotations.get(pkg),
                 configuration.getResource("doclet.ClassUse_ConstructorParameterAnnotations", classLink,
                 pkgLink), constructorUseTableSummary, contentTree);
-        constrSubWriter.addUseInfo(pkgToConstructorArgs.get(pkg.name()),
+        constrSubWriter.addUseInfo(pkgToConstructorArgs.get(pkg),
                 configuration.getResource("doclet.ClassUse_ConstructorArgs", classLink,
                 pkgLink), constructorUseTableSummary, contentTree);
-        constrSubWriter.addUseInfo(pkgToConstructorArgTypeParameter.get(pkg.name()),
+        constrSubWriter.addUseInfo(pkgToConstructorArgTypeParameter.get(pkg),
                 configuration.getResource("doclet.ClassUse_ConstructorArgsTypeParameters", classLink,
                 pkgLink), constructorUseTableSummary, contentTree);
-        constrSubWriter.addUseInfo(pkgToConstructorThrows.get(pkg.name()),
+        constrSubWriter.addUseInfo(pkgToConstructorThrows.get(pkg),
                 configuration.getResource("doclet.ClassUse_ConstructorThrows", classLink,
                 pkgLink), constructorUseTableSummary, contentTree);
     }
 
     /**

@@ -468,13 +472,14 @@
      * Get the header for the class use Listing.
      *
      * @return a content tree representing the class use header
      */
     protected HtmlTree getClassUseHeader() {
-        String cltype = configuration.getText(classdoc.isInterface()?
-            "doclet.Interface":"doclet.Class");
-        String clname = classdoc.qualifiedName();
+        String cltype = configuration.getText(utils.isInterface(typeElement)
+                ? "doclet.Interface"
+                : "doclet.Class");
+        String clname = utils.getFullyQualifiedName(typeElement);
         String title = configuration.getText("doclet.Window_ClassUse_Header",
                 cltype, clname);
         HtmlTree bodyTree = getBody(true, getWindowTitle(title));
         HtmlTree htmlTree = (configuration.allowTag(HtmlTag.HEADER))
                 ? HtmlTree.HEADER()

@@ -516,11 +521,11 @@
      *
      * @return a content tree for the class page link
      */
     protected Content getNavLinkClass() {
         Content linkContent = getLink(new LinkInfoImpl(
-                configuration, LinkInfoImpl.Kind.CLASS_USE_HEADER, classdoc)
+                configuration, LinkInfoImpl.Kind.CLASS_USE_HEADER, typeElement)
                 .label(configuration.getText("doclet.Class")));
         Content li = HtmlTree.LI(linkContent);
         return li;
     }
 

@@ -538,12 +543,12 @@
      * Get the tree link.
      *
      * @return a content tree for the tree link
      */
     protected Content getNavLinkTree() {
-        Content linkContent = classdoc.containingPackage().isIncluded() ?
-            getHyperLink(DocPath.parent.resolve(DocPaths.PACKAGE_TREE), treeLabel) :
-            getHyperLink(pathToRoot.resolve(DocPaths.OVERVIEW_TREE), treeLabel);
+        Content linkContent = utils.isEnclosingPackageIncluded(typeElement)
+                ? getHyperLink(DocPath.parent.resolve(DocPaths.PACKAGE_TREE), treeLabel)
+                : getHyperLink(pathToRoot.resolve(DocPaths.OVERVIEW_TREE), treeLabel);
         Content li = HtmlTree.LI(linkContent);
         return li;
     }
 }