aoqi@0: /* aoqi@0: * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. aoqi@0: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. aoqi@0: * aoqi@0: * This code is free software; you can redistribute it and/or modify it aoqi@0: * under the terms of the GNU General Public License version 2 only, as aoqi@0: * published by the Free Software Foundation. Oracle designates this aoqi@0: * particular file as subject to the "Classpath" exception as provided aoqi@0: * by Oracle in the LICENSE file that accompanied this code. aoqi@0: * aoqi@0: * This code is distributed in the hope that it will be useful, but WITHOUT aoqi@0: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or aoqi@0: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License aoqi@0: * version 2 for more details (a copy is included in the LICENSE file that aoqi@0: * accompanied this code). aoqi@0: * aoqi@0: * You should have received a copy of the GNU General Public License version aoqi@0: * 2 along with this work; if not, write to the Free Software Foundation, aoqi@0: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. aoqi@0: * aoqi@0: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA aoqi@0: * or visit www.oracle.com if you need additional information or have any aoqi@0: * questions. aoqi@0: */ aoqi@0: aoqi@0: package com.sun.tools.javac.tree; aoqi@0: aoqi@0: aoqi@0: import javax.tools.Diagnostic; aoqi@0: aoqi@0: import com.sun.source.doctree.*; aoqi@0: import com.sun.tools.javac.parser.Tokens.Comment; aoqi@0: import com.sun.tools.javac.util.Assert; aoqi@0: import com.sun.tools.javac.util.DiagnosticSource; aoqi@0: import com.sun.tools.javac.util.JCDiagnostic; aoqi@0: import com.sun.tools.javac.util.JCDiagnostic.SimpleDiagnosticPosition; aoqi@0: import com.sun.tools.javac.util.List; aoqi@0: import com.sun.tools.javac.util.Name; aoqi@0: import com.sun.tools.javac.util.Position; aoqi@0: import java.io.IOException; aoqi@0: import java.io.StringWriter; aoqi@0: import javax.tools.JavaFileObject; aoqi@0: aoqi@0: /** aoqi@0: *

This is NOT part of any supported API. aoqi@0: * If you write code that depends on this, you do so at your own risk. aoqi@0: * This code and its internal interfaces are subject to change or aoqi@0: * deletion without notice. aoqi@0: */ aoqi@0: public abstract class DCTree implements DocTree { aoqi@0: aoqi@0: /** aoqi@0: * The position in the comment string. aoqi@0: * Use {@link #getSourcePosition getSourcePosition} to convert aoqi@0: * it to a position in the source file. aoqi@0: * aoqi@0: * TODO: why not simply translate all these values into aoqi@0: * source file positions? Is it useful to have string-offset aoqi@0: * positions as well? aoqi@0: */ aoqi@0: public int pos; aoqi@0: aoqi@0: public long getSourcePosition(DCDocComment dc) { aoqi@0: return dc.comment.getSourcePos(pos); aoqi@0: } aoqi@0: aoqi@0: public JCDiagnostic.DiagnosticPosition pos(DCDocComment dc) { aoqi@0: return new SimpleDiagnosticPosition(dc.comment.getSourcePos(pos)); aoqi@0: } aoqi@0: aoqi@0: /** Convert a tree to a pretty-printed string. */ aoqi@0: @Override aoqi@0: public String toString() { aoqi@0: StringWriter s = new StringWriter(); aoqi@0: try { aoqi@0: new DocPretty(s).print(this); aoqi@0: } aoqi@0: catch (IOException e) { aoqi@0: // should never happen, because StringWriter is defined aoqi@0: // never to throw any IOExceptions aoqi@0: throw new AssertionError(e); aoqi@0: } aoqi@0: return s.toString(); aoqi@0: } aoqi@0: aoqi@0: public static abstract class DCEndPosTree> extends DCTree { aoqi@0: aoqi@0: private int endPos = Position.NOPOS; aoqi@0: aoqi@0: public int getEndPos(DCDocComment dc) { aoqi@0: return dc.comment.getSourcePos(endPos); aoqi@0: } aoqi@0: aoqi@0: @SuppressWarnings("unchecked") aoqi@0: public T setEndPos(int endPos) { aoqi@0: this.endPos = endPos; aoqi@0: return (T) this; aoqi@0: } aoqi@0: aoqi@0: } aoqi@0: aoqi@0: public static class DCDocComment extends DCTree implements DocCommentTree { aoqi@0: public final Comment comment; // required for the implicit source pos table aoqi@0: aoqi@0: public final List firstSentence; aoqi@0: public final List body; aoqi@0: public final List tags; aoqi@0: aoqi@0: public DCDocComment(Comment comment, aoqi@0: List firstSentence, List body, List tags) { aoqi@0: this.comment = comment; aoqi@0: this.firstSentence = firstSentence; aoqi@0: this.body = body; aoqi@0: this.tags = tags; aoqi@0: } aoqi@0: aoqi@0: public Kind getKind() { aoqi@0: return Kind.DOC_COMMENT; aoqi@0: } aoqi@0: aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitDocComment(this, d); aoqi@0: } aoqi@0: aoqi@0: public List getFirstSentence() { aoqi@0: return firstSentence; aoqi@0: } aoqi@0: aoqi@0: public List getBody() { aoqi@0: return body; aoqi@0: } aoqi@0: aoqi@0: public List getBlockTags() { aoqi@0: return tags; aoqi@0: } aoqi@0: aoqi@0: } aoqi@0: aoqi@0: public static abstract class DCBlockTag extends DCTree implements BlockTagTree { aoqi@0: public String getTagName() { aoqi@0: return getKind().tagName; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static abstract class DCInlineTag extends DCEndPosTree implements InlineTagTree { aoqi@0: public String getTagName() { aoqi@0: return getKind().tagName; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCAttribute extends DCTree implements AttributeTree { aoqi@0: public final Name name; aoqi@0: public final ValueKind vkind; aoqi@0: public final List value; aoqi@0: aoqi@0: DCAttribute(Name name, ValueKind vkind, List value) { aoqi@0: Assert.check((vkind == ValueKind.EMPTY) ? (value == null) : (value != null)); aoqi@0: this.name = name; aoqi@0: this.vkind = vkind; aoqi@0: this.value = value; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.ATTRIBUTE; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitAttribute(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Name getName() { aoqi@0: return name; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public ValueKind getValueKind() { aoqi@0: return vkind; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getValue() { aoqi@0: return value; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCAuthor extends DCBlockTag implements AuthorTree { aoqi@0: public final List name; aoqi@0: aoqi@0: DCAuthor(List name) { aoqi@0: this.name = name; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.AUTHOR; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitAuthor(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getName() { aoqi@0: return name; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCComment extends DCTree implements CommentTree { aoqi@0: public final String body; aoqi@0: aoqi@0: DCComment(String body) { aoqi@0: this.body = body; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.COMMENT; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitComment(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public String getBody() { aoqi@0: return body; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCDeprecated extends DCBlockTag implements DeprecatedTree { aoqi@0: public final List body; aoqi@0: aoqi@0: DCDeprecated(List body) { aoqi@0: this.body = body; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.DEPRECATED; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitDeprecated(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getBody() { aoqi@0: return body; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCDocRoot extends DCInlineTag implements DocRootTree { aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.DOC_ROOT; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitDocRoot(this, d); aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCEndElement extends DCTree implements EndElementTree { aoqi@0: public final Name name; aoqi@0: aoqi@0: DCEndElement(Name name) { aoqi@0: this.name = name; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.END_ELEMENT; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitEndElement(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Name getName() { aoqi@0: return name; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCEntity extends DCTree implements EntityTree { aoqi@0: public final Name name; aoqi@0: aoqi@0: DCEntity(Name name) { aoqi@0: this.name = name; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.ENTITY; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitEntity(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Name getName() { aoqi@0: return name; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCErroneous extends DCTree implements ErroneousTree, JCDiagnostic.DiagnosticPosition { aoqi@0: public final String body; aoqi@0: public final JCDiagnostic diag; aoqi@0: aoqi@0: DCErroneous(String body, JCDiagnostic.Factory diags, DiagnosticSource diagSource, String code, Object... args) { aoqi@0: this.body = body; aoqi@0: this.diag = diags.error(diagSource, this, code, args); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.ERRONEOUS; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitErroneous(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public String getBody() { aoqi@0: return body; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Diagnostic getDiagnostic() { aoqi@0: return diag; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public JCTree getTree() { aoqi@0: return null; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public int getStartPosition() { aoqi@0: return pos; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public int getPreferredPosition() { aoqi@0: return pos + body.length() - 1; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public int getEndPosition(EndPosTable endPosTable) { aoqi@0: return pos + body.length(); aoqi@0: } aoqi@0: aoqi@0: } aoqi@0: aoqi@0: public static class DCIdentifier extends DCTree implements IdentifierTree { aoqi@0: public final Name name; aoqi@0: aoqi@0: DCIdentifier(Name name) { aoqi@0: this.name = name; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.IDENTIFIER; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitIdentifier(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Name getName() { aoqi@0: return name; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCInheritDoc extends DCInlineTag implements InheritDocTree { aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.INHERIT_DOC; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitInheritDoc(this, d); aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCLink extends DCInlineTag implements LinkTree { aoqi@0: public final Kind kind; aoqi@0: public final DCReference ref; aoqi@0: public final List label; aoqi@0: aoqi@0: DCLink(Kind kind, DCReference ref, List label) { aoqi@0: Assert.check(kind == Kind.LINK || kind == Kind.LINK_PLAIN); aoqi@0: this.kind = kind; aoqi@0: this.ref = ref; aoqi@0: this.label = label; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return kind; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitLink(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public ReferenceTree getReference() { aoqi@0: return ref; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getLabel() { aoqi@0: return label; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCLiteral extends DCInlineTag implements LiteralTree { aoqi@0: public final Kind kind; aoqi@0: public final DCText body; aoqi@0: aoqi@0: DCLiteral(Kind kind, DCText body) { aoqi@0: Assert.check(kind == Kind.CODE || kind == Kind.LITERAL); aoqi@0: this.kind = kind; aoqi@0: this.body = body; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return kind; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitLiteral(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public DCText getBody() { aoqi@0: return body; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCParam extends DCBlockTag implements ParamTree { aoqi@0: public final boolean isTypeParameter; aoqi@0: public final DCIdentifier name; aoqi@0: public final List description; aoqi@0: aoqi@0: DCParam(boolean isTypeParameter, DCIdentifier name, List description) { aoqi@0: this.isTypeParameter = isTypeParameter; aoqi@0: this.name = name; aoqi@0: this.description = description; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.PARAM; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitParam(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public boolean isTypeParameter() { aoqi@0: return isTypeParameter; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public IdentifierTree getName() { aoqi@0: return name; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getDescription() { aoqi@0: return description; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCReference extends DCEndPosTree implements ReferenceTree { aoqi@0: public final String signature; aoqi@0: aoqi@0: // The following are not directly exposed through ReferenceTree aoqi@0: // use DocTrees.getElement(TreePath,ReferenceTree) aoqi@0: public final JCTree qualifierExpression; aoqi@0: public final Name memberName; aoqi@0: public final List paramTypes; aoqi@0: aoqi@0: aoqi@0: DCReference(String signature, JCTree qualExpr, Name member, List paramTypes) { aoqi@0: this.signature = signature; aoqi@0: qualifierExpression = qualExpr; aoqi@0: memberName = member; aoqi@0: this.paramTypes = paramTypes; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.REFERENCE; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitReference(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public String getSignature() { aoqi@0: return signature; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCReturn extends DCBlockTag implements ReturnTree { aoqi@0: public final List description; aoqi@0: aoqi@0: DCReturn(List description) { aoqi@0: this.description = description; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.RETURN; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitReturn(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getDescription() { aoqi@0: return description; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCSee extends DCBlockTag implements SeeTree { aoqi@0: public final List reference; aoqi@0: aoqi@0: DCSee(List reference) { aoqi@0: this.reference = reference; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.SEE; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitSee(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getReference() { aoqi@0: return reference; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCSerial extends DCBlockTag implements SerialTree { aoqi@0: public final List description; aoqi@0: aoqi@0: DCSerial(List description) { aoqi@0: this.description = description; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.SERIAL; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitSerial(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getDescription() { aoqi@0: return description; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCSerialData extends DCBlockTag implements SerialDataTree { aoqi@0: public final List description; aoqi@0: aoqi@0: DCSerialData(List description) { aoqi@0: this.description = description; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.SERIAL_DATA; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitSerialData(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getDescription() { aoqi@0: return description; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCSerialField extends DCBlockTag implements SerialFieldTree { aoqi@0: public final DCIdentifier name; aoqi@0: public final DCReference type; aoqi@0: public final List description; aoqi@0: aoqi@0: DCSerialField(DCIdentifier name, DCReference type, List description) { aoqi@0: this.description = description; aoqi@0: this.name = name; aoqi@0: this.type = type; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.SERIAL_FIELD; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitSerialField(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getDescription() { aoqi@0: return description; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public IdentifierTree getName() { aoqi@0: return name; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public ReferenceTree getType() { aoqi@0: return type; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCSince extends DCBlockTag implements SinceTree { aoqi@0: public final List body; aoqi@0: aoqi@0: DCSince(List body) { aoqi@0: this.body = body; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.SINCE; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitSince(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getBody() { aoqi@0: return body; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCStartElement extends DCEndPosTree implements StartElementTree { aoqi@0: public final Name name; aoqi@0: public final List attrs; aoqi@0: public final boolean selfClosing; aoqi@0: aoqi@0: DCStartElement(Name name, List attrs, boolean selfClosing) { aoqi@0: this.name = name; aoqi@0: this.attrs = attrs; aoqi@0: this.selfClosing = selfClosing; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.START_ELEMENT; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitStartElement(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Name getName() { aoqi@0: return name; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getAttributes() { aoqi@0: return attrs; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public boolean isSelfClosing() { aoqi@0: return selfClosing; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCText extends DCTree implements TextTree { aoqi@0: public final String text; aoqi@0: aoqi@0: DCText(String text) { aoqi@0: this.text = text; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.TEXT; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitText(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public String getBody() { aoqi@0: return text; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCThrows extends DCBlockTag implements ThrowsTree { aoqi@0: public final Kind kind; aoqi@0: public final DCReference name; aoqi@0: public final List description; aoqi@0: aoqi@0: DCThrows(Kind kind, DCReference name, List description) { aoqi@0: Assert.check(kind == Kind.EXCEPTION || kind == Kind.THROWS); aoqi@0: this.kind = kind; aoqi@0: this.name = name; aoqi@0: this.description = description; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return kind; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitThrows(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public ReferenceTree getExceptionName() { aoqi@0: return name; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getDescription() { aoqi@0: return description; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCUnknownBlockTag extends DCBlockTag implements UnknownBlockTagTree { aoqi@0: public final Name name; aoqi@0: public final List content; aoqi@0: aoqi@0: DCUnknownBlockTag(Name name, List content) { aoqi@0: this.name = name; aoqi@0: this.content = content; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.UNKNOWN_BLOCK_TAG; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitUnknownBlockTag(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public String getTagName() { aoqi@0: return name.toString(); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getContent() { aoqi@0: return content; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCUnknownInlineTag extends DCInlineTag implements UnknownInlineTagTree { aoqi@0: public final Name name; aoqi@0: public final List content; aoqi@0: aoqi@0: DCUnknownInlineTag(Name name, List content) { aoqi@0: this.name = name; aoqi@0: this.content = content; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.UNKNOWN_INLINE_TAG; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitUnknownInlineTag(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public String getTagName() { aoqi@0: return name.toString(); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getContent() { aoqi@0: return content; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCValue extends DCInlineTag implements ValueTree { aoqi@0: public final DCReference ref; aoqi@0: aoqi@0: DCValue(DCReference ref) { aoqi@0: this.ref = ref; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.VALUE; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitValue(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public ReferenceTree getReference() { aoqi@0: return ref; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public static class DCVersion extends DCBlockTag implements VersionTree { aoqi@0: public final List body; aoqi@0: aoqi@0: DCVersion(List body) { aoqi@0: this.body = body; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public Kind getKind() { aoqi@0: return Kind.VERSION; aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public R accept(DocTreeVisitor v, D d) { aoqi@0: return v.visitVersion(this, d); aoqi@0: } aoqi@0: aoqi@0: @Override aoqi@0: public List getBody() { aoqi@0: return body; aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: }