/*
* ActionScriptWalker.java
*
* Copyright (c) 2008 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.visitor;
import java.util.Iterator;
import java.util.List;
import uk.co.badgersinfoil.metaas.dom.*;
public class ActionScriptWalker implements ActionScriptVisitor {
private ScriptElementStrategy strategy;
public ActionScriptWalker(FilterStrategy strategy) {
this.strategy = strategy;
strategy.setFiltered(new ScriptElementSwitch(this));
}
/**
* @param elements a list of {@link ScriptElement}.
*/
public void walk(List elements) {
for (Iterator i=elements.iterator(); i.hasNext(); ) {
walk((ScriptElement)i.next());
}
}
public void walk(ScriptElement e) {
strategy.handle(e);
}
/**
* walks each statement in the container
*/
public void walkStatementContainer(StatementContainer container) {
walk(container.getStatementList());
}
public void visitArg(ASArg arg) {
}
public void visitArrayAccessExpression(ASArrayAccessExpression expr) {
walk(expr.getTargetExpression());
walk(expr.getSubscriptExpression());
}
public void visitArrayLiteral(ASArrayLiteral lit) {
walk(lit.getEntries());
}
public void visitAssignmentExpression(ASAssignmentExpression expr) {
walk(expr.getLeftSubexpression());
walk(expr.getRightSubexpression());
}
public void visitBinaryExpression(ASBinaryExpression expr) {
walk(expr.getLeftSubexpression());
walk(expr.getRightSubexpression());
}
public void visitBlockStatement(ASBlock stmt) {
walkStatementContainer(stmt);
}
public void visitBooleanLiteral(ASBooleanLiteral lit) {
}
public void visitBreakStatement(ASBreakStatement stmt) {
}
public void visitCatchClause(ASCatchClause catchClause) {
walkStatementContainer(catchClause);
}
public void visitClassType(ASClassType type) {
walk(type.getAllMetaTags());
walk(type.getFields());
walk(type.getMethods());
}
public void visitCompilationUnit(ASCompilationUnit unit) {
walk(unit.getPackage());
}
public void visitConditionalExpression(ASConditionalExpression expr) {
walk(expr.getConditionExpression());
walk(expr.getThenExpression());
walk(expr.getElseExpression());
}
public void visitContinueStatement(ASContinueStatement stmt) {
}
public void visitDeclarationStatement(ASDeclarationStatement stmt) {
walk(stmt.getVars());
}
public void visitDefaultXMLNamespaceStatement(ASDefaultXMLNamespaceStatement stmt) {
}
public void visitDoWhileStatement(ASDoWhileStatement stmt) {
walk(stmt.getCondition());
walkStatementContainer(stmt);
}
public void visitDescendantExpression(ASDescendantExpression expr) {
walk(expr.getTarget());
walk(expr.getQuery());
}
public void visitExpressionAttribute(ASExpressionAttribute expr) {
walk(expr.getExpression());
}
public void visitExpressionStatement(ASExpressionStatement stmt) {
walk(stmt.getExpression());
}
public void visitField(ASField field) {
walk(field.getAllMetaTags());
}
public void visitFieldAccessExpression(ASFieldAccessExpression expr) {
walk(expr.getTargetExpression());
}
public void visitFilterExpression(ASFilterExpression expr) {
walk(expr.getTarget());
walk(expr.getQuery());
}
public void visitFinallyClause(ASFinallyClause fin) {
walkStatementContainer(fin);
}
public void visitForEachInStatement(ASForEachInStatement stmt) {
// TODO: stmt.getVar();
walk(stmt.getIterated());
walkStatementContainer(stmt);
}
public void visitForInStatement(ASForInStatement stmt) {
// TODO: stmt.getVar();
walk(stmt.getIterated());
walkStatementContainer(stmt);
}
public void visitForStatement(ASForStatement stmt) {
// TODO: stmt.getInit();
Expression condition = stmt.getCondition();
if (condition != null) {
walk(condition);
}
Expression update = stmt.getUpdate();
if (update != null) {
walk(update);
}
walkStatementContainer(stmt);
}
public void visitFunctionExpression(ASFunctionExpression expr) {
walk(expr.getArgs());
walkStatementContainer((expr));
}
public void visitIfStatement(ASIfStatement stmt) {
walk(stmt.getCondition());
walk(stmt.getThenStatement());
Statement elseStmt = stmt.getElseStatement();
if (elseStmt != null) {
walk(elseStmt);
}
}
public void visitIntegerLiteral(ASIntegerLiteral lit) {
}
public void visitInterfaceType(ASInterfaceType type) {
walk(type.getAllMetaTags());
walk(type.getMethods());
}
public void visitInvocationExpression(ASInvocationExpression expr) {
walk(expr.getTargetExpression());
walk(expr.getArguments());
}
public void visitMetaTag(ASMetaTag tag) {
}
public void visitMethod(ASMethod method) {
walk(method.getAllMetaTags());
walk(method.getArgs());
walkStatementContainer(method);
}
public void visitNewExpression(ASNewExpression expr) {
walk(expr.getTargetExpression());
walk(expr.getArguments());
}
public void visitNullLiteral(ASNullLiteral lit) {
}
public void visitObjectLiteral(ASObjectLiteral lit) {
walk(lit.getFields());
}
public void visitObjectField(ASObjectLiteral.Field field) {
walk(field.getValue());
}
public void visitPackage(ASPackage pkg) {
walk(pkg.getType());
}
public void visitPostfixExpression(ASPostfixExpression expr) {
walk(expr.getSubexpression());
}
public void visitPrefixExpression(ASPrefixExpression expr) {
walk(expr.getSubexpression());
}
public void visitPropertyAttribute(ASPropertyAttribute expr) {
}
public void visitRegexpLiteral(ASRegexpLiteral e) {
}
public void visitReturnStatement(ASReturnStatement stmt) {
Expression ret = stmt.getExpression();
if (ret != null) {
walk(ret);
}
}
public void visitSimpleNameExpression(ASSimpleNameExpression e) {
}
public void visitStringLiteral(ASStringLiteral lit) {
}
public void visitStarAttribute(ASStarAttribute expr) {
}
public void visitSuperStatement(ASSuperStatement stmt) {
walk(stmt.getArguments());
}
public void visitSwitchCase(ASSwitchCase lab) {
walk(lab.getLabelValue());
walkStatementContainer(lab);
}
public void visitSwitchDefault(ASSwitchDefault lab) {
walkStatementContainer(lab);
}
public void visitSwitchStatement(ASSwitchStatement stmt) {
walk(stmt.getCondition());
walk(stmt.getLabels());
}
public void visitThrowStatement(ASThrowStatement stmt) {
walk(stmt.getExpression());
}
public void visitTryStatement(ASTryStatement stmt) {
walkStatementContainer(stmt);
List catchClauses = stmt.getCatchClauses();
if (!catchClauses.isEmpty()) {
walk(catchClauses);
}
ASFinallyClause fin = stmt.getFinallyClause();
if (fin != null) {
walk(fin);
}
}
public void visitUndefinedLiteral(ASUndefinedLiteral lit) {
}
public void visitVarDeclarationFragment(ASVarDeclarationFragment var) {
walk(var.getInitializer());
}
public void visitWhileStatement(ASWhileStatement stmt) {
walk(stmt.getCondition());
walk(stmt.getBody());
}
public void visitWithStatement(ASWithStatement stmt) {
walk(stmt.getScope());
walk(stmt.getBody());
}
public void visitXMLLiteral(ASXMLLiteral lit) {
}
}