/******************************************************************************* * Copyright © 2011, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * *******************************************************************************/ package org.eclipse.edt.compiler.core.ast; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * CaseStatement AST node type. * * @author Albert Ho * @author David Murray */ public class CaseStatement extends Statement { private Expression parenthesizedExprOpt; private List whenClauses; // List of WhenClauses private OtherwiseClause defaultClauseOpt; public CaseStatement(Expression parenthesizedExprOpt, List whenClauses, OtherwiseClause defaultClauseOpt, int startOffset, int endOffset) { super(startOffset, endOffset); if(parenthesizedExprOpt != null) { this.parenthesizedExprOpt = parenthesizedExprOpt; parenthesizedExprOpt.setParent(this); } this.whenClauses = setParent(whenClauses); if(defaultClauseOpt != null) { this.defaultClauseOpt = defaultClauseOpt; defaultClauseOpt.setParent(this); } } public boolean hasCriterion() { return parenthesizedExprOpt != null; } public Expression getCriterion() { return parenthesizedExprOpt; } public List<WhenClause> getWhenClauses() { return whenClauses; } public boolean hasOtherwiseClause() { return defaultClauseOpt != null; } public OtherwiseClause getDefaultClause() { return defaultClauseOpt; } public void accept(IASTVisitor visitor) { boolean visitChildren = visitor.visit(this); if(visitChildren) { if(parenthesizedExprOpt != null) parenthesizedExprOpt.accept(visitor); acceptChildren(visitor, whenClauses); if(defaultClauseOpt != null) defaultClauseOpt.accept(visitor); } visitor.endVisit(this); } public boolean canIncludeOtherStatements() { return true; } public List<List<Node>> getStatementBlocks() { List<List<Node>> result = new ArrayList<List<Node>>(); for(Iterator iter = whenClauses.iterator(); iter.hasNext();) { result.add(((WhenClause) iter.next()).getStmts()); } if(defaultClauseOpt != null) { result.add(defaultClauseOpt.getStatements()); } return result; } protected Object clone() throws CloneNotSupportedException { Expression newParenthesizedExprOpt = parenthesizedExprOpt != null ? (Expression)parenthesizedExprOpt.clone() : null; OtherwiseClause newDefaultClauseOpt = defaultClauseOpt != null ? (OtherwiseClause)defaultClauseOpt.clone() : null; return new CaseStatement(newParenthesizedExprOpt, cloneList(whenClauses), newDefaultClauseOpt, getOffset(), getOffset() + getLength()); } }