package com.github.javaparser.ast.expr; import com.github.javaparser.ast.visitor.GenericVisitor; import com.github.javaparser.ast.visitor.VoidVisitor; import java.util.List; /** * @author James X. Nelson (james@wetheinter.net) * Created on 4/10/16. */ public class CssSelectorExpr extends CssExpr { private final List<String> parts; private boolean frozen; public CssSelectorExpr( final int beginLine, final int beginColumn, final int endLine, final int endColumn, List<String> parts ) { super(beginLine, beginColumn, endLine, endColumn); this.parts = parts; } public List<String> getParts() { return parts; } public void setParts(List<String> parts) { // Ugh. This changes the hashcode... assert !frozen : "You are mutating a CssSelectorExpr after its hashCode method has been accessed."; this.parts.clear(); this.parts.addAll(parts); } @Override public <R, A> R accept(GenericVisitor<R, A> v, A arg) { return v.visit(this, arg); } @Override public <A> void accept(VoidVisitor<A> v, A arg) { v.visit(this, arg); } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof CssSelectorExpr)) return false; if (!super.equals(o)) return false; final CssSelectorExpr that = (CssSelectorExpr) o; return parts.equals(that.parts); } @Override public int hashCode() { assert (frozen = true); // do not allow mutations after the hashCode has been accessed. int result = super.hashCode(); result = 31 * result + parts.hashCode(); return result; } public String joinParts() { StringBuilder b = new StringBuilder(); String prefix = ""; for (String part : parts) { if (part.startsWith(":") && !part.startsWith("::")) { b.append(part); } else { b.append(prefix).append(part); } prefix = " "; } return b.toString(); } }