package com.github.sommeri.less4j.core.ast; import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.github.sommeri.less4j.core.ast.annotations.NotAstProperty; import com.github.sommeri.less4j.core.parser.HiddenTokenAwareTree; //TODO: this name no longer reflects the reality, it should be abstract reusable structure name at best public class ReusableStructureName extends ASTCssNode { private List<ElementSubsequent> nameParts = new ArrayList<ElementSubsequent>(); public ReusableStructureName(HiddenTokenAwareTree underlyingStructure) { super(underlyingStructure); } public ReusableStructureName(HiddenTokenAwareTree underlyingStructure, List<ElementSubsequent> nameParts) { this(underlyingStructure); this.nameParts=nameParts; } public boolean isInterpolated() { for (ElementSubsequent namePart : nameParts) { if (namePart.isInterpolated()) return true; } return false; } public String asString() { String result = ""; for (ElementSubsequent namePart : nameParts) { result+=namePart.getFullName(); } return result; } public List<ElementSubsequent> getNameParts() { return nameParts; } public void addNamePart(ElementSubsequent namePart) { nameParts.add(namePart); } public boolean hasMultipleParts() { return nameParts.size()>1; } @Override @NotAstProperty public List<? extends ASTCssNode> getChilds() { //TODO: review needed: this is suspect, shouldnt it return list of name parts? return Collections.emptyList(); } @Override public ASTCssNodeType getType() { return ASTCssNodeType.REUSABLE_STRUCTURE_NAME; } @Override public String toString() { StringBuilder result = new StringBuilder(); for (ElementSubsequent namePart : nameParts) { result.append(namePart); } return result.toString(); } @Override public ReusableStructureName clone() { ReusableStructureName result = (ReusableStructureName) super.clone(); result.nameParts = new ArrayList<ElementSubsequent>(nameParts); return result; } }