All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.htmlunit.corejs.javascript.ast.TemplateLiteral Maven / Gradle / Ivy

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

package org.htmlunit.corejs.javascript.ast;

import static java.util.Collections.emptyList;
import static java.util.Collections.unmodifiableList;

import java.util.ArrayList;
import java.util.List;
import org.htmlunit.corejs.javascript.Token;

/**
 * AST node for a Template literal.
 *
 * 

Node type is {@link Token#TEMPLATE_LITERAL}. */ public class TemplateLiteral extends AstNode { private List elements; { type = Token.TEMPLATE_LITERAL; } public TemplateLiteral() {} public TemplateLiteral(int pos) { super(pos); } public TemplateLiteral(int pos, int len) { super(pos, len); } /** Returns a list of all literal sections of this template literal */ public List getTemplateStrings() { if (elements == null) return emptyList(); List strings = new ArrayList<>(); for (AstNode e : elements) { if (e.getType() == Token.TEMPLATE_CHARS) { strings.add((TemplateCharacters) e); } } return unmodifiableList(strings); } /** Returns a list of all substitutions of this template literal */ public List getSubstitutions() { if (elements == null) return emptyList(); List subs = new ArrayList<>(); for (AstNode e : elements) { if (e.getType() != Token.TEMPLATE_CHARS) { subs.add(e); } } return unmodifiableList(subs); } /** * Returns the element list * * @return the element list. If there are no elements, returns an immutable empty list. */ public List getElements() { if (elements == null) return emptyList(); return elements; } /** * Sets the element list, and sets each element's parent to this node. * * @param elements the element list. Can be {@code null}. */ public void setElements(List elements) { if (elements == null) { this.elements = null; } else { if (this.elements != null) this.elements.clear(); for (AstNode e : elements) addElement(e); } } /** * Adds an element to the list, and sets its parent to this node. * * @param element the element to add * @throws IllegalArgumentException if element is {@code null}. */ public void addElement(AstNode element) { assertNotNull(element); if (elements == null) elements = new ArrayList<>(); elements.add(element); element.setParent(this); } /** Returns the number of elements in this {@code TemplateLiteral} literal. */ public int getSize() { return elements == null ? 0 : elements.size(); } /** * Returns element at specified index. * * @param index the index of the element to retrieve * @return the element * @throws IndexOutOfBoundsException if the index is invalid */ public AstNode getElement(int index) { if (elements == null) throw new IndexOutOfBoundsException("no elements"); return elements.get(index); } @Override public String toSource(int depth) { StringBuilder sb = new StringBuilder(); sb.append(makeIndent(depth)); sb.append("`"); for (AstNode e : getElements()) { if (e.getType() == Token.TEMPLATE_CHARS) { sb.append(e.toSource(0)); } else { sb.append("${").append(e.toSource(0)).append("}"); } } sb.append("`"); return sb.toString(); } /** Visits this node. */ @Override public void visit(NodeVisitor v) { if (v.visit(this)) { for (AstNode e : getElements()) { e.visit(v); } } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy