/* -*- Mode: JDE; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* This file is part of the debugger and core tools for the AspectJ(tm)
* programming language; see http://aspectj.org
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is AspectJ.
*
* The Initial Developer of the Original Code is Xerox Corporation. Portions
* created by Xerox Corporation are Copyright (C) 1999-2002 Xerox Corporation.
* All Rights Reserved.
*/
package org.aspectj.tools.ajdoc;
import com.sun.javadoc.Doc;
import com.sun.javadoc.ParamTag;
import com.sun.javadoc.SeeTag;
import com.sun.javadoc.SerialFieldTag;
import com.sun.javadoc.Tag;
import com.sun.javadoc.ThrowsTag;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
public class Comment {
/** The parsed comment text. */
private String commentText;
/** The raw comment text. */
private String rawCommentText;
/** The list of tags. */
private List tags;
/** The Doc to which the Comment belongs. */
private Doc doc;
/** The Locale in which this comment resides. */
private Locale loc;
/** The ErrPrinter used by this Comment to output messages. */
private ErrPrinter err;
public Comment(Doc doc, String formalComment) {
this(doc, formalComment, ErrPrinter.instance);
}
public Comment(Doc doc, String formalComment, ErrPrinter err) {
this(doc, formalComment, err, Locale.US);
}
public Comment(Doc doc, String formalComment, ErrPrinter err, Locale loc) {
this.rawCommentText = Util.rawCommentText(formalComment);
this.commentText = Util.commentText(rawCommentText);
this.doc = doc;
this.err = err;
this.loc = loc;
}
/**
* Returns the parsed comment text.
*
* @return the parsed comment text.
*/
public String commentText() {
return commentText;
}
/**
* Returns the full unprocessed text of the comment.
*
* @return the full unprocessed text of the comment.
*/
public String getRawCommentText() {
return rawCommentText;
}
/**
* Sets the comment text.
*
* @param commentText the new comment text.
*/
public void setCommentText(String commentText) {
this.commentText = commentText;
}
/**
* Returns the raw comment text.
*
* @return the raw comment text.
*/
public String rawCommentText() {
return rawCommentText;
}
/**
* Sets the raw comment text.
*
* @param rawCommentText the new raw comment text.
*/
public void setRawCommentText(String rawCommentText) {
this.rawCommentText = rawCommentText;
}
/**
* Returns all this comment's tags.
*
* @return a List of tags whose elements are Comment instances
*/
public List getTags() {
if (tags == null) {
tags = findTags();
}
return tags;
}
/**
* Sets the Doc for this comment.
*
* @param doc the new Doc.
*/
public void setDoc(Doc doc) {
this.doc = doc;
}
/**
* Returns the Doc for this comment.
*
* @return the Doc for this comment.
*/
public Doc doc() {
return doc;
}
/**
* Sets the locale for this comment.
*
* @param loc the new locale for this comment.
*/
public void setLocale(Locale loc) {
this.loc = loc;
}
/**
* Returns the Locale for this comment.
*
* @return the Locale for this comment.
*/
public Locale locale() {
return loc;
}
/**
* Sets the ErrPrinter for this comment.
*
* @param err the new ErrPrinter for this comment.
*/
public void setErr(ErrPrinter err) {
this.err = err;
}
/**
* Returns the ErrPrinter for this comment.
*
* @return the ErrPrinter for this comment.
*/
public ErrPrinter err() {
return err;
}
/**
* Initializes the Doc, Locale, and ErrPrinter.
*
* @param doc the new Doc.
* @param loc the new Locale.
* @param err the new ErrPrinter.
*/
public void init(Doc doc, Locale loc, ErrPrinter err) {
setDoc(doc);
setLocale(loc);
setErr(err);
}
/**
* Returns the comment as an array of Tag.
*
* @return an array of Tag representing the comment.
*/
public Tag[] inlineTags() {
return Util.inlineTags(doc(),
commentText(),
locale(),
err());
}
/**
* Returns all tags of the comment whose name equals
* tagname
.
*
* @return an array of Tag representing all tags of the
* comment whose name equals tagname
.
*/
public Tag[] tags(String type) {
type = type.startsWith("@") ? type : "@"+type;
List result = new ArrayList();
Tag tag;
for (Iterator i = getTags().iterator(); i.hasNext();) {
if ((tag = (Tag)i.next()).kind().equals(type)) {
result.add(tag);
}
}
return (Tag[])result.toArray(new Tag[result.size()]);
}
/**
* Returns the param tags describing parameters taken
* by this code.
*
* @return an array of ParamTag representing the
* parameters taken by this code.
*/
public ParamTag[] paramTags() {
List result = new ArrayList();
Tag tag;
for (Iterator i = getTags().iterator(); i.hasNext();) {
if ((tag = (Tag)i.next()) instanceof ParamTag) {
result.add((ParamTag)tag);
}
}
return (ParamTag[])result.toArray(new ParamTag[result.size()]);
}
/**
* Returns the see tags of the comment.
*
* @return an array of SeeTag representing the
* see tags of the comment.
*/
public SeeTag[] seeTags() {
List result = new ArrayList();
Tag tag;
for (Iterator i = getTags().iterator(); i.hasNext();) {
if ((tag = (Tag)i.next()) instanceof SeeTag) {
result.add((SeeTag)tag);
}
}
return (SeeTag[])result.toArray(new SeeTag[result.size()]);
}
/**
* Returns the serial field tags for this field.
*
* @return an array of SerialFieldTag representing the
* serial field tags for this field.
*/
public SerialFieldTag[] serialFieldTags() {
List result = new ArrayList();
Tag tag;
for (Iterator i = getTags().iterator(); i.hasNext();) {
if ((tag = (Tag)i.next()) instanceof SerialFieldTag) {
result.add((SerialFieldTag)tag);
}
}
return (SerialFieldTag[])result.toArray
(new SerialFieldTag[result.size()]);
}
/**
* Returns the throw tags describing exceptions thrown
* declared by this code.
*
* @return an array of ThrowsTag representing the exception
* this code declares to throw.
*/
public ThrowsTag[] throwsTags() {
List result = new ArrayList();
Tag tag;
for (Iterator i = getTags().iterator(); i.hasNext();) {
if ((tag = (Tag)i.next()) instanceof ThrowsTag) {
result.add((ThrowsTag)tag);
}
}
return (ThrowsTag[])result.toArray
(new ThrowsTag[result.size()]);
}
/**
* Returns all tags of the comment.
*
* @return an array of Tag representing all
* tags of the comment.
*/
public Tag[] tags() {
return (Tag[])getTags().toArray
(new Tag[getTags().size()]);
}
/**
* Returns the Tags that comprise the first
* sentence of the comment.
*
* @return an array of Tag representing the first
* sentence of the comment.
*/
public Tag[] firstSentenceTags() {
return Util.firstSentenceTags(doc(),
commentText(),
locale(),
err());
}
/**
* Used to lazily initialize the tags of this comment.
*
* @return a List of tags whose elements of Tag instances
* and each represent a tag in this comment.
*/
private List findTags() {
return Util.findTags(doc(),
rawCommentText(),
locale(),
err());
}
}