src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ConstructorBuilder.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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

@@ -21,18 +21,24 @@
  * 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.builders;
+package jdk.javadoc.internal.doclets.toolkit.builders;
 
 import java.util.*;
 
-import com.sun.javadoc.*;
-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.ExecutableElement;
+import javax.lang.model.element.TypeElement;
 
+import jdk.javadoc.internal.doclets.toolkit.Configuration;
+import jdk.javadoc.internal.doclets.toolkit.ConstructorWriter;
+import jdk.javadoc.internal.doclets.toolkit.Content;
+import jdk.javadoc.internal.doclets.toolkit.util.VisibleMemberMap;
+
+
 /**
  * Builds documentation for a constructor.
  *
  *  <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.

@@ -49,19 +55,18 @@
      * The name of this builder.
      */
     public static final String NAME = "ConstructorDetails";
 
     /**
-     * The index of the current field that is being documented at this point
-     * in time.
+     * The current constructor that is being documented at this point in time.
      */
-    private int currentConstructorIndex;
+    private ExecutableElement constructor;
 
     /**
      * The class whose constructors are being documented.
      */
-    private final ClassDoc classDoc;
+    private final TypeElement typeElement;
 
     /**
      * The visible constructors for the given class.
      */
     private final VisibleMemberMap visibleMemberMap;

@@ -72,76 +77,75 @@
     private final ConstructorWriter writer;
 
     /**
      * The constructors being documented.
      */
-    private final List<ProgramElementDoc> constructors;
+    private final SortedSet<Element> constructors;
 
     /**
      * Construct a new ConstructorBuilder.
      *
      * @param context  the build context.
-     * @param classDoc the class whoses members are being documented.
+     * @param typeElement the class whoses members are being documented.
      * @param writer the doclet specific writer.
      */
     private ConstructorBuilder(Context context,
-            ClassDoc classDoc,
+            TypeElement typeElement,
             ConstructorWriter writer) {
         super(context);
-        this.classDoc = classDoc;
+        this.typeElement = typeElement;
         this.writer = writer;
         visibleMemberMap =
                 new VisibleMemberMap(
-                classDoc,
-                VisibleMemberMap.CONSTRUCTORS,
+                typeElement,
+                VisibleMemberMap.Kind.CONSTRUCTORS,
                 configuration);
-        constructors = new ArrayList<>(visibleMemberMap.getMembersFor(classDoc));
-        for (ProgramElementDoc constructor : constructors) {
-            if (constructor.isProtected() || constructor.isPrivate()) {
+        constructors = visibleMemberMap.getMembersFor(typeElement);
+        for (Element ctor : constructors) {
+            if (utils.isProtected(ctor) || utils.isPrivate(ctor)) {
                 writer.setFoundNonPubConstructor(true);
             }
         }
-        if (configuration.getMemberComparator() != null) {
-            Collections.sort(constructors,configuration.getMemberComparator());
         }
-    }
 
     /**
      * Construct a new ConstructorBuilder.
      *
      * @param context  the build context.
-     * @param classDoc the class whoses members are being documented.
+     * @param typeElement the class whoses members are being documented.
      * @param writer the doclet specific writer.
      */
     public static ConstructorBuilder getInstance(Context context,
-            ClassDoc classDoc, ConstructorWriter writer) {
-        return new ConstructorBuilder(context, classDoc, writer);
+            TypeElement typeElement, ConstructorWriter writer) {
+        return new ConstructorBuilder(context, typeElement, writer);
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public String getName() {
         return NAME;
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public boolean hasMembersToDocument() {
-        return constructors.size() > 0;
+        return !constructors.isEmpty();
     }
 
     /**
      * Returns a list of constructors that will be documented for the given class.
      * This information can be used for doclet specific documentation
      * generation.
      *
      * @return a list of constructors that will be documented.
      */
-    public List<ProgramElementDoc> members(ClassDoc classDoc) {
-        return visibleMemberMap.getMembersFor(classDoc);
+    public SortedSet<Element> members(TypeElement typeElement) {
+        return visibleMemberMap.getMembersFor(typeElement);
     }
 
     /**
      * Return the constructor writer for this builder.
      *

@@ -161,20 +165,19 @@
         if (writer == null) {
             return;
         }
         int size = constructors.size();
         if (size > 0) {
-            Content constructorDetailsTree = writer.getConstructorDetailsTreeHeader(
-                    classDoc, memberDetailsTree);
-            for (currentConstructorIndex = 0; currentConstructorIndex < size;
-                    currentConstructorIndex++) {
+            Content constructorDetailsTree = writer.getConstructorDetailsTreeHeader(typeElement,
+                    memberDetailsTree);
+            for (Element ctor : constructors) {
+                constructor = (ExecutableElement)ctor;
                 Content constructorDocTree = writer.getConstructorDocTreeHeader(
-                        (ConstructorDoc) constructors.get(currentConstructorIndex),
-                        constructorDetailsTree);
+                        constructor, constructorDetailsTree);
                 buildChildren(node, constructorDocTree);
-                constructorDetailsTree.addContent(writer.getConstructorDoc(
-                        constructorDocTree, (currentConstructorIndex == size - 1)));
+                constructorDetailsTree.addContent(writer.getConstructorDoc(constructorDocTree,
+                        constructors.last().equals(constructor)));
             }
             memberDetailsTree.addContent(
                     writer.getConstructorDetails(constructorDetailsTree));
         }
     }

@@ -184,24 +187,21 @@
      *
      * @param node the XML element that specifies which components to document
      * @param constructorDocTree the content tree to which the documentation will be added
      */
     public void buildSignature(XMLNode node, Content constructorDocTree) {
-        constructorDocTree.addContent(
-                writer.getSignature(
-                (ConstructorDoc) constructors.get(currentConstructorIndex)));
+        constructorDocTree.addContent(writer.getSignature(constructor));
     }
 
     /**
      * Build the deprecation information.
      *
      * @param node the XML element that specifies which components to document
      * @param constructorDocTree the content tree to which the documentation will be added
      */
     public void buildDeprecationInfo(XMLNode node, Content constructorDocTree) {
-        writer.addDeprecated(
-                (ConstructorDoc) constructors.get(currentConstructorIndex), constructorDocTree);
+        writer.addDeprecated(constructor, constructorDocTree);
     }
 
     /**
      * Build the comments for the constructor.  Do nothing if
      * {@link Configuration#nocomment} is set to true.

@@ -209,13 +209,11 @@
      * @param node the XML element that specifies which components to document
      * @param constructorDocTree the content tree to which the documentation will be added
      */
     public void buildConstructorComments(XMLNode node, Content constructorDocTree) {
         if (!configuration.nocomment) {
-            writer.addComments(
-                    (ConstructorDoc) constructors.get(currentConstructorIndex),
-                    constructorDocTree);
+            writer.addComments(constructor, constructorDocTree);
         }
     }
 
     /**
      * Build the tag information.

@@ -222,9 +220,8 @@
      *
      * @param node the XML element that specifies which components to document
      * @param constructorDocTree the content tree to which the documentation will be added
      */
     public void buildTagInfo(XMLNode node, Content constructorDocTree) {
-        writer.addTags((ConstructorDoc) constructors.get(currentConstructorIndex),
-                constructorDocTree);
+        writer.addTags(constructor, constructorDocTree);
     }
 }