/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.gosu.parser.statements; import gw.internal.gosu.parser.Expression; import gw.internal.gosu.parser.Statement; import gw.lang.parser.IExpression; import gw.lang.parser.IStatement; import gw.lang.parser.expressions.IVarStatement; import gw.lang.parser.statements.IUsingStatement; import gw.lang.parser.statements.ITerminalStatement; import java.util.Collections; import java.util.List; /** * Represents the using-statement as specified in the Gosu grammar: * <pre> * <i>using-statement</i> * <b>using</b> <b>(</b> <expression> | <var-statement-list> <b>)</b> <statement> [ <b>finally</b> <statement> ] * <i>var-statement-list</i> * <var-statement> [, var-statement-list] * </pre> * <p/> * * @see gw.lang.parser.IGosuParser */ public final class UsingStatement extends Statement implements IUsingStatement { private Expression _expression; private List<IVarStatement> _varStmts; private Statement _statement; private Statement _finallyStatement; public UsingStatement() { _varStmts = Collections.emptyList(); } /** * @return The single expression (mutually exclusive with getVarStatements) */ public Expression getExpression() { return _expression; } public void setExpression( IExpression expression ) { _expression = (Expression)expression; } /** * @return The statement to execute */ public Statement getStatement() { return _statement; } public void setStatement( IStatement statement ) { _statement = (Statement)statement; } /** * @return The var-statements (mutually exclusive with getExpression) */ public List<IVarStatement> getVarStatements() { return _varStmts; } public boolean hasVarStatements() { return _varStmts != null && !_varStmts.isEmpty(); } public void setVarStatements( List<IVarStatement> varStmts ) { _varStmts = varStmts; } public Statement getFinallyStatement() { return _finallyStatement; } public void setFinallyStatement( Statement finallyStatement ) { _finallyStatement = finallyStatement; } public Object execute() { if( !isCompileTimeConstant() ) { return super.execute(); } throw new IllegalStateException( "Can't execute this parsed element directly" ); } protected ITerminalStatement getLeastSignificantTerminalStatement_internal( boolean[] bAbsolute ) { bAbsolute[0] = false; return getStatement() == null ? null : getStatement().getLeastSignificantTerminalStatement( bAbsolute ); } public String toString() { return "using( " + (getExpression() == null ? varStatementsToString() : getExpression().toString()) + " )\n" + getStatement() == null ? "" : getStatement().toString() + (getFinallyStatement() == null ? "" : ("\nfinally\n" + getFinallyStatement().toString())); } private String varStatementsToString() { String s = ""; for( IVarStatement varStmt : getVarStatements() ) { if( s.length() == 0 ) { s += varStmt.toString(); } else { s += ", "; } } return s; } }