Almost ready to signoff, remaining concern about performance hit in CFA (see comment there).
http://gwt-code-reviews.appspot.com/1447821/diff/9006/dev/core/src/com/google/gwt/dev/jjs/impl/ControlFlowAnalyzer.java File dev/core/src/com/google/gwt/dev/jjs/impl/ControlFlowAnalyzer.java (right): http://gwt-code-reviews.appspot.com/1447821/diff/9006/dev/core/src/com/google/gwt/dev/jjs/impl/ControlFlowAnalyzer.java#newcode996 dev/core/src/com/google/gwt/dev/jjs/impl/ControlFlowAnalyzer.java:996: (Just copied over the same comments I had earlier from patch set 2) This seems a bit expensive (iterating through all instantiated types). It looks like it could be called many times per optimization pass? For instance, traverseFrom() is called multiple times in a loop, in traverseEntryMethods(). Is there any impact on execution time, for large projects? It seems like it should only be called once per CFA pass, no? Also, traverseFrom is called in many places external to this class, in tight loops iterating over multiple methods, etc. http://gwt-code-reviews.appspot.com/1447821/diff/9006/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java File dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java (right): http://gwt-code-reviews.appspot.com/1447821/diff/9006/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java#newcode1817 dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java:1817: for (JMethod method : x.getMethods()) { Can you add a comment of explanation here, as discussed in patch set 2? http://gwt-code-reviews.appspot.com/1447821/diff/9006/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java#newcode1822 dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java:1822: if (JProgram.isClinit(method)) { Add an assert (as discussed in comment in patch set 2)? http://gwt-code-reviews.appspot.com/1447821/ -- http://groups.google.com/group/Google-Web-Toolkit-Contributors