/* * StatementBuilder.java * * Copyright (c) 2006-2007 David Holroyd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package uk.co.badgersinfoil.metaas.impl; import org.asdt.core.internal.antlr.AS3Parser; import uk.co.badgersinfoil.metaas.ActionScriptFactory; import uk.co.badgersinfoil.metaas.SyntaxException; import uk.co.badgersinfoil.metaas.dom.Statement; import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree; /** * Utility for building {@link Statement} implementations wrapping statement * nodes in the AST. */ public class StatementBuilder { /** * Build a Statement implementation (ASTAS*Statement) appropriate for * the type of the given AST node. */ public static Statement build(LinkedListTree ast) { switch (ast.getType()) { case AS3Parser.BLOCK: return new ASTStatementList(ast); case AS3Parser.DO: return new ASTASDoWhileStatement(ast); case AS3Parser.EXPR_STMNT: return new ASTASExpressionStatement(ast); case AS3Parser.FOR_EACH: return new ASTASForEachInStatement(ast); case AS3Parser.FOR_IN: return new ASTASForInStatement(ast); case AS3Parser.FOR: return new ASTASForStatement(ast); case AS3Parser.IF: return new ASTASIfStatement(ast); case AS3Parser.SWITCH: return new ASTASSwitchStatement(ast); case AS3Parser.CONST: case AS3Parser.VAR: return new ASTASDeclarationStatement(ast); case AS3Parser.WHILE: return new ASTASWhileStatement(ast); case AS3Parser.WITH: return new ASTASWithStatement(ast); case AS3Parser.RETURN: return new ASTASReturnStatement(ast); case AS3Parser.SUPER: return new ASTASSuperStatement(ast); case AS3Parser.BREAK: return new ASTASBreakStatement(ast); case AS3Parser.TRY: return new ASTASTryStatement(ast); case AS3Parser.DEFAULT_XML_NAMESPACE: return new ASTASDefaultXMLNamespaceStatement(ast); case AS3Parser.CONTINUE: return new ASTASContinueStatement(ast); case AS3Parser.THROW: return new ASTASThrowStatement(ast); default: throw new SyntaxException("Unsupported statement node type: "+ASTUtils.tokenName(ast)+" in "+ActionScriptFactory.str(ASTUtils.stringifyNode(ast))); } } }