/* * Copyright (c) 2013, the Dart project authors. * * Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html * * 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.dart.engine.html.ast; import com.google.dart.engine.element.Element; import com.google.dart.engine.element.HtmlElement; import com.google.dart.engine.html.ast.visitor.XmlVisitor; import com.google.dart.engine.html.scanner.Token; import com.google.dart.engine.html.scanner.TokenType; import java.util.List; /** * Instances of the class {@code HtmlUnit} represent the contents of an HTML file. * * @coverage dart.engine.html */ public class HtmlUnit extends XmlNode { /** * The first token in the token stream that was parsed to form this HTML unit. */ private final Token beginToken; /** * The last token in the token stream that was parsed to form this compilation unit. This token * should always have a type of {@link TokenType.EOF}. */ private final Token endToken; /** * The tag nodes contained in the receiver (not {@code null}, contains no {@code null}s). */ private final List<XmlTagNode> tagNodes; /** * Construct a new instance representing the content of an HTML file. * * @param beginToken the first token in the file (not {@code null}) * @param tagNodes child tag nodes of the receiver (not {@code null}, contains no {@code null}s) * @param endToken the last token in the token stream which should be of type * {@link TokenType.EOF} */ public HtmlUnit(Token beginToken, List<XmlTagNode> tagNodes, Token endToken) { this.beginToken = beginToken; this.tagNodes = becomeParentOfAll(tagNodes); this.endToken = endToken; } @Override public <R> R accept(XmlVisitor<R> visitor) { return visitor.visitHtmlUnit(this); } @Override public Token getBeginToken() { return beginToken; } /** * Return the element associated with this HTML unit. * * @return the element or {@code null} if the receiver is not resolved */ @Override public HtmlElement getElement() { return (HtmlElement) super.getElement(); } @Override public Token getEndToken() { return endToken; } /** * Answer the tag nodes contained in the receiver. Callers should not manipulate the returned list * to edit the AST structure. * * @return the children (not {@code null}, contains no {@code null}s) */ public List<XmlTagNode> getTagNodes() { return tagNodes; } @Override public void setElement(Element element) { if (element != null && !(element instanceof HtmlElement)) { throw new IllegalArgumentException("HtmlElement expected, but " + element.getClass() + " given"); } super.setElement(element); } @Override public void visitChildren(XmlVisitor<?> visitor) { for (XmlTagNode node : tagNodes) { node.accept(visitor); } } }