< prev index next >

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

Print this page




  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package jdk.javadoc.internal.doclets.formats.html;
  27 
  28 import java.text.SimpleDateFormat;
  29 import java.util.*;
  30 import java.util.regex.Matcher;
  31 import java.util.regex.Pattern;

  32 
  33 import javax.lang.model.element.AnnotationMirror;
  34 import javax.lang.model.element.AnnotationValue;
  35 import javax.lang.model.element.Element;

  36 import javax.lang.model.element.ExecutableElement;
  37 import javax.lang.model.element.ModuleElement;
  38 import javax.lang.model.element.Name;
  39 import javax.lang.model.element.PackageElement;
  40 import javax.lang.model.element.TypeElement;

  41 import javax.lang.model.element.VariableElement;
  42 import javax.lang.model.type.DeclaredType;
  43 import javax.lang.model.type.TypeMirror;
  44 import javax.lang.model.util.SimpleAnnotationValueVisitor9;
  45 import javax.lang.model.util.SimpleElementVisitor9;
  46 import javax.lang.model.util.SimpleTypeVisitor9;
  47 
  48 import com.sun.source.doctree.AttributeTree;
  49 import com.sun.source.doctree.AttributeTree.ValueKind;
  50 import com.sun.source.doctree.CommentTree;
  51 import com.sun.source.doctree.DocRootTree;
  52 import com.sun.source.doctree.DocTree;
  53 import com.sun.source.doctree.DocTree.Kind;
  54 import com.sun.source.doctree.EndElementTree;
  55 import com.sun.source.doctree.EntityTree;
  56 import com.sun.source.doctree.ErroneousTree;
  57 import com.sun.source.doctree.IndexTree;
  58 import com.sun.source.doctree.InheritDocTree;
  59 import com.sun.source.doctree.LinkTree;
  60 import com.sun.source.doctree.LiteralTree;


  77 import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
  78 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
  79 import jdk.javadoc.internal.doclets.toolkit.AnnotationTypeWriter;
  80 import jdk.javadoc.internal.doclets.toolkit.ClassWriter;
  81 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
  82 import jdk.javadoc.internal.doclets.toolkit.Content;
  83 import jdk.javadoc.internal.doclets.toolkit.Messages;
  84 import jdk.javadoc.internal.doclets.toolkit.PackageSummaryWriter;
  85 import jdk.javadoc.internal.doclets.toolkit.Resources;
  86 import jdk.javadoc.internal.doclets.toolkit.taglets.DocRootTaglet;
  87 import jdk.javadoc.internal.doclets.toolkit.taglets.TagletWriter;
  88 import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
  89 import jdk.javadoc.internal.doclets.toolkit.util.DocFile;
  90 import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
  91 import jdk.javadoc.internal.doclets.toolkit.util.DocLink;
  92 import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
  93 import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
  94 import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
  95 import jdk.javadoc.internal.doclets.toolkit.util.ImplementedMethods;
  96 import jdk.javadoc.internal.doclets.toolkit.util.Utils;

  97 
  98 import static com.sun.source.doctree.DocTree.Kind.*;
  99 import static jdk.javadoc.internal.doclets.toolkit.util.CommentHelper.SPACER;
 100 
 101 
 102 /**
 103  * Class for the Html Format Code Generation specific to JavaDoc.
 104  * This Class contains methods related to the Html Code Generation which
 105  * are used extensively while generating the entire documentation.
 106  *
 107  *  <p><b>This is NOT part of any supported API.
 108  *  If you write code that depends on this, you do so at your own risk.
 109  *  This code and its internal interfaces are subject to change or
 110  *  deletion without notice.</b>
 111  *
 112  * @author Atul M Dambalkar
 113  * @author Robert Field
 114  * @author Bhavesh Patel (Modified)
 115  */
 116 public class HtmlDocletWriter extends HtmlDocWriter {


1552                     StringContent content = utils.isEnclosingPackageIncluded(refClass)
1553                             ? new StringContent(utils.getSimpleName(refClass))
1554                             : new StringContent(utils.getFullyQualifiedName(refClass));
1555                     label = plainOrCode(isLinkPlain, content);
1556                 } else {
1557                     label = plainOrCode(isLinkPlain,
1558                             new StringContent(utils.getSimpleName(refClass)));
1559                 }
1560 
1561             }
1562             return getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.DEFAULT, refClass)
1563                     .label(label));
1564         } else if (refMem == null) {
1565             // Must be a member reference since refClass is not null and refMemName is not null.
1566             // However, refMem is null, so this referenced member does not exist.
1567             return (label.isEmpty() ? text: label);
1568         } else {
1569             // Must be a member reference since refClass is not null and refMemName is not null.
1570             // refMem is not null, so this @see tag must be referencing a valid member.
1571             TypeElement containing = utils.getEnclosingTypeElement(refMem);










1572             if (ch.getText(see).trim().startsWith("#") &&
1573                 ! (utils.isPublic(containing) || utils.isLinkable(containing))) {
1574                 // Since the link is relative and the holder is not even being
1575                 // documented, this must be an inherited link.  Redirect it.
1576                 // The current class either overrides the referenced member or
1577                 // inherits it automatically.
1578                 if (this instanceof ClassWriterImpl) {
1579                     containing = ((ClassWriterImpl) this).getTypeElement();
1580                 } else if (!utils.isPublic(containing)) {
1581                     messages.warning(
1582                         ch.getDocTreePath(see), "doclet.see.class_or_package_not_accessible",
1583                         tagName, utils.getFullyQualifiedName(containing));
1584                 } else {
1585                     messages.warning(
1586                         ch.getDocTreePath(see), "doclet.see.class_or_package_not_found",
1587                         tagName, seetext);
1588                 }
1589             }
1590             if (configuration.currentTypeElement != containing) {
1591                 refMemName = (utils.isConstructor(refMem))




  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package jdk.javadoc.internal.doclets.formats.html;
  27 
  28 import java.text.SimpleDateFormat;
  29 import java.util.*;
  30 import java.util.regex.Matcher;
  31 import java.util.regex.Pattern;
  32 import java.util.stream.Collectors;
  33 
  34 import javax.lang.model.element.AnnotationMirror;
  35 import javax.lang.model.element.AnnotationValue;
  36 import javax.lang.model.element.Element;
  37 import javax.lang.model.element.ElementKind;
  38 import javax.lang.model.element.ExecutableElement;
  39 import javax.lang.model.element.ModuleElement;
  40 import javax.lang.model.element.Name;
  41 import javax.lang.model.element.PackageElement;
  42 import javax.lang.model.element.TypeElement;
  43 import javax.lang.model.element.TypeParameterElement;
  44 import javax.lang.model.element.VariableElement;
  45 import javax.lang.model.type.DeclaredType;
  46 import javax.lang.model.type.TypeMirror;
  47 import javax.lang.model.util.SimpleAnnotationValueVisitor9;
  48 import javax.lang.model.util.SimpleElementVisitor9;
  49 import javax.lang.model.util.SimpleTypeVisitor9;
  50 
  51 import com.sun.source.doctree.AttributeTree;
  52 import com.sun.source.doctree.AttributeTree.ValueKind;
  53 import com.sun.source.doctree.CommentTree;
  54 import com.sun.source.doctree.DocRootTree;
  55 import com.sun.source.doctree.DocTree;
  56 import com.sun.source.doctree.DocTree.Kind;
  57 import com.sun.source.doctree.EndElementTree;
  58 import com.sun.source.doctree.EntityTree;
  59 import com.sun.source.doctree.ErroneousTree;
  60 import com.sun.source.doctree.IndexTree;
  61 import com.sun.source.doctree.InheritDocTree;
  62 import com.sun.source.doctree.LinkTree;
  63 import com.sun.source.doctree.LiteralTree;


  80 import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
  81 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
  82 import jdk.javadoc.internal.doclets.toolkit.AnnotationTypeWriter;
  83 import jdk.javadoc.internal.doclets.toolkit.ClassWriter;
  84 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
  85 import jdk.javadoc.internal.doclets.toolkit.Content;
  86 import jdk.javadoc.internal.doclets.toolkit.Messages;
  87 import jdk.javadoc.internal.doclets.toolkit.PackageSummaryWriter;
  88 import jdk.javadoc.internal.doclets.toolkit.Resources;
  89 import jdk.javadoc.internal.doclets.toolkit.taglets.DocRootTaglet;
  90 import jdk.javadoc.internal.doclets.toolkit.taglets.TagletWriter;
  91 import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
  92 import jdk.javadoc.internal.doclets.toolkit.util.DocFile;
  93 import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
  94 import jdk.javadoc.internal.doclets.toolkit.util.DocLink;
  95 import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
  96 import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
  97 import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
  98 import jdk.javadoc.internal.doclets.toolkit.util.ImplementedMethods;
  99 import jdk.javadoc.internal.doclets.toolkit.util.Utils;
 100 import jdk.javadoc.internal.doclets.toolkit.util.VisibleMemberMap;
 101 
 102 import static com.sun.source.doctree.DocTree.Kind.*;
 103 import static jdk.javadoc.internal.doclets.toolkit.util.CommentHelper.SPACER;
 104 
 105 
 106 /**
 107  * Class for the Html Format Code Generation specific to JavaDoc.
 108  * This Class contains methods related to the Html Code Generation which
 109  * are used extensively while generating the entire documentation.
 110  *
 111  *  <p><b>This is NOT part of any supported API.
 112  *  If you write code that depends on this, you do so at your own risk.
 113  *  This code and its internal interfaces are subject to change or
 114  *  deletion without notice.</b>
 115  *
 116  * @author Atul M Dambalkar
 117  * @author Robert Field
 118  * @author Bhavesh Patel (Modified)
 119  */
 120 public class HtmlDocletWriter extends HtmlDocWriter {


1556                     StringContent content = utils.isEnclosingPackageIncluded(refClass)
1557                             ? new StringContent(utils.getSimpleName(refClass))
1558                             : new StringContent(utils.getFullyQualifiedName(refClass));
1559                     label = plainOrCode(isLinkPlain, content);
1560                 } else {
1561                     label = plainOrCode(isLinkPlain,
1562                             new StringContent(utils.getSimpleName(refClass)));
1563                 }
1564 
1565             }
1566             return getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.DEFAULT, refClass)
1567                     .label(label));
1568         } else if (refMem == null) {
1569             // Must be a member reference since refClass is not null and refMemName is not null.
1570             // However, refMem is null, so this referenced member does not exist.
1571             return (label.isEmpty() ? text: label);
1572         } else {
1573             // Must be a member reference since refClass is not null and refMemName is not null.
1574             // refMem is not null, so this @see tag must be referencing a valid member.
1575             TypeElement containing = utils.getEnclosingTypeElement(refMem);
1576 
1577             // Find the enclosing type where the method is actually visible,
1578             // in the inheritance hierarchy.
1579             if (refMem.getKind() == ElementKind.METHOD) {
1580                 VisibleMemberMap vmm = configuration.
1581                         getVisibleMemberMap(containing, VisibleMemberMap.Kind.METHODS);
1582                 ExecutableElement overriddenMethod = vmm.getVisibleMethod((ExecutableElement)refMem);
1583                 if (overriddenMethod != null)
1584                     containing = utils.getEnclosingTypeElement(overriddenMethod);
1585             }
1586             if (ch.getText(see).trim().startsWith("#") &&
1587                 ! (utils.isPublic(containing) || utils.isLinkable(containing))) {
1588                 // Since the link is relative and the holder is not even being
1589                 // documented, this must be an inherited link.  Redirect it.
1590                 // The current class either overrides the referenced member or
1591                 // inherits it automatically.
1592                 if (this instanceof ClassWriterImpl) {
1593                     containing = ((ClassWriterImpl) this).getTypeElement();
1594                 } else if (!utils.isPublic(containing)) {
1595                     messages.warning(
1596                         ch.getDocTreePath(see), "doclet.see.class_or_package_not_accessible",
1597                         tagName, utils.getFullyQualifiedName(containing));
1598                 } else {
1599                     messages.warning(
1600                         ch.getDocTreePath(see), "doclet.see.class_or_package_not_found",
1601                         tagName, seetext);
1602                 }
1603             }
1604             if (configuration.currentTypeElement != containing) {
1605                 refMemName = (utils.isConstructor(refMem))


< prev index next >