/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.devtools.j2objc.ast; import java.util.List; /** * Node for a tag within a doc comment. */ public class TagElement extends TreeNode { /** * The kinds of TagElements. */ public enum TagKind { AUTHOR("@author"), CODE("@code"), DEPRECATED("@deprecated"), EXCEPTION("@exception"), LINK("@link"), LINKPLAIN("@linkplain"), LITERAL("@literal"), PARAM("@param"), RETURN("@return"), SEE("@see"), SINCE("@since"), THROWS("@throw"), VERSION("@version"), // Tag elements that don't have a tag name. DESCRIPTION(""), UNKNOWN(""); private final String tagName; TagKind(String name) { tagName = name; } public static TagKind parse(String tagName) { for (TagKind tk : values()) { if (tagName.equals(tk.tagName)) { return tk; } } return UNKNOWN; } @Override public String toString() { return tagName; } } private TagKind tagKind; private ChildList<TreeNode> fragments = ChildList.create(TreeNode.class, this); public TagElement() { this.tagKind = TagKind.UNKNOWN; } public TagElement(TagElement other) { super(other); this.tagKind = other.getTagKind(); fragments.copyFrom(other.getFragments()); } @Override public Kind getKind() { return Kind.TAG_ELEMENT; } public TagKind getTagKind() { return tagKind; } public TagElement setTagKind(TagKind tagKind) { this.tagKind = tagKind; return this; } public List<TreeNode> getFragments() { return fragments; } public TagElement addFragment(TreeNode fragment) { fragments.add(fragment); return this; } @Override protected void acceptInner(TreeVisitor visitor) { if (visitor.visit(this)) { fragments.accept(visitor); } visitor.endVisit(this); } @Override public TagElement copy() { return new TagElement(this); } }