src/share/classes/com/sun/tools/javadoc/TagImpl.java

Tue, 09 Oct 2012 19:10:00 -0700

author
jjg
date
Tue, 09 Oct 2012 19:10:00 -0700
changeset 1357
c75be5bc5283
parent 554
9d9f26857129
child 1359
25e14ad23cef
permissions
-rw-r--r--

8000663: clean up langtools imports
Reviewed-by: darcy

     1 /*
     2  * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    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  */
    26 package com.sun.tools.javadoc;
    28 import com.sun.javadoc.*;
    30 /**
    31  * Represents a documentation tag, e.g. @since, @author, @version.
    32  * Given a tag (e.g. "@since 1.2"), holds tag name (e.g. "@since")
    33  * and tag text (e.g. "1.2").  TagImpls with structure or which require
    34  * special processing are handled by subclasses (ParamTagImpl, SeeTagImpl,
    35  * and ThrowsTagImpl
    36  *
    37  * @author Robert Field
    38  * @author Atul M Dambalkar
    39  * @author Neal M Gafter
    40  * @see SeeTagImpl
    41  * @see ParamTagImpl
    42  * @see ThrowsTagImpl
    43  * @see Doc#tags()
    44  *
    45  */
    46 class TagImpl implements Tag {
    48     protected final String text;
    49     protected final String name;
    50     protected final DocImpl holder;
    52     /**
    53      * Cached first sentence.
    54      */
    55     private Tag[] firstSentence;
    57     /**
    58      * Cached inline tags.
    59      */
    60     private Tag[] inlineTags;
    62     /**
    63      *  Constructor
    64      */
    65     TagImpl(DocImpl holder, String name, String text) {
    66         this.holder = holder;
    67         this.name = name;
    68         this.text = text;
    69     }
    71     /**
    72      * Return the name of this tag.
    73      */
    74     public String name() {
    75         return name;
    76     }
    78     /**
    79      * Return the containing {@link Doc} of this Tag element.
    80      */
    81     public Doc holder() {
    82         return holder;
    83     }
    85     /**
    86      * Return the kind of this tag.
    87      */
    88     public String kind() {
    89         return name;
    90     }
    92     /**
    93      * Return the text of this tag, that is, portion beyond tag name.
    94      */
    95     public String text() {
    96         return text;
    97     }
    99     DocEnv docenv() {
   100         return holder.env;
   101     }
   103     /**
   104      * for use by subclasses which have two part tag text.
   105      */
   106     String[] divideAtWhite() {
   107         String[] sa = new String[2];
   108         int len = text.length();
   109         // if no white space found
   110         sa[0] = text;
   111         sa[1] = "";
   112         for (int inx = 0; inx < len; ++inx) {
   113             char ch = text.charAt(inx);
   114             if (Character.isWhitespace(ch)) {
   115                 sa[0] = text.substring(0, inx);
   116                 for (; inx < len; ++inx) {
   117                     ch = text.charAt(inx);
   118                     if (!Character.isWhitespace(ch)) {
   119                         sa[1] = text.substring(inx, len);
   120                         break;
   121                     }
   122                 }
   123                 break;
   124             }
   125         }
   126         return sa;
   127     }
   129     /**
   130      * convert this object to a string.
   131      */
   132     public String toString() {
   133         return name + ":" + text;
   134     }
   136     /**
   137      * For documentation comment with embedded @link tags, return the array of
   138      * TagImpls consisting of SeeTagImpl(s) and text containing TagImpl(s).
   139      * Within a comment string "This is an example of inline tags for a
   140      * documentation comment {@link Doc {@link Doc commentlabel}}",
   141      * where inside the inner braces, the first "Doc" carries exctly the same
   142      * syntax as a SeeTagImpl and the second "commentlabel" is label for the Html
   143      * Link, will return an array of TagImpl(s) with first element as TagImpl with
   144      * comment text "This is an example of inline tags for a documentation
   145      * comment" and second element as SeeTagImpl with referenced class as "Doc"
   146      * and the label for the Html Link as "commentlabel".
   147      *
   148      * @return TagImpl[] Array of tags with inline SeeTagImpls.
   149      * @see ParamTagImpl
   150      * @see ThrowsTagImpl
   151      */
   152     public Tag[] inlineTags() {
   153         if (inlineTags == null) {
   154             inlineTags = Comment.getInlineTags(holder, text);
   155         }
   156         return inlineTags;
   157     }
   159     /**
   160      * Return array of tags for the first sentence in the doc comment text.
   161      */
   162     public Tag[] firstSentenceTags() {
   163         if (firstSentence == null) {
   164             //Parse all sentences first to avoid duplicate warnings.
   165             inlineTags();
   166             try {
   167                 docenv().setSilent(true);
   168                 firstSentence = Comment.firstSentenceTags(holder, text);
   169             } finally {
   170                 docenv().setSilent(false);
   171             }
   172         }
   173         return firstSentence;
   174     }
   176     /**
   177      * Return the doc item to which this tag is attached.
   178      * @return the doc item to which this tag is attached.
   179      */
   180     public SourcePosition position() {
   181         return holder.position();
   182     }
   183 }

mercurial