diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JVisitor.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JVisitor.java
index cf8dc20..fba2c7f 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JVisitor.java
@@ -124,443 +124,619 @@
   }
 
   public void endVisit(JAbsentArrayDimension x, Context ctx) {
+    endVisit((JLiteral) x, ctx);
+  }
+
+  public void endVisit(JAbstractMethodBody x, Context ctx) {
+    endVisit((JNode) x, ctx);
   }
 
   public void endVisit(JArrayRef x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JArrayType x, Context ctx) {
+    endVisit((JReferenceType) x, ctx);
   }
 
   public void endVisit(JAssertStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public void endVisit(JBinaryOperation x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JBlock x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public void endVisit(JBooleanLiteral x, Context ctx) {
+    endVisit((JValueLiteral) x, ctx);
   }
 
   public void endVisit(JBreakStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public void endVisit(JCaseStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public void endVisit(JCastOperation x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JCharLiteral x, Context ctx) {
+    endVisit((JValueLiteral) x, ctx);
   }
 
   public void endVisit(JClassLiteral x, Context ctx) {
+    endVisit((JLiteral) x, ctx);
   }
 
   public void endVisit(JClassSeed x, Context ctx) {
+    endVisit((JLiteral) x, ctx);
   }
 
   public void endVisit(JClassType x, Context ctx) {
+    endVisit((JDeclaredType) x, ctx);
   }
 
   public void endVisit(JConditional x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JContinueStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public void endVisit(JDeclarationStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
+  }
+
+  public void endVisit(JDeclaredType x, Context ctx) {
+    endVisit((JReferenceType) x, ctx);
   }
 
   public void endVisit(JDoStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public void endVisit(JDoubleLiteral x, Context ctx) {
+    endVisit((JValueLiteral) x, ctx);
+  }
+
+  public void endVisit(JExpression x, Context ctx) {
+    endVisit((JNode) x, ctx);
   }
 
   public void endVisit(JExpressionStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public void endVisit(JField x, Context ctx) {
+    endVisit((JVariable) x, ctx);
   }
 
+  /**
+   * NOTE: not called from JsniFieldRef
+   */
   public void endVisit(JFieldRef x, Context ctx) {
+    endVisit((JVariableRef) x, ctx);
   }
 
   public void endVisit(JFloatLiteral x, Context ctx) {
+    endVisit((JValueLiteral) x, ctx);
   }
 
   public void endVisit(JForStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public void endVisit(JGwtCreate x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JIfStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public void endVisit(JInstanceOf x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JInterfaceType x, Context ctx) {
+    endVisit((JDeclaredType) x, ctx);
   }
 
   public void endVisit(JIntLiteral x, Context ctx) {
+    endVisit((JValueLiteral) x, ctx);
   }
 
   public void endVisit(JLabel x, Context ctx) {
+    endVisit((JNode) x, ctx);
   }
 
   public void endVisit(JLabeledStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
+  }
+
+  public void endVisit(JLiteral x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JLocal x, Context ctx) {
+    endVisit((JVariable) x, ctx);
   }
 
   public void endVisit(JLocalRef x, Context ctx) {
+    endVisit((JVariableRef) x, ctx);
   }
 
   public void endVisit(JLongLiteral x, Context ctx) {
+    endVisit((JValueLiteral) x, ctx);
   }
 
   public void endVisit(JMethod x, Context ctx) {
+    endVisit((JNode) x, ctx);
   }
 
   public void endVisit(JMethodBody x, Context ctx) {
+    endVisit((JAbstractMethodBody) x, ctx);
   }
 
+  /**
+   * NOTE: not called from JsniMethodRef
+   */
   public void endVisit(JMethodCall x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JMultiExpression x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JNameOf x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JNewArray x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JNewInstance x, Context ctx) {
+    endVisit((JExpression) x, ctx);
+  }
+
+  public void endVisit(JNode x, Context ctx) {
+    // empty block
   }
 
   public void endVisit(JNullLiteral x, Context ctx) {
+    endVisit((JValueLiteral) x, ctx);
   }
 
   public void endVisit(JNullType x, Context ctx) {
+    endVisit((JReferenceType) x, ctx);
   }
 
   public void endVisit(JParameter x, Context ctx) {
+    endVisit((JVariable) x, ctx);
   }
 
   public void endVisit(JParameterRef x, Context ctx) {
+    endVisit((JVariableRef) x, ctx);
   }
 
   public void endVisit(JPostfixOperation x, Context ctx) {
+    endVisit((JUnaryOperation) x, ctx);
   }
 
   public void endVisit(JPrefixOperation x, Context ctx) {
+    endVisit((JUnaryOperation) x, ctx);
   }
 
   public void endVisit(JPrimitiveType x, Context ctx) {
+    endVisit((JType) x, ctx);
   }
 
   public void endVisit(JProgram x, Context ctx) {
+    endVisit((JNode) x, ctx);
   }
 
   public void endVisit(JReboundEntryPoint x, Context ctx) {
+    endVisit((JStatement) x, ctx);
+  }
+
+  public void endVisit(JReferenceType x, Context ctx) {
+    endVisit((JType) x, ctx);
   }
 
   public void endVisit(JReturnStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public void endVisit(JsniFieldRef x, Context ctx) {
+    /* NOTE: Skip JFieldRef */
+    endVisit((JVariableRef) x, ctx);
   }
 
   public void endVisit(JsniMethodBody x, Context ctx) {
+    endVisit((JAbstractMethodBody) x, ctx);
   }
 
   public void endVisit(JsniMethodRef x, Context ctx) {
+    /* NOTE: Skip JMethodCall */
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JsonArray x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JsonObject x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JsonPropInit x, Context ctx) {
+    endVisit((JNode) x, ctx);
+  }
+
+  public void endVisit(JStatement x, Context ctx) {
+    endVisit((JNode) x, ctx);
   }
 
   public void endVisit(JStringLiteral x, Context ctx) {
+    endVisit((JValueLiteral) x, ctx);
   }
 
   public void endVisit(JSwitchStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public void endVisit(JThisRef x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JThrowStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public void endVisit(JTryStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
+  }
+
+  public void endVisit(JType x, Context ctx) {
+    endVisit((JNode) x, ctx);
+  }
+
+  public void endVisit(JUnaryOperation x, Context ctx) {
+    endVisit((JExpression) x, ctx);
+  }
+
+  public void endVisit(JValueLiteral x, Context ctx) {
+    endVisit((JLiteral) x, ctx);
+  }
+
+  public void endVisit(JVariable x, Context ctx) {
+    endVisit((JNode) x, ctx);
+  }
+
+  public void endVisit(JVariableRef x, Context ctx) {
+    endVisit((JExpression) x, ctx);
   }
 
   public void endVisit(JWhileStatement x, Context ctx) {
+    endVisit((JStatement) x, ctx);
   }
 
   public boolean visit(JAbsentArrayDimension x, Context ctx) {
-    return true;
+    return visit((JLiteral) x, ctx);
+  }
+
+  public boolean visit(JAbstractMethodBody x, Context ctx) {
+    return visit((JNode) x, ctx);
   }
 
   public boolean visit(JArrayRef x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JArrayType x, Context ctx) {
-    return true;
+    return visit((JReferenceType) x, ctx);
   }
 
   public boolean visit(JAssertStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
   }
 
   public boolean visit(JBinaryOperation x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JBlock x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
   }
 
   public boolean visit(JBooleanLiteral x, Context ctx) {
-    return true;
+    return visit((JValueLiteral) x, ctx);
   }
 
   public boolean visit(JBreakStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
   }
 
   public boolean visit(JCaseStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
   }
 
   public boolean visit(JCastOperation x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JCharLiteral x, Context ctx) {
-    return true;
+    return visit((JValueLiteral) x, ctx);
   }
 
   public boolean visit(JClassLiteral x, Context ctx) {
-    return true;
+    return visit((JLiteral) x, ctx);
   }
 
   public boolean visit(JClassSeed x, Context ctx) {
-    return true;
+    return visit((JLiteral) x, ctx);
   }
 
   public boolean visit(JClassType x, Context ctx) {
-    return true;
+    return visit((JDeclaredType) x, ctx);
   }
 
   public boolean visit(JConditional x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JContinueStatement x, Context ctx) {
-    return true;
+    return visit((JNode) x, ctx);
   }
 
   public boolean visit(JDeclarationStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
+  }
+
+  public boolean visit(JDeclaredType x, Context ctx) {
+    return visit((JReferenceType) x, ctx);
   }
 
   public boolean visit(JDoStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
   }
 
   public boolean visit(JDoubleLiteral x, Context ctx) {
-    return true;
+    return visit((JValueLiteral) x, ctx);
+  }
+
+  public boolean visit(JExpression x, Context ctx) {
+    return visit((JNode) x, ctx);
   }
 
   public boolean visit(JExpressionStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
   }
 
   public boolean visit(JField x, Context ctx) {
-    return true;
+    return visit((JVariable) x, ctx);
   }
 
+  /**
+   * NOTE: not called from JsniFieldRef
+   */
   public boolean visit(JFieldRef x, Context ctx) {
-    return true;
+    return visit((JVariableRef) x, ctx);
   }
 
   public boolean visit(JFloatLiteral x, Context ctx) {
-    return true;
+    return visit((JValueLiteral) x, ctx);
   }
 
   public boolean visit(JForStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
   }
 
   public boolean visit(JGwtCreate x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JIfStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
   }
 
   public boolean visit(JInstanceOf x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JInterfaceType x, Context ctx) {
-    return true;
+    return visit((JDeclaredType) x, ctx);
   }
 
   public boolean visit(JIntLiteral x, Context ctx) {
-    return true;
+    return visit((JValueLiteral) x, ctx);
   }
 
   public boolean visit(JLabel x, Context ctx) {
-    return true;
+    return visit((JNode) x, ctx);
   }
 
   public boolean visit(JLabeledStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
+  }
+
+  public boolean visit(JLiteral x, Context ctx) {
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JLocal x, Context ctx) {
-    return true;
+    return visit((JVariable) x, ctx);
   }
 
   public boolean visit(JLocalRef x, Context ctx) {
-    return true;
+    return visit((JVariableRef) x, ctx);
   }
 
   public boolean visit(JLongLiteral x, Context ctx) {
-    return true;
+    return visit((JValueLiteral) x, ctx);
   }
 
   public boolean visit(JMethod x, Context ctx) {
-    return true;
+    return visit((JNode) x, ctx);
   }
 
   public boolean visit(JMethodBody x, Context ctx) {
-    return true;
+    return visit((JAbstractMethodBody) x, ctx);
   }
 
+  /**
+   * NOTE: not called from JsniMethodRef
+   */
   public boolean visit(JMethodCall x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JMultiExpression x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JNameOf x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JNewArray x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JNewInstance x, Context ctx) {
+    return visit((JExpression) x, ctx);
+  }
+
+  public boolean visit(JNode x, Context ctx) {
     return true;
   }
 
   public boolean visit(JNullLiteral x, Context ctx) {
-    return true;
+    return visit((JValueLiteral) x, ctx);
   }
 
   public boolean visit(JNullType x, Context ctx) {
-    return true;
+    return visit((JReferenceType) x, ctx);
   }
 
   public boolean visit(JParameter x, Context ctx) {
-    return true;
+    return visit((JVariable) x, ctx);
   }
 
   public boolean visit(JParameterRef x, Context ctx) {
-    return true;
+    return visit((JVariableRef) x, ctx);
   }
 
   public boolean visit(JPostfixOperation x, Context ctx) {
-    return true;
+    return visit((JUnaryOperation) x, ctx);
   }
 
   public boolean visit(JPrefixOperation x, Context ctx) {
-    return true;
+    return visit((JUnaryOperation) x, ctx);
   }
 
   public boolean visit(JPrimitiveType x, Context ctx) {
-    return true;
+    return visit((JType) x, ctx);
   }
 
   public boolean visit(JProgram x, Context ctx) {
-    return true;
+    return visit((JNode) x, ctx);
   }
 
   public boolean visit(JReboundEntryPoint x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
+  }
+
+  public boolean visit(JReferenceType x, Context ctx) {
+    return visit((JType) x, ctx);
   }
 
   public boolean visit(JReturnStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
   }
 
   public boolean visit(JsniFieldRef x, Context ctx) {
-    return true;
+    /* NOTE: Skip JFieldRef */
+    return visit((JVariableRef) x, ctx);
   }
-
+  
   public boolean visit(JsniMethodBody x, Context ctx) {
-    return true;
+    return visit((JAbstractMethodBody) x, ctx);
   }
-
+  
   public boolean visit(JsniMethodRef x, Context ctx) {
-    return true;
+    /* NOTE: Skip JMethodRef */
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JsonArray x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JsonObject x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JsonPropInit x, Context ctx) {
-    return true;
+    return visit((JNode) x, ctx);
+  }
+  
+  public boolean visit(JStatement x, Context ctx) {
+    return visit((JNode) x, ctx);
   }
 
   public boolean visit(JStringLiteral x, Context ctx) {
-    return true;
+    return visit((JValueLiteral) x, ctx);
   }
 
   public boolean visit(JSwitchStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
   }
 
   public boolean visit(JThisRef x, Context ctx) {
-    return true;
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JThrowStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
   }
 
   public boolean visit(JTryStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
+  }
+
+  public boolean visit(JType x, Context ctx) {
+    return visit((JNode) x, ctx);
+  }
+
+  public boolean visit(JUnaryOperation x, Context ctx) {
+    return visit((JExpression) x, ctx);
+  }
+
+  public boolean visit(JValueLiteral x, Context ctx) {
+    return visit((JLiteral) x, ctx);
+  }
+
+  public boolean visit(JVariable x, Context ctx) {
+    return visit((JNode) x, ctx);
+  }
+
+  public boolean visit(JVariableRef x, Context ctx) {
+    return visit((JExpression) x, ctx);
   }
 
   public boolean visit(JWhileStatement x, Context ctx) {
-    return true;
+    return visit((JStatement) x, ctx);
   }
+
 }
