package de.skuzzle.polly.core.parser.ast.expressions; import java.util.Collection; import java.util.List; import de.skuzzle.polly.core.parser.Position; import de.skuzzle.polly.core.parser.ast.declarations.types.Type; import de.skuzzle.polly.core.parser.ast.visitor.ASTTraversal; import de.skuzzle.polly.core.parser.ast.visitor.ASTTraversalException; import de.skuzzle.polly.core.parser.ast.visitor.ASTVisitor; import de.skuzzle.polly.core.parser.ast.visitor.Transformation; /** * Encapsulates another expression for the sole reason to represent that that expression * was entered in braces. * * @author Simon Taddiken */ public class Braced extends Expression { private Expression expression; /** * Creates a new braced expression. * * @param position Source position of this expression. * @param braced The expression in braces. */ public Braced(Position position, Expression braced) { super(position, braced.getUnique()); this.expression = braced; } @Override public void setUnique(Type type) { this.expression.setUnique(type); } @Override public Type getUnique() { return this.expression.getUnique(); } @Override public boolean addType(Type type) { return this.expression.addType(type); } @Override public void addTypes(Collection<? extends Type> types) { this.expression.addTypes(types); } @Override public List<Type> getTypes() { return this.expression.getTypes(); } /** * Sets the expression in parenthesis. * * @param expression The braced expression. */ public void setExpression(Expression expression) { this.expression = expression; } @Override public boolean visit(ASTVisitor visitor) throws ASTTraversalException { return visitor.visit(this); } @Override public Expression transform(Transformation transformation) throws ASTTraversalException { return transformation.transformBraced(this); } @Override public boolean traverse(ASTTraversal visitor) throws ASTTraversalException { switch (visitor.before(this)) { case ASTTraversal.SKIP: return true; case ASTTraversal.ABORT: return false; } if (!this.expression.traverse(visitor)) { return false; } return visitor.after(this) == ASTTraversal.CONTINUE; } /** * Gets the encapsulated expression. * * @return The expression that occurred in braces. */ public Expression getExpression() { return this.expression; } @Override public String toString() { return "(" + this.expression.toString() + ")"; } }