<html>
<head>
<style><!--
  body {background-color:#ffffff;}
  .file {border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;}
  .pathname {font-family:monospace; float:right;}
  .fileheader {margin-bottom:.5em;}
  .diff {margin:0;}
  .tasklist {padding:4px;border:1px dashed #000000;margin-top:1em;}
  .tasklist ul {margin-top:0;margin-bottom:0;}
  tr.alt {background-color:#eeeeee}
  #added {background-color:#ddffdd;}
  #addedchars {background-color:#99ff99;font-weight:bolder;}
  tr.alt #added {background-color:#ccf7cc;}
  #removed {background-color:#ffdddd;}
  #removedchars {background-color:#ff9999;font-weight:bolder;}
  tr.alt #removed {background-color:#f7cccc;}
  #copied {background-color:#ccccff;}
  tr.alt #copied {background-color:#bbbbf7;}
  #info {color:#888888;}
  #context {background-color:#eeeeee;}
  td {padding-left:.3em;padding-right:.3em;}
  tr.head {border-bottom-width:1px;border-bottom-style:solid;}
  tr.head td {padding:0;padding-top:.2em;}
  .task {background-color:#ffff00;}
  .comment {white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;padding:4px;border:1px dashed #000000;background-color:#ffffdd}
  .error {color:red;}
  hr {border-width:0px;height:2px;background:black;}
--></style>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head"><td colspan="5">Commit in <b><tt>metaas/trunk/src</tt></b></td></tr>
<tr><td><tt>main/java/uk/co/badgersinfoil/metaas/visitor/<a href="#file1"><span id="added">ActionScriptVisitor.java</span></a></tt> </td><td></td><td align="right" id="added">+310</td><td></td><td nowrap="nowrap" align="right">added 695</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file2"><span id="added">ActionScriptWalker.java</span></a></tt> </td><td></td><td align="right" id="added">+316</td><td></td><td nowrap="nowrap" align="right">added 695</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file3"><span id="added">BeforeAfterStrategy.java</span></a></tt> </td><td></td><td align="right" id="added">+72</td><td></td><td nowrap="nowrap" align="right">added 695</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file4"><span id="added">FilterStrategy.java</span></a></tt> </td><td></td><td align="right" id="added">+46</td><td></td><td nowrap="nowrap" align="right">added 695</td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file5"><span id="added">ScriptElementStrategy.java</span></a></tt> </td><td></td><td align="right" id="added">+25</td><td></td><td nowrap="nowrap" align="right">added 695</td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file6"><span id="added">ScriptElementSwitch.java</span></a></tt> </td><td></td><td align="right" id="added">+149</td><td></td><td nowrap="nowrap" align="right">added 695</td></tr>
<tr><td><tt>test/java/uk/co/badgersinfoil/metaas/visitor/<a href="#file7"><span id="added">ActionScriptWalkerTest.java</span></a></tt> </td><td></td><td align="right" id="added">+32</td><td></td><td nowrap="nowrap" align="right">added 695</td></tr>
<tr><td></td><td></td><td align="right" id="added">+950</td><td></td><td></td></tr>
</table>
<small id="info">7 added files</small><br />
<div class="tasklist"><ul>
<li><a href="#task1">TODO: stmt.getVar();</a></li>
<li><a href="#task2">TODO: stmt.getVar();</a></li>
<li><a href="#task3">TODO: stmt.getInit();</a></li>
</ul></div>
<pre class="comment">
initial work on a 'visitor' pattern implementation
</pre>
<hr /><a name="file1" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor</span><br />
<div class="fileheader" id="added"><big><b>ActionScriptVisitor.java</b></big> <small id="info">added at 695</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor/ActionScriptVisitor.java                                (rev 0)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor/ActionScriptVisitor.java        2008-03-25 23:01:22 UTC (rev 695)
@@ -0,0 +1,310 @@
</small></pre><pre class="diff" id="added">+/*
+ * ActionScriptVisitor.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 uk.co.badgersinfoil.metaas.dom.ASArg;
+import uk.co.badgersinfoil.metaas.dom.ASArrayAccessExpression;
+import uk.co.badgersinfoil.metaas.dom.ASArrayLiteral;
+import uk.co.badgersinfoil.metaas.dom.ASAssignmentExpression;
+import uk.co.badgersinfoil.metaas.dom.ASBinaryExpression;
+import uk.co.badgersinfoil.metaas.dom.ASBlock;
+import uk.co.badgersinfoil.metaas.dom.ASBooleanLiteral;
+import uk.co.badgersinfoil.metaas.dom.ASBreakStatement;
+import uk.co.badgersinfoil.metaas.dom.ASCatchClause;
+import uk.co.badgersinfoil.metaas.dom.ASClassType;
+import uk.co.badgersinfoil.metaas.dom.ASCompilationUnit;
+import uk.co.badgersinfoil.metaas.dom.ASConditionalExpression;
+import uk.co.badgersinfoil.metaas.dom.ASContinueStatement;
+import uk.co.badgersinfoil.metaas.dom.ASDeclarationStatement;
+import uk.co.badgersinfoil.metaas.dom.ASDefaultXMLNamespaceStatement;
+import uk.co.badgersinfoil.metaas.dom.ASDescendantExpression;
+import uk.co.badgersinfoil.metaas.dom.ASDoWhileStatement;
+import uk.co.badgersinfoil.metaas.dom.ASExpressionAttribute;
+import uk.co.badgersinfoil.metaas.dom.ASExpressionStatement;
+import uk.co.badgersinfoil.metaas.dom.ASField;
+import uk.co.badgersinfoil.metaas.dom.ASFieldAccessExpression;
+import uk.co.badgersinfoil.metaas.dom.ASFilterExpression;
+import uk.co.badgersinfoil.metaas.dom.ASFinallyClause;
+import uk.co.badgersinfoil.metaas.dom.ASForEachInStatement;
+import uk.co.badgersinfoil.metaas.dom.ASForInStatement;
+import uk.co.badgersinfoil.metaas.dom.ASForStatement;
+import uk.co.badgersinfoil.metaas.dom.ASFunctionExpression;
+import uk.co.badgersinfoil.metaas.dom.ASIfStatement;
+import uk.co.badgersinfoil.metaas.dom.ASIntegerLiteral;
+import uk.co.badgersinfoil.metaas.dom.ASInterfaceType;
+import uk.co.badgersinfoil.metaas.dom.ASInvocationExpression;
+import uk.co.badgersinfoil.metaas.dom.ASMetaTag;
+import uk.co.badgersinfoil.metaas.dom.ASMethod;
+import uk.co.badgersinfoil.metaas.dom.ASNewExpression;
+import uk.co.badgersinfoil.metaas.dom.ASNullLiteral;
+import uk.co.badgersinfoil.metaas.dom.ASObjectLiteral;
+import uk.co.badgersinfoil.metaas.dom.ASPackage;
+import uk.co.badgersinfoil.metaas.dom.ASPostfixExpression;
+import uk.co.badgersinfoil.metaas.dom.ASPrefixExpression;
+import uk.co.badgersinfoil.metaas.dom.ASPropertyAttribute;
+import uk.co.badgersinfoil.metaas.dom.ASRegexpLiteral;
+import uk.co.badgersinfoil.metaas.dom.ASReturnStatement;
+import uk.co.badgersinfoil.metaas.dom.ASSimpleNameExpression;
+import uk.co.badgersinfoil.metaas.dom.ASStarAttribute;
+import uk.co.badgersinfoil.metaas.dom.ASStringLiteral;
+import uk.co.badgersinfoil.metaas.dom.ASSuperStatement;
+import uk.co.badgersinfoil.metaas.dom.ASSwitchCase;
+import uk.co.badgersinfoil.metaas.dom.ASSwitchDefault;
+import uk.co.badgersinfoil.metaas.dom.ASSwitchStatement;
+import uk.co.badgersinfoil.metaas.dom.ASThrowStatement;
+import uk.co.badgersinfoil.metaas.dom.ASTryStatement;
+import uk.co.badgersinfoil.metaas.dom.ASUndefinedLiteral;
+import uk.co.badgersinfoil.metaas.dom.ASVarDeclarationFragment;
+import uk.co.badgersinfoil.metaas.dom.ASWhileStatement;
+import uk.co.badgersinfoil.metaas.dom.ASWithStatement;
+import uk.co.badgersinfoil.metaas.dom.ASXMLLiteral;
+import uk.co.badgersinfoil.metaas.dom.ASObjectLiteral.Field;
+
+public interface ActionScriptVisitor {
+        public void visitArg(ASArg arg);
+
+        public void visitArrayAccessExpression(ASArrayAccessExpression expr);
+
+        public void visitArrayLiteral(ASArrayLiteral lit);
+
+        public void visitAssignmentExpression(ASAssignmentExpression expr);
+
+        public void visitBinaryExpression(ASBinaryExpression expr);
+
+        public void visitBlockStatement(ASBlock stmt);
+
+        public void visitBooleanLiteral(ASBooleanLiteral lit);
+
+        public void visitBreakStatement(ASBreakStatement stmt);
+
+        public void visitCatchClause(ASCatchClause catchClause);
+
+        public void visitClassType(ASClassType type);
+
+        public void visitCompilationUnit(ASCompilationUnit unit);
+
+        public void visitConditionalExpression(ASConditionalExpression expr);
+
+        public void visitContinueStatement(ASContinueStatement stmt);
+
+        public void visitDeclarationStatement(ASDeclarationStatement stmt);
+
+        public void visitDefaultXMLNamespaceStatement(ASDefaultXMLNamespaceStatement stmt);
+
+        public void visitDoWhileStatement(ASDoWhileStatement stmt);
+
+        public void visitDescendantExpression(ASDescendantExpression expr);
+
+        public void visitExpressionAttribute(ASExpressionAttribute expr);
+
+        public void visitExpressionStatement(ASExpressionStatement stmt);
+
+        public void visitField(ASField field);
+
+        public void visitFieldAccessExpression(ASFieldAccessExpression expr);
+
+        public void visitFilterExpression(ASFilterExpression expr);
+
+        public void visitFinallyClause(ASFinallyClause fin);
+
+        public void visitForEachInStatement(ASForEachInStatement stmt);
+
+        public void visitForInStatement(ASForInStatement stmt);
+
+        public void visitForStatement(ASForStatement stmt);
+
+        public void visitFunctionExpression(ASFunctionExpression e);
+
+        public void visitIfStatement(ASIfStatement stmt);
+
+        public void visitIntegerLiteral(ASIntegerLiteral lit);
+
+        public void visitInterfaceType(ASInterfaceType type);
+
+        public void visitInvocationExpression(ASInvocationExpression expr);
+
+        public void visitMetaTag(ASMetaTag tag);
+
+        public void visitMethod(ASMethod method);
+
+        public void visitNewExpression(ASNewExpression expr);
+
+        public void visitNullLiteral(ASNullLiteral lit);
+
+        public void visitObjectField(ASObjectLiteral.Field field);
+
+        public void visitObjectLiteral(ASObjectLiteral lit);
+
+        public void visitPackage(ASPackage pkg);
+
+        public void visitPostfixExpression(ASPostfixExpression expr);
+
+        public void visitPrefixExpression(ASPrefixExpression expr);
+
+        public void visitPropertyAttribute(ASPropertyAttribute expr);
+
+        public void visitRegexpLiteral(ASRegexpLiteral e);
+
+        public void visitReturnStatement(ASReturnStatement stmt);
+
+        public void visitSimpleNameExpression(ASSimpleNameExpression e);
+
+        public void visitStringLiteral(ASStringLiteral lit);
+
+        public void visitStarAttribute(ASStarAttribute expr);
+
+        public void visitSuperStatement(ASSuperStatement stmt);
+
+        public void visitSwitchCase(ASSwitchCase lab);
+
+        public void visitSwitchDefault(ASSwitchDefault lab);
+
+        public void visitSwitchStatement(ASSwitchStatement stmt);
+
+        public void visitThrowStatement(ASThrowStatement stmt);
+
+        public void visitTryStatement(ASTryStatement stmt);
+
+        public void visitUndefinedLiteral(ASUndefinedLiteral lit);
+
+        public void visitVarDeclarationFragment(ASVarDeclarationFragment var);
+
+        public void visitWhileStatement(ASWhileStatement stmt);
+
+        public void visitWithStatement(ASWithStatement stmt);
+
+        public void visitXMLLiteral(ASXMLLiteral lit);
+        
+        public static class Null implements ActionScriptVisitor {
+                public void visitArg(ASArg arg) {
+                }
+                public void visitArrayAccessExpression(ASArrayAccessExpression expr) {
+                }
+                public void visitArrayLiteral(ASArrayLiteral lit) {
+                }
+                public void visitAssignmentExpression(ASAssignmentExpression expr) {
+                }
+                public void visitBinaryExpression(ASBinaryExpression expr) {
+                }
+                public void visitBlockStatement(ASBlock stmt) {
+                }
+                public void visitBooleanLiteral(ASBooleanLiteral lit) {
+                }
+                public void visitBreakStatement(ASBreakStatement stmt) {
+                }
+                public void visitCatchClause(ASCatchClause catchClause) {
+                }
+                public void visitClassType(ASClassType type) {
+                }
+                public void visitCompilationUnit(ASCompilationUnit unit) {
+                }
+                public void visitConditionalExpression(ASConditionalExpression expr) {
+                }
+                public void visitContinueStatement(ASContinueStatement stmt) {
+                }
+                public void visitDeclarationStatement(ASDeclarationStatement stmt) {
+                }
+                public void visitDefaultXMLNamespaceStatement(ASDefaultXMLNamespaceStatement stmt) {
+                }
+                public void visitDoWhileStatement(ASDoWhileStatement stmt) {
+                }
+                public void visitDescendantExpression(ASDescendantExpression expr) {
+                }
+                public void visitExpressionAttribute(ASExpressionAttribute expr) {
+                }
+                public void visitExpressionStatement(ASExpressionStatement stmt) {
+                }
+                public void visitField(ASField field) {
+                }
+                public void visitFieldAccessExpression(ASFieldAccessExpression expr) {
+                }
+                public void visitFilterExpression(ASFilterExpression expr) {
+                }
+                public void visitFinallyClause(ASFinallyClause fin) {
+                }
+                public void visitForEachInStatement(ASForEachInStatement stmt) {
+                }
+                public void visitForInStatement(ASForInStatement stmt) {
+                }
+                public void visitForStatement(ASForStatement stmt) {
+                }
+                public void visitFunctionExpression(ASFunctionExpression e) {
+                }
+                public void visitIfStatement(ASIfStatement stmt) {
+                }
+                public void visitIntegerLiteral(ASIntegerLiteral lit) {
+                }
+                public void visitInterfaceType(ASInterfaceType type) {
+                }
+                public void visitInvocationExpression(ASInvocationExpression expr) {
+                }
+                public void visitMetaTag(ASMetaTag tag) {
+                }
+                public void visitMethod(ASMethod method) {
+                }
+                public void visitNewExpression(ASNewExpression expr) {
+                }
+                public void visitNullLiteral(ASNullLiteral lit) {
+                }
+                public void visitObjectField(Field field) {
+                }
+                public void visitObjectLiteral(ASObjectLiteral lit) {
+                }
+                public void visitPackage(ASPackage pkg) {
+                }
+                public void visitPostfixExpression(ASPostfixExpression expr) {
+                }
+                public void visitPrefixExpression(ASPrefixExpression expr) {
+                }
+                public void visitPropertyAttribute(ASPropertyAttribute expr) {
+                }
+                public void visitRegexpLiteral(ASRegexpLiteral e) {
+                }
+                public void visitReturnStatement(ASReturnStatement stmt) {
+                }
+                public void visitSimpleNameExpression(ASSimpleNameExpression e) {
+                }
+                public void visitStringLiteral(ASStringLiteral lit) {
+                }
+                public void visitStarAttribute(ASStarAttribute expr) {
+                }
+                public void visitSuperStatement(ASSuperStatement stmt) {
+                }
+                public void visitSwitchCase(ASSwitchCase lab) {
+                }
+                public void visitSwitchDefault(ASSwitchDefault lab) {
+                }
+                public void visitSwitchStatement(ASSwitchStatement stmt) {
+                }
+                public void visitThrowStatement(ASThrowStatement stmt) {
+                }
+                public void visitTryStatement(ASTryStatement stmt) {
+                }
+                public void visitUndefinedLiteral(ASUndefinedLiteral lit) {
+                }
+                public void visitVarDeclarationFragment(ASVarDeclarationFragment var) {
+                }
+                public void visitWhileStatement(ASWhileStatement stmt) {
+                }
+                public void visitWithStatement(ASWithStatement stmt) {
+                }
+                public void visitXMLLiteral(ASXMLLiteral lit) {
+                }
+        }
+}
</pre></div>
<hr /><a name="file2" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor</span><br />
<div class="fileheader" id="added"><big><b>ActionScriptWalker.java</b></big> <small id="info">added at 695</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor/ActionScriptWalker.java                                (rev 0)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor/ActionScriptWalker.java        2008-03-25 23:01:22 UTC (rev 695)
@@ -0,0 +1,316 @@
</small></pre><pre class="diff" id="added">+/*
+ * 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) {
<a name="task1" />+                // <span class="task">TODO</span>: stmt.getVar();
+                walk(stmt.getIterated());
+                walkStatementContainer(stmt);
+        }
+
+        public void visitForInStatement(ASForInStatement stmt) {
<a name="task2" />+                // <span class="task">TODO</span>: stmt.getVar();
+                walk(stmt.getIterated());
+                walkStatementContainer(stmt);
+        }
+
+        public void visitForStatement(ASForStatement stmt) {
<a name="task3" />+                // <span class="task">TODO</span>: 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) {
+        }
+}
</pre></div>
<hr /><a name="file3" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor</span><br />
<div class="fileheader" id="added"><big><b>BeforeAfterStrategy.java</b></big> <small id="info">added at 695</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor/BeforeAfterStrategy.java                                (rev 0)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor/BeforeAfterStrategy.java        2008-03-25 23:01:22 UTC (rev 695)
@@ -0,0 +1,72 @@
</small></pre><pre class="diff" id="added">+/*
+ * BeforeAfterStrategy.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 uk.co.badgersinfoil.metaas.dom.ScriptElement;
+
+public class BeforeAfterStrategy extends FilterStrategy {
+
+        private ScriptElementStrategy before;
+        private ScriptElementStrategy after;
+
+        public BeforeAfterStrategy() {
+                this.before = null;
+                this.after = null;
+        }
+
+        public BeforeAfterStrategy(ScriptElementStrategy filtered, ScriptElementStrategy before, ScriptElementStrategy after) {
+                super(filtered);
+                this.before = before;
+                this.after = after;
+        }
+
+        public void handle(ScriptElement element) {
+                before(element);
+                super.handle(element);
+                after(element);
+        }
+
+        protected void after(ScriptElement element) {
+                if (after != null) {
+                        after.handle(element);
+                }
+        }
+
+        protected void before(ScriptElement element) {
+                if (before != null) {
+                        before.handle(element);
+                }
+        }
+
+        public ScriptElementStrategy getBefore() {
+                return before;
+        }
+
+        public void setBefore(ScriptElementStrategy before) {
+                this.before = before;
+        }
+
+        public ScriptElementStrategy getAfter() {
+                return after;
+        }
+
+        public void setAfter(ScriptElementStrategy after) {
+                this.after = after;
+        }
+}
</pre></div>
<hr /><a name="file4" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor</span><br />
<div class="fileheader" id="added"><big><b>FilterStrategy.java</b></big> <small id="info">added at 695</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor/FilterStrategy.java                                (rev 0)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor/FilterStrategy.java        2008-03-25 23:01:22 UTC (rev 695)
@@ -0,0 +1,46 @@
</small></pre><pre class="diff" id="added">+/*
+ * FilterStrategy.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 uk.co.badgersinfoil.metaas.dom.ScriptElement;
+
+public class FilterStrategy implements ScriptElementStrategy {
+
+        private ScriptElementStrategy filtered;
+
+        public FilterStrategy() {
+                this.filtered = null;
+        }
+
+        public FilterStrategy(ScriptElementStrategy filtered) {
+                this.filtered = filtered;
+        }
+
+        public void handle(ScriptElement element) {
+                filtered.handle(element);
+        }
+
+        public ScriptElementStrategy getFiltered() {
+                return filtered;
+        }
+
+        public void setFiltered(ScriptElementStrategy filtered) {
+                this.filtered = filtered;
+        }
+}
</pre></div>
<hr /><a name="file5" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor</span><br />
<div class="fileheader" id="added"><big><b>ScriptElementStrategy.java</b></big> <small id="info">added at 695</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor/ScriptElementStrategy.java                                (rev 0)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor/ScriptElementStrategy.java        2008-03-25 23:01:22 UTC (rev 695)
@@ -0,0 +1,25 @@
</small></pre><pre class="diff" id="added">+/*
+ * ScriptElementStrategy.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 uk.co.badgersinfoil.metaas.dom.ScriptElement;
+
+public interface ScriptElementStrategy {
+        public void handle(ScriptElement element);
+}
</pre></div>
<hr /><a name="file6" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor</span><br />
<div class="fileheader" id="added"><big><b>ScriptElementSwitch.java</b></big> <small id="info">added at 695</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor/ScriptElementSwitch.java                                (rev 0)
+++ trunk/src/main/java/uk/co/badgersinfoil/metaas/visitor/ScriptElementSwitch.java        2008-03-25 23:01:22 UTC (rev 695)
@@ -0,0 +1,149 @@
</small></pre><pre class="diff" id="added">+/*
+ * ScriptElementSwitch.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 uk.co.badgersinfoil.metaas.dom.*;
+
+public class ScriptElementSwitch implements ScriptElementStrategy {
+        private ActionScriptVisitor v;
+
+        public ScriptElementSwitch(ActionScriptVisitor v) {
+                this.v = v;
+        }
+
+        public void handle(ScriptElement e) {
+                if (e instanceof ASArrayAccessExpression) {
+                        v.visitArrayAccessExpression((ASArrayAccessExpression)e);
+                } else if (e instanceof ASArrayLiteral) {
+                        v.visitArrayLiteral((ASArrayLiteral)e);
+                } else if (e instanceof ASArg) {
+                        v.visitArg((ASArg)e);
+                } else if (e instanceof ASAssignmentExpression) {
+                        v.visitAssignmentExpression((ASAssignmentExpression)e);
+                } else if (e instanceof ASBinaryExpression) {
+                        v.visitBinaryExpression((ASBinaryExpression)e);
+                } else if (e instanceof ASBooleanLiteral) {
+                        v.visitBooleanLiteral((ASBooleanLiteral)e);
+                } else if (e instanceof ASBlock) {
+                        v.visitBlockStatement((ASBlock)e);
+                } else if (e instanceof ASBreakStatement) {
+                        v.visitBreakStatement((ASBreakStatement)e);
+                } else if (e instanceof ASCatchClause) {
+                        v.visitCatchClause((ASCatchClause)e);
+                } else if (e instanceof ASConditionalExpression) {
+                        v.visitConditionalExpression((ASConditionalExpression)e);
+                } else if (e instanceof ASContinueStatement) {
+                        v.visitContinueStatement((ASContinueStatement)e);
+                } else if (e instanceof ASCompilationUnit) {
+                        v.visitCompilationUnit((ASCompilationUnit)e);
+                } else if (e instanceof ASClassType) {
+                        v.visitClassType((ASClassType)e);
+                } else if (e instanceof ASDeclarationStatement) {
+                        v.visitDeclarationStatement((ASDeclarationStatement)e);
+                } else if (e instanceof ASDefaultXMLNamespaceStatement) {
+                        v.visitDefaultXMLNamespaceStatement((ASDefaultXMLNamespaceStatement)e);
+                } else if (e instanceof ASDoWhileStatement) {
+                        v.visitDoWhileStatement((ASDoWhileStatement)e);
+                } else if (e instanceof ASDescendantExpression) {
+                        v.visitDescendantExpression((ASDescendantExpression)e);
+                } else if (e instanceof ASExpressionAttribute) {
+                        v.visitExpressionAttribute((ASExpressionAttribute)e);
+                } else if (e instanceof ASExpressionStatement) {
+                        v.visitExpressionStatement((ASExpressionStatement)e);
+                } else if (e instanceof ASFieldAccessExpression) {
+                        v.visitFieldAccessExpression((ASFieldAccessExpression)e);
+                } else if (e instanceof ASFilterExpression) {
+                        v.visitFilterExpression((ASFilterExpression)e);
+                } else if (e instanceof ASFinallyClause) {
+                        v.visitFinallyClause((ASFinallyClause)e);
+                } else if (e instanceof ASForEachInStatement) {
+                        v.visitForEachInStatement((ASForEachInStatement)e);
+                } else if (e instanceof ASForInStatement) {
+                        v.visitForInStatement((ASForInStatement)e);
+                } else if (e instanceof ASForStatement) {
+                        v.visitForStatement((ASForStatement)e);
+                } else if (e instanceof ASField) {
+                        v.visitField((ASField)e);
+                } else if (e instanceof ASFunctionExpression) {
+                        v.visitFunctionExpression((ASFunctionExpression)e);
+                } else if (e instanceof ASInvocationExpression) {
+                        v.visitInvocationExpression((ASInvocationExpression)e);
+                } else if (e instanceof ASIfStatement) {
+                        v.visitIfStatement((ASIfStatement)e);
+                } else if (e instanceof ASIntegerLiteral) {
+                        v.visitIntegerLiteral((ASIntegerLiteral)e);
+                } else if (e instanceof ASInterfaceType) {
+                        v.visitInterfaceType((ASInterfaceType)e);
+                } else if (e instanceof ASMetaTag) {
+                        v.visitMetaTag((ASMetaTag)e);
+                } else if (e instanceof ASMethod) {
+                        v.visitMethod((ASMethod)e);
+                } else if (e instanceof ASNewExpression) {
+                        v.visitNewExpression((ASNewExpression)e);
+                } else if (e instanceof ASNullLiteral) {
+                        v.visitNullLiteral((ASNullLiteral)e);
+                } else if (e instanceof ASObjectLiteral) {
+                        v.visitObjectLiteral((ASObjectLiteral)e);
+                } else if (e instanceof ASObjectLiteral.Field) {
+                        v.visitObjectField((ASObjectLiteral.Field)e);
+                } else if (e instanceof ASPackage) {
+                        v.visitPackage((ASPackage)e);
+                } else if (e instanceof ASPostfixExpression) {
+                        v.visitPostfixExpression((ASPostfixExpression)e);
+                } else if (e instanceof ASPrefixExpression) {
+                        v.visitPrefixExpression((ASPrefixExpression)e);
+                } else if (e instanceof ASPropertyAttribute) {
+                        v.visitPropertyAttribute((ASPropertyAttribute)e);
+                } else if (e instanceof ASRegexpLiteral) {
+                        v.visitRegexpLiteral((ASRegexpLiteral)e);
+                } else if (e instanceof ASReturnStatement) {
+                        v.visitReturnStatement((ASReturnStatement)e);
+                } else if (e instanceof ASSimpleNameExpression) {
+                        v.visitSimpleNameExpression((ASSimpleNameExpression)e);
+                } else if (e instanceof ASStarAttribute) {
+                        v.visitStarAttribute((ASStarAttribute)e);
+                } else if (e instanceof ASStringLiteral) {
+                        v.visitStringLiteral((ASStringLiteral)e);
+                } else if (e instanceof ASSwitchCase) {
+                        v.visitSwitchCase((ASSwitchCase)e);
+                } else if (e instanceof ASSwitchDefault) {
+                        v.visitSwitchDefault((ASSwitchDefault)e);
+                } else if (e instanceof ASSwitchStatement) {
+                        v.visitSwitchStatement((ASSwitchStatement)e);
+                } else if (e instanceof ASSuperStatement) {
+                        v.visitSuperStatement((ASSuperStatement)e);
+                } else if (e instanceof ASThrowStatement) {
+                        v.visitThrowStatement((ASThrowStatement)e);
+                } else if (e instanceof ASTryStatement) {
+                        v.visitTryStatement((ASTryStatement)e);
+                } else if (e instanceof ASUndefinedLiteral) {
+                        v.visitUndefinedLiteral((ASUndefinedLiteral)e);
+                } else if (e instanceof ASVarDeclarationFragment) {
+                        v.visitVarDeclarationFragment((ASVarDeclarationFragment)e);
+                } else if (e instanceof ASWhileStatement) {
+                        v.visitWhileStatement((ASWhileStatement)e);
+                } else if (e instanceof ASWithStatement) {
+                        v.visitWithStatement((ASWithStatement)e);
+                } else if (e instanceof ASXMLLiteral) {
+                        v.visitXMLLiteral((ASXMLLiteral)e);
+                } else {
+                        throw new IllegalArgumentException("unhandled ScriptElement "+e.getClass().getName());
+                }
+        }
+}
</pre></div>
<hr /><a name="file7" /><div class="file">
<span class="pathname" id="added">metaas/trunk/src/test/java/uk/co/badgersinfoil/metaas/visitor</span><br />
<div class="fileheader" id="added"><big><b>ActionScriptWalkerTest.java</b></big> <small id="info">added at 695</small></div>
<pre class="diff"><small id="info">--- trunk/src/test/java/uk/co/badgersinfoil/metaas/visitor/ActionScriptWalkerTest.java                                (rev 0)
+++ trunk/src/test/java/uk/co/badgersinfoil/metaas/visitor/ActionScriptWalkerTest.java        2008-03-25 23:01:22 UTC (rev 695)
@@ -0,0 +1,32 @@
</small></pre><pre class="diff" id="added">+package uk.co.badgersinfoil.metaas.visitor;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import uk.co.badgersinfoil.metaas.ActionScriptFactory;
+import uk.co.badgersinfoil.metaas.ActionScriptParser;
+import uk.co.badgersinfoil.metaas.dom.ASCompilationUnit;
+import uk.co.badgersinfoil.metaas.dom.ScriptElement;
+import junit.framework.TestCase;
+
+public class ActionScriptWalkerTest extends TestCase {
+        public void testIt() {
+                ActionScriptFactory fact = new ActionScriptFactory();
+                ASCompilationUnit unit = loadSyntaxExample(fact);
+
+                // walk the whole model,
+                FilterStrategy noNulls = new FilterStrategy(new ScriptElementStrategy() {
+                        public void handle(ScriptElement element) {
+                                assertNotNull(element);
+                        }
+                });
+                ActionScriptWalker walker = new ActionScriptWalker(noNulls);
+                walker.walk(unit);
+        }
+
+        private ASCompilationUnit loadSyntaxExample(ActionScriptFactory fact) {
+                InputStream in = getClass().getClassLoader().getResourceAsStream("AllSyntax.as");
+                ActionScriptParser parser = fact.newParser();
+                ASCompilationUnit unit = parser.parse(new InputStreamReader(in));
+                return unit;
+        }
+}
</pre></div>
<center><small><a href="http://www.badgers-in-foil.co.uk/projects/cvsspam/" title="commit -&gt; email">CVSspam</a> 0.2.12</small></center>
</body></html>