checkstyle passed


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@48 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/util/Messages.java b/dev/core/src/com/google/gwt/dev/util/Messages.java
index 0d63f0f..9827a6a 100644
--- a/dev/core/src/com/google/gwt/dev/util/Messages.java
+++ b/dev/core/src/com/google/gwt/dev/util/Messages.java
@@ -19,31 +19,33 @@
 import com.google.gwt.dev.util.msg.Message0;
 import com.google.gwt.dev.util.msg.Message1String;
 
-// Shared by anyone
+/**
+ * Static messages.
+ */
 public class Messages {
 
   public static final Message0 HINT_CHECK_CLASSPATH_SOURCE_ENTRIES = new Message0(
-    TreeLogger.ERROR,
-    "Hint: Check that your classpath includes all required source roots");
+      TreeLogger.ERROR,
+      "Hint: Check that your classpath includes all required source roots");
 
   public static final Message0 HINT_CHECK_INHERIT_CORE = new Message0(
-    TreeLogger.ERROR,
-    "Hint: Check that your module inherits 'com.google.gwt.core.Core' either directly or indirectly (most often by inheriting module 'com.google.gwt.user.User')");
+      TreeLogger.ERROR,
+      "Hint: Check that your module inherits 'com.google.gwt.core.Core' either directly or indirectly (most often by inheriting module 'com.google.gwt.user.User')");
   public static final Message0 HINT_CHECK_INHERIT_USER = new Message0(
-    TreeLogger.ERROR,
-    "Hint: Check that your module inherits 'com.google.gwt.user.User' either directly or indirectly");
+      TreeLogger.ERROR,
+      "Hint: Check that your module inherits 'com.google.gwt.user.User' either directly or indirectly");
   public static final Message0 HINT_CHECK_MODULE_INHERITANCE = new Message0(
-    TreeLogger.ERROR,
-    "Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly");
+      TreeLogger.ERROR,
+      "Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly");
   public static final Message0 HINT_CHECK_MODULE_NONCLIENT_SOURCE_DECL = new Message0(
-    TreeLogger.ERROR,
-    "Hint: Your source appears not to live underneath a subpackage called 'client'; no problem, but you'll need to use the <source> directive in your module to make it accessible");
+      TreeLogger.ERROR,
+      "Hint: Your source appears not to live underneath a subpackage called 'client'; no problem, but you'll need to use the <source> directive in your module to make it accessible");
   public static final Message1String HINT_CHECK_TYPENAME = new Message1String(
-    TreeLogger.ERROR,
-    "Hint: Check that the type name '$0' is really what you meant");
+      TreeLogger.ERROR,
+      "Hint: Check that the type name '$0' is really what you meant");
   public static final Message0 HINT_PRIOR_COMPILER_ERRORS = new Message0(
-    TreeLogger.ERROR,
-    "Hint: Previous compiler errors may have made this type unavailable");
+      TreeLogger.ERROR,
+      "Hint: Previous compiler errors may have made this type unavailable");
 
   private Messages() {
   }
diff --git a/dev/core/src/com/google/gwt/dev/util/NetProxy.java b/dev/core/src/com/google/gwt/dev/util/NetProxy.java
index 1d3332f..b332750 100644
--- a/dev/core/src/com/google/gwt/dev/util/NetProxy.java
+++ b/dev/core/src/com/google/gwt/dev/util/NetProxy.java
@@ -21,28 +21,85 @@
 import java.net.ServerSocket;
 import java.net.Socket;
 
+/**
+ * Protocol-blind byte-level proxy.
+ */
 public class NetProxy {
 
+<<<<<<< .mine
+  private class ClientToServerProxyConnection extends ProxyConnection {
+    public ClientToServerProxyConnection(Socket clientSideSocket,
+        Socket serverSideSocket) {
+      super(clientSideSocket, serverSideSocket);
+      setName(fFromPort + " => " + fToPort + " #" + fConnections);
+    }
+=======
   private class ClientToServerProxyConnection extends ProxyConnection {
     public ClientToServerProxyConnection(Socket clientSideSocket,
         Socket serverSideSocket) {
       super(clientSideSocket, serverSideSocket);
       setName(fromPort + " => " + toPort + " #" + connections);
     }
+>>>>>>> .r47
 
     protected void recordBytesTransferred(byte[] bytes, int avail) {
       addBytesSent(avail, bytes);
     }
   }
 
+<<<<<<< .mine
+  private abstract class ProxyConnection extends Thread {
+    private Socket fFromSocket;
+    private Socket fToSocket;
+=======
   private abstract class ProxyConnection extends Thread {
     private Socket fromSocket;
     private Socket toSocket;
+>>>>>>> .r47
 
+<<<<<<< .mine
+    public ProxyConnection(Socket fromSocket, Socket toSocket) {
+      fFromSocket = fromSocket;
+      fToSocket = toSocket;
+=======
     public ProxyConnection(Socket fromSocket, Socket toSocket) {
       this.fromSocket = fromSocket;
       this.toSocket = toSocket;
+>>>>>>> .r47
     }
+<<<<<<< .mine
+
+    public void run() {
+      try {
+        InputStream fromSideInput = fFromSocket.getInputStream();
+        OutputStream toSideOutput = fToSocket.getOutputStream();
+
+        /*
+         * Spin and pass data in one direction.
+         */
+        int avail;
+        byte[] bytes = new byte[32768];
+        while (true) {
+          // Read 'from' side
+          avail = fromSideInput.read(bytes);
+          if (avail > 0) {
+            // Forward to 'to' side
+            toSideOutput.write(bytes, 0, avail);
+            // Accumulate bytes received
+            recordBytesTransferred(bytes, avail);
+          } else if (avail == -1) {
+            break;
+          }
+        }
+      } catch (Throwable e) {
+      } finally {
+        try {
+          fFromSocket.close();
+          fToSocket.close();
+        } catch (Throwable e) {
+        }
+      }
+=======
 
     public void run() {
       try {
@@ -74,8 +131,18 @@
         } catch (Throwable e) {
         }
       }
+>>>>>>> .r47
     }
 
+<<<<<<< .mine
+    protected abstract void recordBytesTransferred(byte[] bytes, int avail);
+  }
+  private class ServerToClientProxyConnection extends ProxyConnection {
+    public ServerToClientProxyConnection(Socket clientSideSocket,
+        Socket serverSideSocket) {
+      super(serverSideSocket, clientSideSocket);
+      setName(fFromPort + " <= " + fToPort + " #" + fConnections);
+=======
     protected abstract void recordBytesTransferred(byte[] bytes, int avail);
   }
   private class ServerToClientProxyConnection extends ProxyConnection {
@@ -83,6 +150,7 @@
         Socket serverSideSocket) {
       super(serverSideSocket, clientSideSocket);
       setName(fromPort + " <= " + toPort + " #" + connections);
+>>>>>>> .r47
     }
 
     protected void recordBytesTransferred(byte[] bytes, int avail) {
@@ -96,6 +164,44 @@
       return;
     }
 
+<<<<<<< .mine
+    int localPort = Integer.parseInt(args[0]);
+    int remotePort = Integer.parseInt(args[1]);
+    String remoteHost = args.length < 3 ? "localhost" : args[2];
+    NetProxy netProxy = new NetProxy(localPort, remoteHost, remotePort, true);
+    netProxy.run();
+  }
+
+  private boolean fDumpChars;
+  private int fFromPort;
+  private String fToName;
+  private int fToPort;
+  private int fBytesSent;
+  private int fBytesReceived;
+
+  private int fConnections;
+
+  private boolean fEnd;
+
+  private long fStartTime = System.currentTimeMillis();
+
+  public NetProxy(int fromPort, String toName, int toPort, boolean dumpChars) {
+    fFromPort = fromPort;
+    fToName = toName;
+    fToPort = toPort;
+    fDumpChars = dumpChars;
+  }
+
+  public void end() {
+    fEnd = true;
+  }
+
+  public void run() {
+    try {
+      System.out.println("Time\tBytes Sent\tBytes Received\tTotal Bytes\tHTTP Data");
+      ServerSocket serverSocket = new ServerSocket(fFromPort);
+      while (!fEnd) {
+=======
     int localPort = Integer.parseInt(args[0]);
     int remotePort = Integer.parseInt(args[1]);
     String remoteHost = args.length < 3 ? "localhost" : args[2];
@@ -132,8 +238,13 @@
       System.out.println("Time\tBytes Sent\tBytes Received\tTotal Bytes\tHTTP Data");
       ServerSocket serverSocket = new ServerSocket(fromPort);
       while (!end) {
+>>>>>>> .r47
         try {
+<<<<<<< .mine
+          ++fConnections;
+=======
           ++connections;
+>>>>>>> .r47
 
           /*
            * Listen for and accept the client-initiated connection. Connect to
@@ -143,8 +254,13 @@
           Socket clientSideSocket = serverSocket.accept();
           clientSideSocket.setTcpNoDelay(true);
 
+<<<<<<< .mine
+          Socket serverSideSocket = new Socket(fToName, fToPort);
+          serverSideSocket.setTcpNoDelay(true);
+=======
           Socket serverSideSocket = new Socket(toName, toPort);
           serverSideSocket.setTcpNoDelay(true);
+>>>>>>> .r47
 
           new ClientToServerProxyConnection(clientSideSocket, serverSideSocket).start();
           new ServerToClientProxyConnection(clientSideSocket, serverSideSocket).start();
@@ -158,14 +274,62 @@
     }
   }
 
+<<<<<<< .mine
+  protected int getBytesReceived() {
+    return fBytesReceived;
+  }
+=======
   protected int getBytesReceived() {
     return bytesReceived;
   }
+>>>>>>> .r47
 
+<<<<<<< .mine
+  protected int getBytesSent() {
+    return fBytesSent;
+  }
+=======
   protected int getBytesSent() {
     return bytesSent;
   }
+>>>>>>> .r47
 
+<<<<<<< .mine
+  private synchronized void addBytesReceived(int byteCount, byte[] bytes) {
+    fBytesReceived += byteCount;
+    log(0, byteCount, bytes);
+  }
+
+  private synchronized void addBytesSent(int byteCount, byte[] bytes) {
+    fBytesSent += byteCount;
+    log(byteCount, 0, bytes);
+  }
+
+  private synchronized void log(int bytesSent, int bytesReceived,
+      byte[] dataBuffer) {
+    System.out.print(System.currentTimeMillis() - fStartTime);
+    System.out.print("\t");
+    System.out.print(bytesSent);
+    System.out.print("\t");
+    System.out.print(bytesReceived);
+    System.out.print("\t");
+    System.out.print(fBytesSent + fBytesReceived);
+    System.out.print("\t");
+    char ch;
+    int avail = (bytesSent != 0 ? bytesSent : bytesReceived);
+    if (fDumpChars) {
+      int limit = (avail < 1024 ? avail : 1024);
+      for (int i = 0; i < limit; ++i) {
+        ch = (char) dataBuffer[i];
+        if (ch >= 32 && ch < 128) {
+          System.out.print(ch);
+        } else if (ch == '\n') {
+          System.out.print("\\n");
+        } else if (ch == '\r') {
+          System.out.print("\\r");
+        } else {
+          System.out.print('.');
+=======
   private synchronized void addBytesReceived(int byteCount, byte[] bytes) {
     bytesReceived += byteCount;
     log(0, byteCount, bytes);
@@ -200,6 +364,7 @@
           System.out.print("\\r");
         } else {
           System.out.print('.');
+>>>>>>> .r47
         }
       }
     } else {
diff --git a/dev/core/src/com/google/gwt/dev/util/StringCopier.java b/dev/core/src/com/google/gwt/dev/util/StringCopier.java
index a73b8f0..2b3963c 100644
--- a/dev/core/src/com/google/gwt/dev/util/StringCopier.java
+++ b/dev/core/src/com/google/gwt/dev/util/StringCopier.java
@@ -19,6 +19,9 @@
 import java.nio.BufferOverflowException;
 import java.nio.BufferUnderflowException;
 
+/**
+ * Utility class for directly modifying a character array.
+ */
 public class StringCopier {
   private final CharArrayWriter out = new CharArrayWriter();
   private final char[] in;
diff --git a/dev/core/src/com/google/gwt/dev/util/TextOutput.java b/dev/core/src/com/google/gwt/dev/util/TextOutput.java
index fc7dd8e..c298c15 100644
--- a/dev/core/src/com/google/gwt/dev/util/TextOutput.java
+++ b/dev/core/src/com/google/gwt/dev/util/TextOutput.java
@@ -15,6 +15,9 @@
  */
 package com.google.gwt.dev.util;
 
+/**
+ * Interface used for printing text output.
+ */
 public interface TextOutput {
   void indentIn();
 
diff --git a/dev/core/src/com/google/gwt/dev/util/TextOutputOnCharArray.java b/dev/core/src/com/google/gwt/dev/util/TextOutputOnCharArray.java
index 3bc0317..d9fe856 100644
--- a/dev/core/src/com/google/gwt/dev/util/TextOutputOnCharArray.java
+++ b/dev/core/src/com/google/gwt/dev/util/TextOutputOnCharArray.java
@@ -19,8 +19,20 @@
 import java.io.PrintWriter;
 import java.util.Arrays;
 
+/**
+ * Adapts {@link TextOutput} to a character array.
+ */
 public class TextOutputOnCharArray implements TextOutput {
 
+<<<<<<< .mine
+  private final CharArrayWriter fCharArrayWriter;
+  private final boolean fCompact;
+  private int fIndent = 0;
+  private int fIndentGranularity;
+  private char[][] fIndents = new char[][] {new char[0]};
+  private boolean fJustNewlined;
+  private final PrintWriter p;
+=======
   private final CharArrayWriter charArrayWriter;
   private final boolean compact;
   private int indent = 0;
@@ -28,22 +40,57 @@
   private char[][] indents = new char[][] {new char[0]};
   private boolean justNewlined;
   private final PrintWriter p;
+>>>>>>> .r47
 
+<<<<<<< .mine
+  public TextOutputOnCharArray(boolean compact) {
+    fIndentGranularity = 2;
+    fCharArrayWriter = new CharArrayWriter(50 * 1024);
+    p = new PrintWriter(fCharArrayWriter);
+    fCompact = compact;
+  }
+=======
   public TextOutputOnCharArray(boolean compact) {
     indentGranularity = 2;
     charArrayWriter = new CharArrayWriter(50 * 1024);
     p = new PrintWriter(charArrayWriter);
     this.compact = compact;
   }
+>>>>>>> .r47
 
+<<<<<<< .mine
+  public int getIndent() {
+    return fIndent;
+  }
+=======
   public int getIndent() {
     return indent;
   }
+>>>>>>> .r47
 
+<<<<<<< .mine
+  public char[] getText() {
+    return fCharArrayWriter.toCharArray();
+  }
+=======
   public char[] getText() {
     return charArrayWriter.toCharArray();
   }
+>>>>>>> .r47
 
+<<<<<<< .mine
+  public void indentIn() {
+    ++fIndent;
+    if (fIndent >= fIndents.length) {
+      // Cache a new level of indentation string.
+      //
+      char[] newIndentLevel = new char[fIndent * fIndentGranularity];
+      Arrays.fill(newIndentLevel, ' ');
+      char[][] newIndents = new char[fIndents.length + 1][];
+      System.arraycopy(fIndents, 0, newIndents, 0, fIndents.length);
+      newIndents[fIndent] = newIndentLevel;
+      fIndents = newIndents;
+=======
   public void indentIn() {
     ++indent;
     if (indent >= indents.length) {
@@ -55,29 +102,67 @@
       System.arraycopy(indents, 0, newIndents, 0, indents.length);
       newIndents[indent] = newIndentLevel;
       indents = newIndents;
+>>>>>>> .r47
     }
   }
 
+<<<<<<< .mine
+  public void indentOut() {
+    --fIndent;
+  }
+=======
   public void indentOut() {
     --indent;
   }
+>>>>>>> .r47
 
+<<<<<<< .mine
+  public void newline() {
+    p.print('\n');
+    // TODO: remove flush calls
+    p.flush();
+    fJustNewlined = true;
+  }
+=======
   public void newline() {
     p.print('\n');
     // TODO: remove flush calls
     p.flush();
     justNewlined = true;
   }
+>>>>>>> .r47
 
+<<<<<<< .mine
+  public void newlineOpt() {
+    if (!fCompact) {
+      p.print('\n');
+      // TODO: remove flush calls
+      p.flush();
+=======
   public void newlineOpt() {
     if (!compact) {
       p.print('\n');
       // TODO: remove flush calls
       p.flush();
+>>>>>>> .r47
     }
+<<<<<<< .mine
+    fJustNewlined = true;
+  }
+=======
     justNewlined = true;
   }
+>>>>>>> .r47
 
+<<<<<<< .mine
+  public void print(char c) {
+    maybeIndent();
+    p.print(c);
+    // TODO: remove flush calls
+    p.flush();
+    fJustNewlined = false;
+  }
+=======
   public void print(char c) {
     maybeIndent();
     p.print(c);
@@ -85,7 +170,17 @@
     p.flush();
     justNewlined = false;
   }
+>>>>>>> .r47
 
+<<<<<<< .mine
+  public void print(char[] s) {
+    maybeIndent();
+    p.print(s);
+    // TODO: remove flush calls
+    p.flush();
+    fJustNewlined = false;
+  }
+=======
   public void print(char[] s) {
     maybeIndent();
     p.print(s);
@@ -93,7 +188,17 @@
     p.flush();
     justNewlined = false;
   }
+>>>>>>> .r47
 
+<<<<<<< .mine
+  public void print(String s) {
+    maybeIndent();
+    p.print(s);
+    // TODO: remove flush calls
+    p.flush();
+    fJustNewlined = false;
+  }
+=======
   public void print(String s) {
     maybeIndent();
     p.print(s);
@@ -101,44 +206,87 @@
     p.flush();
     justNewlined = false;
   }
+>>>>>>> .r47
 
+<<<<<<< .mine
+  public void printOpt(char c) {
+    if (!fCompact) {
+      maybeIndent();
+      p.print(c);
+      // TODO: remove flush calls
+      p.flush();
+=======
   public void printOpt(char c) {
     if (!compact) {
       maybeIndent();
       p.print(c);
       // TODO: remove flush calls
       p.flush();
+>>>>>>> .r47
     }
   }
 
+<<<<<<< .mine
+  public void printOpt(char[] s) {
+    if (!fCompact) {
+      maybeIndent();
+      p.print(s);
+      // TODO: remove flush calls
+      p.flush();
+=======
   public void printOpt(char[] s) {
     if (!compact) {
       maybeIndent();
       p.print(s);
       // TODO: remove flush calls
       p.flush();
+>>>>>>> .r47
     }
   }
 
+<<<<<<< .mine
+  public void printOpt(String s) {
+    if (!fCompact) {
+      maybeIndent();
+      p.print(s);
+      // TODO: remove flush calls
+      p.flush();
+=======
   public void printOpt(String s) {
     if (!compact) {
       maybeIndent();
       p.print(s);
       // TODO: remove flush calls
       p.flush();
+>>>>>>> .r47
     }
   }
 
+<<<<<<< .mine
+  public void setIndent(int indent) {
+    fIndent = indent;
+  }
+=======
   public void setIndent(int indent) {
     this.indent = indent;
   }
+>>>>>>> .r47
 
+<<<<<<< .mine
+  private void maybeIndent() {
+    if (fJustNewlined && !fCompact) {
+      p.print(fIndents[fIndent]);
+      // TODO: remove flush calls
+      p.flush();
+      fJustNewlined = false;
+=======
   private void maybeIndent() {
     if (justNewlined && !compact) {
       p.print(indents[indent]);
       // TODO: remove flush calls
       p.flush();
       justNewlined = false;
+>>>>>>> .r47
     }
   }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/TextOutputOnPrintWriter.java b/dev/core/src/com/google/gwt/dev/util/TextOutputOnPrintWriter.java
index c28d649..14fb6df 100644
--- a/dev/core/src/com/google/gwt/dev/util/TextOutputOnPrintWriter.java
+++ b/dev/core/src/com/google/gwt/dev/util/TextOutputOnPrintWriter.java
@@ -18,6 +18,9 @@
 import java.io.PrintWriter;
 import java.util.Arrays;
 
+/**
+ * Adapts {@link TextOutput} to a print writer.
+ */
 public final class TextOutputOnPrintWriter implements TextOutput {
 
   private final boolean compact;
diff --git a/dev/core/src/com/google/gwt/dev/util/log/AbstractTreeLogger.java b/dev/core/src/com/google/gwt/dev/util/log/AbstractTreeLogger.java
index 99a69b4..cd12428 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/AbstractTreeLogger.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/AbstractTreeLogger.java
@@ -21,21 +21,22 @@
 import java.util.HashSet;
 
 /**
- * Abstract base class for TreeLoggers. 
+ * Abstract base class for TreeLoggers.
  */
 public abstract class AbstractTreeLogger implements TreeLogger {
 
   private static class UncommittedBranchData {
 
+    public final Throwable caught;
+
+    public final String message;
+    public final TreeLogger.Type type;
+
     public UncommittedBranchData(Type type, String message, Throwable exception) {
       caught = exception;
       this.message = message;
       this.type = type;
     }
-
-    public final Throwable caught;
-    public final String message;
-    public final TreeLogger.Type type;
   }
 
   public static String getStackTraceAsString(Throwable e) {
@@ -76,7 +77,7 @@
       if (elem.getLineNumber() > 0) {
         goodElems.add(elem);
         if (goodElems.size() < 10
-          || prevElem.getClassName().equals(elem.getClassName())) {
+            || prevElem.getClassName().equals(elem.getClassName())) {
           // Keep going.
           prevElem = elem;
         } else {
@@ -86,13 +87,24 @@
       }
     }
     if (goodElems.size() > 0) {
-      return (StackTraceElement[]) goodElems
-        .toArray(new StackTraceElement[goodElems.size()]);
+      return (StackTraceElement[]) goodElems.toArray(new StackTraceElement[goodElems.size()]);
     } else {
       return null;
     }
   }
 
+  public int indexWithinMyParent;
+
+  private UncommittedBranchData uncommitted;
+
+  private TreeLogger.Type logLevel = TreeLogger.ALL;
+
+  private int nextChildIndex;
+
+  private final Object nextChildIndexLock = new Object();
+
+  private AbstractTreeLogger parent;
+
   /**
    * The constructor used when creating a top-level logger.
    */
@@ -109,7 +121,7 @@
     if (msg == null) {
       msg = "(Null branch message)";
     }
-    
+
     // Compute at which index the new child will be placed.
     //
     int childIndex = allocateNextChildIndex();
@@ -146,29 +158,8 @@
     return childLogger;
   }
 
-  /**
-   * Commits the branch after ensuring that the parent logger (if there is one)
-   * has been committed first.
-   */
-  private synchronized void commitMyBranchEntryInMyParentLogger() {
-    // (Only the root logger doesn't have a parent.)
-    //
-    if (parent != null) {
-      if (uncommitted != null) {
-        // Commit the parent first.
-        //
-        parent.commitMyBranchEntryInMyParentLogger();
-
-        // Let the subclass do its thing to commit this branch.
-        //
-        parent.doCommitBranch(this, uncommitted.type, uncommitted.message,
-          uncommitted.caught);
-
-        // Release the uncommitted state.
-        //
-        uncommitted = null;
-      }
-    }
+  public final int getBranchedIndex() {
+    return indexWithinMyParent;
   }
 
   public final AbstractTreeLogger getParentLogger() {
@@ -194,7 +185,7 @@
     if (msg == null) {
       msg = "(Null log message)";
     }
-    
+
     int childIndex = allocateNextChildIndex();
     if (isLoggable(type)) {
       commitMyBranchEntryInMyParentLogger();
@@ -239,6 +230,38 @@
   protected abstract void doLog(int indexOfLogEntryWithinParentLogger,
       TreeLogger.Type type, String msg, Throwable caught);
 
+  private int allocateNextChildIndex() {
+    synchronized (nextChildIndexLock) {
+      // postincrement because we want indices to start at 0
+      return nextChildIndex++;
+    }
+  }
+
+  /**
+   * Commits the branch after ensuring that the parent logger (if there is one)
+   * has been committed first.
+   */
+  private synchronized void commitMyBranchEntryInMyParentLogger() {
+    // (Only the root logger doesn't have a parent.)
+    //
+    if (parent != null) {
+      if (uncommitted != null) {
+        // Commit the parent first.
+        //
+        parent.commitMyBranchEntryInMyParentLogger();
+
+        // Let the subclass do its thing to commit this branch.
+        //
+        parent.doCommitBranch(this, uncommitted.type, uncommitted.message,
+            uncommitted.caught);
+
+        // Release the uncommitted state.
+        //
+        uncommitted = null;
+      }
+    }
+  }
+
   private String getLoggerId() {
     if (parent != null) {
       if (parent.parent == null) {
@@ -253,22 +276,4 @@
       return "#";
     }
   }
-
-  private int allocateNextChildIndex() {
-    synchronized (nextChildIndexLock) {
-      // postincrement because we want indices to start at 0
-      return nextChildIndex++;
-    }
-  }
-
-  public final int getBranchedIndex() {
-    return indexWithinMyParent;
-  }
-
-  private UncommittedBranchData uncommitted;
-  private TreeLogger.Type logLevel = TreeLogger.ALL;
-  public int indexWithinMyParent;
-  private int nextChildIndex;
-  private final Object nextChildIndexLock = new Object();
-  private AbstractTreeLogger parent;
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/log/Loggers.java b/dev/core/src/com/google/gwt/dev/util/log/Loggers.java
index edd0003..ddedbe6 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/Loggers.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/Loggers.java
@@ -23,19 +23,27 @@
 
   /**
    * Produces either a null logger or, if the property
-   * <code>gwt.useGuiLogger</code> is set, a graphical tree logger. This method
-   * is useful for unit tests, where most of the time you don't want to log.
+   * <code>gwt.useGuiLogger</code> is set, a graphical tree logger. This
+   * method is useful for unit tests, where most of the time you don't want to
+   * log.
    */
   public static TreeLogger createOptionalGuiTreeLogger() {
     if (System.getProperty("gwt.useGuiLogger") != null) {
       AbstractTreeLogger atl = TreeLoggerWidget.getAsDetachedWindow(
-        "CompilationServiceTest", 800, 600, true);
+          "CompilationServiceTest", 800, 600, true);
       return maybeSetDetailLevel(atl);
     } else {
       return TreeLogger.NULL;
     }
   }
 
+  public static void logURLs(TreeLogger logger, TreeLogger.Type type, URL[] urls) {
+    for (int i = 0; i < urls.length; i++) {
+      URL url = urls[i];
+      logger.log(type, url.toExternalForm(), null);
+    }
+  }
+
   public static TreeLogger maybeSetDetailLevel(AbstractTreeLogger atl) {
     String s = System.getProperty("gwt.logLevel");
     if (s != null) {
@@ -46,11 +54,4 @@
     }
     return atl;
   }
-
-  public static void logURLs(TreeLogger logger, TreeLogger.Type type, URL[] urls) {
-    for (int i = 0; i < urls.length; i++) {
-      URL url = urls[i];
-      logger.log(type, url.toExternalForm(), null);
-    }
-  }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/log/PrintWriterTreeLogger.java b/dev/core/src/com/google/gwt/dev/util/log/PrintWriterTreeLogger.java
index be6b353..6460745 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/PrintWriterTreeLogger.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/PrintWriterTreeLogger.java
@@ -17,8 +17,15 @@
 
 import java.io.PrintWriter;
 
+/**
+ * Tree logger that logs to a print writer.
+ */
 public final class PrintWriterTreeLogger extends AbstractTreeLogger {
 
+  private final PrintWriter out;
+
+  private final String indent;
+
   public PrintWriterTreeLogger() {
     this(new PrintWriter(System.out, true));
   }
@@ -55,7 +62,4 @@
       caught.printStackTrace(out);
     }
   }
-
-  private final PrintWriter out;
-  private final String indent;
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/log/ServletContextTreeLogger.java b/dev/core/src/com/google/gwt/dev/util/log/ServletContextTreeLogger.java
index 72a3bfb..c41eaeb 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/ServletContextTreeLogger.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/ServletContextTreeLogger.java
@@ -17,8 +17,13 @@
 
 import javax.servlet.ServletContext;
 
+/**
+ * Tree logger that logs servlet context information.
+ */
 public class ServletContextTreeLogger extends AbstractTreeLogger {
 
+  private final ServletContext ctx;
+
   public ServletContextTreeLogger(ServletContext ctx) {
     this.ctx = ctx;
   }
@@ -40,6 +45,4 @@
       ctx.log(msg);
     }
   }
-
-  private final ServletContext ctx;
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/log/ThreadLocalTreeLoggerProxy.java b/dev/core/src/com/google/gwt/dev/util/log/ThreadLocalTreeLoggerProxy.java
index 016e897..de6dd19 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/ThreadLocalTreeLoggerProxy.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/ThreadLocalTreeLoggerProxy.java
@@ -37,10 +37,15 @@
   }
 
   /**
-   * Sets the logger to which calls are redirected for the current thread.
+   * Delegates the branch to the thread-local logger if one is present.
+   * Otherwise, the log entry is discarded and <code>this</code> is returned.
    */
-  public void set(TreeLogger logger) {
-    perThreadLogger.set(logger);
+  public TreeLogger branch(Type type, String msg, Throwable caught) {
+    TreeLogger logger = (TreeLogger) perThreadLogger.get();
+    if (logger != null)
+      return logger.branch(type, msg, caught);
+    else
+      return this;
   }
 
   /**
@@ -68,14 +73,9 @@
   }
 
   /**
-   * Delegates the branch to the thread-local logger if one is present.
-   * Otherwise, the log entry is discarded and <code>this</code> is returned.
+   * Sets the logger to which calls are redirected for the current thread.
    */
-  public TreeLogger branch(Type type, String msg, Throwable caught) {
-    TreeLogger logger = (TreeLogger) perThreadLogger.get();
-    if (logger != null)
-      return logger.branch(type, msg, caught);
-    else
-      return this;
+  public void set(TreeLogger logger) {
+    perThreadLogger.set(logger);
   }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/log/TreeItemLogger.java b/dev/core/src/com/google/gwt/dev/util/log/TreeItemLogger.java
index e581226..9bfce42 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/TreeItemLogger.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/TreeItemLogger.java
@@ -30,9 +30,24 @@
 import java.util.LinkedList;
 import java.util.List;
 
+/**
+ * Tree logger built on an SWT tree item.
+ */
 public final class TreeItemLogger extends AbstractTreeLogger {
 
   public static class LogEvent {
+    public final Throwable caught;
+
+    public final int index;
+
+    public final boolean isBranchCommit;
+
+    public final TreeItemLogger logger;
+
+    public final String message;
+
+    public final TreeLogger.Type type;
+
     public LogEvent(TreeItemLogger logger, boolean isBranchCommit, int index,
         Type type, String message, Throwable caught) {
       this.logger = logger;
@@ -202,13 +217,6 @@
         }
       }
     }
-
-    public final Throwable caught;
-    public final int index;
-    public final boolean isBranchCommit;
-    public final TreeItemLogger logger;
-    public final String message;
-    public final TreeLogger.Type type;
   }
   /**
    * One object that is shared across all logger instances in the same tree.
@@ -217,6 +225,10 @@
    * provides tree-wide shared objects such as log item images.
    */
   private static class PendingUpdates {
+    private List updates = new LinkedList();
+
+    private final Object updatesLock = new Object();
+
     public void add(LogEvent update) {
       synchronized (updatesLock) {
         updates.add(update);
@@ -255,9 +267,6 @@
 
       return true;
     }
-
-    private List updates = new LinkedList();
-    private final Object updatesLock = new Object();
   }
 
   // These don't get disposed, but they do last for the entire process, so
@@ -289,6 +298,12 @@
     }
   }
 
+  private boolean dead;
+
+  private TreeItem lazyTreeItem;
+
+  private final PendingUpdates sharedPendingUpdates;
+
   /**
    * Constructs the top-level TreeItemLogger.
    */
@@ -332,8 +347,8 @@
     }
 
     TreeItemLogger commitChild = (TreeItemLogger) childBeingCommitted;
-    sharedPendingUpdates.add(new LogEvent(commitChild, true, commitChild
-      .getBranchedIndex(), type, msg, caught));
+    sharedPendingUpdates.add(new LogEvent(commitChild, true,
+        commitChild.getBranchedIndex(), type, msg, caught));
   }
 
   protected void doLog(int index, TreeLogger.Type type, String msg,
@@ -342,8 +357,7 @@
       return;
     }
 
-    sharedPendingUpdates.add(new LogEvent(this, false, index, type, msg,
-      caught));
+    sharedPendingUpdates.add(new LogEvent(this, false, index, type, msg, caught));
   }
 
   /**
@@ -379,8 +393,4 @@
     //
     return false;
   }
-
-  private boolean dead;
-  private TreeItem lazyTreeItem;
-  private final PendingUpdates sharedPendingUpdates;
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/log/TreeLoggerWidget.java b/dev/core/src/com/google/gwt/dev/util/log/TreeLoggerWidget.java
index 89c9825..392a7d5 100644
--- a/dev/core/src/com/google/gwt/dev/util/log/TreeLoggerWidget.java
+++ b/dev/core/src/com/google/gwt/dev/util/log/TreeLoggerWidget.java
@@ -44,16 +44,21 @@
 import java.io.PrintWriter;
 import java.io.StringWriter;
 
-public class TreeLoggerWidget extends Composite implements TreeListener, SelectionListener {
+/**
+ * SWT widget containing a tree logger.
+ */
+public class TreeLoggerWidget extends Composite implements TreeListener,
+    SelectionListener {
 
   private static AbstractTreeLogger singletonWindowLogger;
 
   /**
-   * Useful for debugging, this method creates a standalone window in a background thread and
-   * returns a logger you can use to write to it.
+   * Useful for debugging, this method creates a standalone window in a
+   * background thread and returns a logger you can use to write to it.
    */
-  public static synchronized AbstractTreeLogger getAsDetachedWindow(final String caption,
-      final int width, final int height, final boolean autoScroll) {
+  public static synchronized AbstractTreeLogger getAsDetachedWindow(
+      final String caption, final int width, final int height,
+      final boolean autoScroll) {
 
     if (singletonWindowLogger != null) {
       // Already set.
@@ -121,6 +126,14 @@
     return singletonWindowLogger;
   }
 
+  private boolean autoScroll;
+
+  private final Text details;
+
+  private final TreeItemLogger logger;
+
+  private final Tree tree;
+
   public TreeLoggerWidget(Composite parent) {
     super(parent, SWT.NONE);
 
@@ -149,7 +162,8 @@
     logger = new TreeItemLogger();
 
     // The detail
-    details = new Text(sash, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY | SWT.BORDER | SWT.V_SCROLL);
+    details = new Text(sash, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY | SWT.BORDER
+        | SWT.V_SCROLL);
     final Color detailsBgColor = new Color(null, 255, 255, 255);
     details.setBackground(detailsBgColor);
     details.addDisposeListener(new DisposeListener() {
@@ -158,7 +172,7 @@
       }
     });
 
-    sash.setWeights(new int[]{80, 20});
+    sash.setWeights(new int[] {80, 20});
 
     initLogFlushTimer(parent.getDisplay());
   }
@@ -170,7 +184,7 @@
       collapseAll(item);
     }
     if (items.length > 0) {
-      tree.setSelection(new TreeItem[]{items[0]});
+      tree.setSelection(new TreeItem[] {items[0]});
     }
   }
 
@@ -190,7 +204,7 @@
       expandAll(item);
     }
     if (items.length > 0) {
-      tree.setSelection(new TreeItem[]{items[0]});
+      tree.setSelection(new TreeItem[] {items[0]});
     }
   }
 
@@ -203,6 +217,10 @@
     }
   }
 
+  public boolean getAutoScroll() {
+    return autoScroll;
+  }
+
   public AbstractTreeLogger getLogger() {
     return logger;
   }
@@ -212,6 +230,10 @@
     details.setText("");
   }
 
+  public void setAutoScroll(boolean autoScroll) {
+    this.autoScroll = autoScroll;
+  }
+
   public synchronized void treeCollapsed(TreeEvent treeEvent) {
   }
 
@@ -225,45 +247,8 @@
     syncDetailsPane((TreeItem) event.item);
   }
 
-  private void syncDetailsPane(TreeItem item) {
-    // Try to get a LogEvent from the item's custom data.
-    //
-    TreeItemLogger.LogEvent logEvent = null;
-    Object testLogEvent = item.getData();
-    if (testLogEvent instanceof TreeItemLogger.LogEvent) {
-      logEvent = (LogEvent) testLogEvent;
-    }
-
-    // Build a detail string.
-    //
-    StringBuffer sb = new StringBuffer();
-
-    // Show the message type.
-    //
-    if (logEvent != null && logEvent.type != null) {
-      sb.append("[");
-      sb.append(logEvent.type.getLabel());
-      sb.append("] ");
-    }
-
-    // Show the item text.
-    //
-    sb.append(item.getText());
-    sb.append("\n");
-
-    // Show the exception info for anything other than "UnableToComplete".
-    //
-    if (logEvent != null && logEvent.caught != null) {
-      if (!(logEvent.caught instanceof UnableToCompleteException)) {
-        String stackTrace = AbstractTreeLogger.getStackTraceAsString(logEvent.caught);
-        sb.append(stackTrace);
-      }
-    }
-
-    details.setText(sb.toString());
-  }
-
-  protected void appendTreeItemText(PrintWriter result, TreeItem[] items, int depth) {
+  protected void appendTreeItemText(PrintWriter result, TreeItem[] items,
+      int depth) {
     for (int i = 0; i < items.length; i++) {
       TreeItem item = items[i];
       for (int j = 0; j < depth; j++) {
@@ -287,8 +272,8 @@
     pw.close();
     Clipboard cb = new Clipboard(tree.getDisplay());
 
-    final Object[] cbText = new Object[]{sw.toString()};
-    final Transfer[] cbFormat = new Transfer[]{TextTransfer.getInstance()};
+    final Object[] cbText = new Object[] {sw.toString()};
+    final Transfer[] cbFormat = new Transfer[] {TextTransfer.getInstance()};
     cb.setContents(cbText, cbFormat);
   }
 
@@ -307,7 +292,7 @@
           if (autoScroll) {
             TreeItem lastItem = findLastVisibleItem(tree);
             if (lastItem != null) {
-              tree.setSelection(new TreeItem[]{lastItem});
+              tree.setSelection(new TreeItem[] {lastItem});
               tree.showItem(lastItem);
               expandAllChildren(lastItem);
               syncDetailsPane(lastItem);
@@ -352,16 +337,41 @@
     });
   }
 
-  public void setAutoScroll(boolean autoScroll) {
-    this.autoScroll = autoScroll;
-  }
+  private void syncDetailsPane(TreeItem item) {
+    // Try to get a LogEvent from the item's custom data.
+    //
+    TreeItemLogger.LogEvent logEvent = null;
+    Object testLogEvent = item.getData();
+    if (testLogEvent instanceof TreeItemLogger.LogEvent) {
+      logEvent = (LogEvent) testLogEvent;
+    }
 
-  public boolean getAutoScroll() {
-    return autoScroll;
-  }
+    // Build a detail string.
+    //
+    StringBuffer sb = new StringBuffer();
 
-  private boolean autoScroll;
-  private final Text details;
-  private final TreeItemLogger logger;
-  private final Tree tree;
+    // Show the message type.
+    //
+    if (logEvent != null && logEvent.type != null) {
+      sb.append("[");
+      sb.append(logEvent.type.getLabel());
+      sb.append("] ");
+    }
+
+    // Show the item text.
+    //
+    sb.append(item.getText());
+    sb.append("\n");
+
+    // Show the exception info for anything other than "UnableToComplete".
+    //
+    if (logEvent != null && logEvent.caught != null) {
+      if (!(logEvent.caught instanceof UnableToCompleteException)) {
+        String stackTrace = AbstractTreeLogger.getStackTraceAsString(logEvent.caught);
+        sb.append(stackTrace);
+      }
+    }
+
+    details.setText(sb.toString());
+  }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Formatter.java b/dev/core/src/com/google/gwt/dev/util/msg/Formatter.java
index 87ec786..6580955 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Formatter.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Formatter.java
@@ -15,7 +15,11 @@
  */
 package com.google.gwt.dev.util.msg;
 
+/**
+ * Abstract formatter used by {@link Message}.
+ */
 public abstract class Formatter {
+
   /**
    * Transforms the specified object into a string format.
    * 
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForClass.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForClass.java
index fe22aa1..35e2d8a 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForClass.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForClass.java
@@ -15,6 +15,9 @@
  */
 package com.google.gwt.dev.util.msg;
 
+/**
+ * Class message formatter.
+ */
 public final class FormatterForClass extends Formatter {
 
   private String getNiceTypeName(Class targetType) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForFile.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForFile.java
index 6e43d72..11ef2b6 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForFile.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForFile.java
@@ -17,6 +17,9 @@
 
 import java.io.File;
 
+/**
+ * File message formatter.
+ */
 public final class FormatterForFile extends Formatter {
 
   public String format(Object toFormat) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForInteger.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForInteger.java
index 8fcee58..9fa1d5d 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForInteger.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForInteger.java
@@ -15,6 +15,9 @@
  */
 package com.google.gwt.dev.util.msg;
 
+/**
+ * Integer message formatter.
+ */
 public final class FormatterForInteger extends Formatter {
 
   public String format(Object toFormat) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForLong.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForLong.java
index ca5c3d7..c4052fe 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForLong.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForLong.java
@@ -15,6 +15,9 @@
  */
 package com.google.gwt.dev.util.msg;
 
+/**
+ * Long message formatter.
+ */
 public final class FormatterForLong extends Formatter {
 
   public String format(Object toFormat) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForMethod.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForMethod.java
index eb45b3c..deec8df 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForMethod.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForMethod.java
@@ -17,6 +17,9 @@
 
 import java.lang.reflect.Method;
 
+/**
+ * Method message formatter.
+ */
 public final class FormatterForMethod extends Formatter {
 
   public String format(Object toFormat) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForString.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForString.java
index 9f3e8ed..184f608 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForString.java
@@ -15,6 +15,9 @@
  */
 package com.google.gwt.dev.util.msg;
 
+/**
+ * String message formatter.
+ */
 public final class FormatterForString extends Formatter {
 
   public String format(Object toFormat) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForStringArray.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForStringArray.java
index e763a33..4ca3dd1 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForStringArray.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForStringArray.java
@@ -15,6 +15,9 @@
  */
 package com.google.gwt.dev.util.msg;
 
+/**
+ * String array message formatter.
+ */
 public final class FormatterForStringArray extends Formatter {
 
   public String format(Object toFormat) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForURL.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForURL.java
index f912dce..aa43e00 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForURL.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForURL.java
@@ -17,6 +17,9 @@
 
 import java.net.URL;
 
+/**
+ * URL message formatter.
+ */
 public class FormatterForURL extends Formatter {
 
   public String format(Object toFormat) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterToString.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterToString.java
index 5ef6319..e0e9405 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterToString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterToString.java
@@ -15,10 +15,12 @@
  */
 package com.google.gwt.dev.util.msg;
 
+/**
+ * String message formatter.
+ */
 public final class FormatterToString extends Formatter {
 
   public String format(Object toFormat) {
     return toFormat.toString();
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message.java b/dev/core/src/com/google/gwt/dev/util/msg/Message.java
index 122d2c9..93978b6 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message.java
@@ -22,12 +22,10 @@
 import java.net.URL;
 
 /**
- * Fast way to produce messages for the logger.
- * Use $N to specify the replacement argument.
- * Caveats:
- * - N must be a single digit (you shouldn't need more than 10 args, right?)
- * - '$' cannot be escaped
- * - each arg can only appear once
+ * Fast way to produce messages for the logger. Use $N to specify the
+ * replacement argument. Caveats: - N must be a single digit (you shouldn't need
+ * more than 10 args, right?) - '$' cannot be escaped - each arg can only appear
+ * once
  */
 public abstract class Message {
 
@@ -41,6 +39,14 @@
   private static final Formatter FMT_STRING = new FormatterForString();
   private static final Formatter FMT_STRING_ARRAY = new FormatterForStringArray();
 
+  protected final TreeLogger.Type type;
+
+  protected final char[][] fmtParts;
+
+  protected final int[] argIndices;
+
+  protected final int minChars;
+
   /**
    * Creates a lazily-formatted message.
    */
@@ -57,8 +63,8 @@
       int to = fmt.indexOf('$', from);
       if (to != -1) {
         if (to < fmt.length() - 1) {
-          char charDigit = fmt.charAt(to + 1); 
-          if (Character.isDigit(charDigit)) { 
+          char charDigit = fmt.charAt(to + 1);
+          if (Character.isDigit(charDigit)) {
             int digit = Character.digit(charDigit, 10);
             fmtParts[i] = fmt.substring(from, to).toCharArray();
             argIndices[i] = digit;
@@ -86,10 +92,6 @@
     return FMT_FILE;
   }
 
-  protected final Formatter getFormatter(URL u) {
-    return FMT_URL;
-  }
-
   protected final Formatter getFormatter(Integer i) {
     return FMT_INTEGER;
   }
@@ -106,16 +108,15 @@
     return FMT_STRING;
   }
 
-  protected final Formatter getToStringFormatter() {
-    return FMT_TOSTRING;
-  }
-
   protected final Formatter getFormatter(String[] sa) {
     return FMT_STRING_ARRAY;
   }
 
-  protected final TreeLogger.Type type;
-  protected final char[][] fmtParts;
-  protected final int[] argIndices;
-  protected final int minChars;
+  protected final Formatter getFormatter(URL u) {
+    return FMT_URL;
+  }
+
+  protected final Formatter getToStringFormatter() {
+    return FMT_TOSTRING;
+  }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message0.java b/dev/core/src/com/google/gwt/dev/util/msg/Message0.java
index b387014..29128e6 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message0.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message0.java
@@ -18,22 +18,25 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * 0-arg message.
+ */
 public final class Message0 extends Message {
 
   public Message0(Type type, String fmt) {
     super(type, fmt, 0);
   }
 
-  public void log(TreeLogger logger, Throwable caught) {
-    if (logger.isLoggable(type)) {
-      logger.log(type, new String(fmtParts[0]), caught);
-    }
-  }
-
   public TreeLogger branch(TreeLogger logger, Throwable caught) {
     // Always branch, even if the branch root is not loggable.
     // See TreeLogger.branch() for details as to why.
     //
     return logger.branch(type, new String(fmtParts[0]), caught);
   }
+
+  public void log(TreeLogger logger, Throwable caught) {
+    if (logger.isLoggable(type)) {
+      logger.log(type, new String(fmtParts[0]), caught);
+    }
+  }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message1.java b/dev/core/src/com/google/gwt/dev/util/msg/Message1.java
index f7a6082..49d4092 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message1.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message1.java
@@ -18,6 +18,9 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * 1-arg message.
+ */
 public abstract class Message1 extends Message {
 
   public Message1(Type type, String fmt) {
@@ -33,10 +36,10 @@
     // Format the objects.
     //
     String stringArg1 = (arg1 != null ? fmt1.format(arg1) : "null");
-    
+
     // To maintain consistency with the other impls, we use an insert var.
     //
-    String insert1 = stringArg1;  
+    String insert1 = stringArg1;
 
     // Cache the length of the inserts.
     //
@@ -46,7 +49,7 @@
     //
     int lenPart0 = fmtParts[0].length;
     int lenPart1 = fmtParts[1].length;
-    
+
     // Prep for copying.
     //
     int dest = 0;
@@ -55,13 +58,13 @@
     // literal + insert, part 0
     System.arraycopy(fmtParts[0], 0, chars, dest, lenPart0);
     dest += lenPart0;
-    
-    insert1.getChars(0, lenInsert1, chars, dest);   
+
+    insert1.getChars(0, lenInsert1, chars, dest);
     dest += lenInsert1;
 
     // final literal
     System.arraycopy(fmtParts[1], 0, chars, dest, lenPart1);
-    
+
     return new String(chars);
   }
 
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message1File.java b/dev/core/src/com/google/gwt/dev/util/msg/Message1File.java
index 6b0539f..2e745bd 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message1File.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message1File.java
@@ -20,6 +20,9 @@
 
 import java.io.File;
 
+/**
+ * File message.
+ */
 public final class Message1File extends Message1 {
 
   public Message1File(Type type, String fmt) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message1Long.java b/dev/core/src/com/google/gwt/dev/util/msg/Message1Long.java
index 5f966ff..06e5073 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message1Long.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message1Long.java
@@ -18,6 +18,9 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * Long message.
+ */
 public final class Message1Long extends Message1 {
 
   public Message1Long(Type type, String fmt) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message1String.java b/dev/core/src/com/google/gwt/dev/util/msg/Message1String.java
index 1cd68c5..46c2c21 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message1String.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message1String.java
@@ -18,6 +18,9 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * String message.
+ */
 public final class Message1String extends Message1 {
 
   public Message1String(Type type, String fmt) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message1StringArray.java b/dev/core/src/com/google/gwt/dev/util/msg/Message1StringArray.java
index ed399d7..dc22a4f 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message1StringArray.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message1StringArray.java
@@ -18,17 +18,20 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * String array message.
+ */
 public final class Message1StringArray extends Message1 {
 
   public Message1StringArray(Type type, String fmt) {
     super(type, fmt);
   }
 
-  public void log(TreeLogger logger, String[] sa, Throwable caught) {
-    log1(logger, sa, getFormatter(sa), caught);
-  }
-
   public TreeLogger branch(TreeLogger logger, String[] sa, Throwable caught) {
     return branch1(logger, sa, getFormatter(sa), caught);
   }
+
+  public void log(TreeLogger logger, String[] sa, Throwable caught) {
+    log1(logger, sa, getFormatter(sa), caught);
+  }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message1ToString.java b/dev/core/src/com/google/gwt/dev/util/msg/Message1ToString.java
index 7f15eb1..41b8526 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message1ToString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message1ToString.java
@@ -18,6 +18,9 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * String message.
+ */
 public final class Message1ToString extends Message1 {
 
   public Message1ToString(Type type, String fmt) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message1URL.java b/dev/core/src/com/google/gwt/dev/util/msg/Message1URL.java
index f25c7ad..3929854 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message1URL.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message1URL.java
@@ -20,6 +20,9 @@
 
 import java.net.URL;
 
+/**
+ * URL message.
+ */
 public final class Message1URL extends Message1 {
 
   public Message1URL(Type type, String fmt) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2.java
index 32cd369..07a9e8f 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2.java
@@ -18,6 +18,9 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * 2-arg message.
+ */
 public abstract class Message2 extends Message {
 
   public Message2(Type type, String fmt) {
@@ -36,7 +39,7 @@
     //
     String stringArg1 = (arg1 != null ? fmt1.format(arg1) : "null");
     String stringArg2 = (arg2 != null ? fmt2.format(arg2) : "null");
-    
+
     // Decide how to order the inserts.
     // Tests are biased toward $1..$2 order.
     //
@@ -53,7 +56,7 @@
     int lenPart0 = fmtParts[0].length;
     int lenPart1 = fmtParts[1].length;
     int lenPart2 = fmtParts[2].length;
-    
+
     // Prep for copying.
     //
     int dest = 0;
@@ -62,20 +65,20 @@
     // literal + insert, part 0
     System.arraycopy(fmtParts[0], 0, chars, dest, lenPart0);
     dest += lenPart0;
-    
-    insert1.getChars(0, lenInsert1, chars, dest);   
+
+    insert1.getChars(0, lenInsert1, chars, dest);
     dest += lenInsert1;
 
     // literal + insert, part 1
     System.arraycopy(fmtParts[1], 0, chars, dest, lenPart1);
     dest += lenPart1;
-    
-    insert2.getChars(0, lenInsert2, chars, dest);   
+
+    insert2.getChars(0, lenInsert2, chars, dest);
     dest += lenInsert2;
-    
+
     // final literal
     System.arraycopy(fmtParts[2], 0, chars, dest, lenPart2);
-    
+
     return new String(chars);
   }
 
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2ClassClass.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2ClassClass.java
index 509739d..7b917d8 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2ClassClass.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2ClassClass.java
@@ -18,17 +18,21 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * Class & Class message.
+ */
 public final class Message2ClassClass extends Message2 {
 
   public Message2ClassClass(Type type, String fmt) {
     super(type, fmt);
   }
 
+  public TreeLogger branch(TreeLogger logger, Class c1, Class c2,
+      Throwable caught) {
+    return branch2(logger, c1, c2, getFormatter(c1), getFormatter(c2), caught);
+  }
+
   public void log(TreeLogger logger, Class c1, Class c2, Throwable caught) {
     log2(logger, c1, c2, getFormatter(c1), getFormatter(c2), caught);
   }
-  
-  public TreeLogger branch(TreeLogger logger, Class c1, Class c2, Throwable caught) {
-    return branch2(logger, c1, c2, getFormatter(c1), getFormatter(c2), caught);
-  }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2FileString.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2FileString.java
index bc5ef29..0c3b77d 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2FileString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2FileString.java
@@ -20,17 +20,20 @@
 
 import java.io.File;
 
+/**
+ * File & String message.
+ */
 public final class Message2FileString extends Message2 {
 
   public Message2FileString(Type type, String fmt) {
     super(type, fmt);
   }
 
-  public void log(TreeLogger logger, File f, String s, Throwable caught) {
-    log2(logger, f, s, getFormatter(f), getFormatter(s), caught);
-  }
-
   public TreeLogger branch(TreeLogger logger, File f, String s, Throwable caught) {
     return branch2(logger, f, s, getFormatter(f), getFormatter(s), caught);
   }
+
+  public void log(TreeLogger logger, File f, String s, Throwable caught) {
+    log2(logger, f, s, getFormatter(f), getFormatter(s), caught);
+  }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2IntString.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2IntString.java
index 82f14bf..c4cb9eb8 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2IntString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2IntString.java
@@ -18,6 +18,9 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * Integer & String message.
+ */
 public final class Message2IntString extends Message2 {
 
   public Message2IntString(Type type, String fmt) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2LongString.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2LongString.java
index 71f4afc..2e93531 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2LongString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2LongString.java
@@ -18,6 +18,9 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * Long & String message.
+ */
 public final class Message2LongString extends Message2 {
 
   public Message2LongString(Type type, String fmt) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2StringFile.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2StringFile.java
index 7d20b47..8e68640 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2StringFile.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2StringFile.java
@@ -20,6 +20,9 @@
 
 import java.io.File;
 
+/**
+ * String & File message.
+ */
 public final class Message2StringFile extends Message2 {
 
   public Message2StringFile(Type type, String fmt) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2StringInt.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2StringInt.java
index b48eda8..a3f07bc 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2StringInt.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2StringInt.java
@@ -18,20 +18,23 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * String & Integer message.
+ */
 public final class Message2StringInt extends Message2 {
 
   public Message2StringInt(Type type, String fmt) {
     super(type, fmt);
   }
 
-  public void log(TreeLogger logger, String s, int x, Throwable caught) {
-    Integer xi = new Integer(x);
-    log2(logger, s, xi, getFormatter(s), getFormatter(xi), caught);
-  }
-
   public TreeLogger branch(TreeLogger logger, String s, int x, Throwable caught) {
     Integer xi = new Integer(x);
     return branch2(logger, s, xi, getFormatter(s), getFormatter(xi), caught);
   }
 
+  public void log(TreeLogger logger, String s, int x, Throwable caught) {
+    Integer xi = new Integer(x);
+    log2(logger, s, xi, getFormatter(s), getFormatter(xi), caught);
+  }
+
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2StringString.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2StringString.java
index f3ce826..e9b6b5d 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2StringString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2StringString.java
@@ -18,6 +18,9 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * String & String message.
+ */
 public final class Message2StringString extends Message2 {
 
   public Message2StringString(Type type, String fmt) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2StringStringArray.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2StringStringArray.java
index 3bbc2d6..c26d4c8 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2StringStringArray.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2StringStringArray.java
@@ -18,17 +18,20 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * String & String array message.
+ */
 public final class Message2StringStringArray extends Message2 {
   public Message2StringStringArray(Type type, String fmt) {
     super(type, fmt);
   }
 
-  public void log(TreeLogger logger, String s, String[] sa, Throwable caught) {
-    log2(logger, s, sa, getFormatter(s), getFormatter(sa), caught);
-  }
-
   public TreeLogger branch(TreeLogger logger, String s, String[] sa,
       Throwable caught) {
     return branch2(logger, s, sa, getFormatter(s), getFormatter(sa), caught);
   }
+
+  public void log(TreeLogger logger, String s, String[] sa, Throwable caught) {
+    log2(logger, s, sa, getFormatter(s), getFormatter(sa), caught);
+  }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2StringURL.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2StringURL.java
index c00a397..e88432c 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2StringURL.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2StringURL.java
@@ -20,6 +20,9 @@
 
 import java.net.URL;
 
+/**
+ * String & URL message.
+ */
 public final class Message2StringURL extends Message2 {
 
   public Message2StringURL(Type type, String fmt) {
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2URLInt.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2URLInt.java
index b787c8d..44acb34 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2URLInt.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2URLInt.java
@@ -20,19 +20,22 @@
 
 import java.net.URL;
 
+/**
+ * URL & Integer message.
+ */
 public final class Message2URLInt extends Message2 {
 
   public Message2URLInt(Type type, String fmt) {
     super(type, fmt);
   }
 
-  public void log(TreeLogger logger, URL u, int x, Throwable caught) {
-    Integer xi = new Integer(x);
-    log2(logger, u, xi, getFormatter(u), getFormatter(xi), caught);
-  }
-
   public TreeLogger branch(TreeLogger logger, URL u, int x, Throwable caught) {
     Integer xi = new Integer(x);
     return branch2(logger, u, xi, getFormatter(u), getFormatter(xi), caught);
   }
+
+  public void log(TreeLogger logger, URL u, int x, Throwable caught) {
+    Integer xi = new Integer(x);
+    log2(logger, u, xi, getFormatter(u), getFormatter(xi), caught);
+  }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2URLString.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2URLString.java
index a69e986..57ae3e8 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2URLString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2URLString.java
@@ -20,17 +20,20 @@
 
 import java.net.URL;
 
+/**
+ * URL & String message.
+ */
 public final class Message2URLString extends Message2 {
 
   public Message2URLString(Type type, String fmt) {
     super(type, fmt);
   }
 
-  public void log(TreeLogger logger, URL u, String s, Throwable caught) {
-    log2(logger, u, s, getFormatter(u), getFormatter(s), caught);
-  }
-
   public TreeLogger branch(TreeLogger logger, URL u, String s, Throwable caught) {
     return branch2(logger, u, s, getFormatter(u), getFormatter(s), caught);
   }
+
+  public void log(TreeLogger logger, URL u, String s, Throwable caught) {
+    log2(logger, u, s, getFormatter(u), getFormatter(s), caught);
+  }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message2URLURL.java b/dev/core/src/com/google/gwt/dev/util/msg/Message2URLURL.java
index a0df556..cc232bb 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message2URLURL.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message2URLURL.java
@@ -20,17 +20,20 @@
 
 import java.net.URL;
 
+/**
+ * URL & URL message.
+ */
 public final class Message2URLURL extends Message2 {
 
   public Message2URLURL(Type type, String fmt) {
     super(type, fmt);
   }
 
-  public void log(TreeLogger logger, URL u1, URL u2, Throwable caught) {
-    log2(logger, u1, u2, getFormatter(u1), getFormatter(u2), caught);
-  }
-
   public TreeLogger branch(TreeLogger logger, URL u1, URL u2, Throwable caught) {
     return branch2(logger, u1, u2, getFormatter(u1), getFormatter(u2), caught);
   }
+
+  public void log(TreeLogger logger, URL u1, URL u2, Throwable caught) {
+    log2(logger, u1, u2, getFormatter(u1), getFormatter(u2), caught);
+  }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message3.java b/dev/core/src/com/google/gwt/dev/util/msg/Message3.java
index eeb1d25..22472d5 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message3.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message3.java
@@ -18,6 +18,9 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * 3-arg message.
+ */
 public abstract class Message3 extends Message {
 
   protected Message3(Type type, String fmt) {
@@ -28,12 +31,12 @@
       Object arg3, Formatter fmt1, Formatter fmt2, Formatter fmt3,
       Throwable caught) {
     return logger.branch(type, compose3(arg1, arg2, arg3, fmt1, fmt2, fmt3),
-      caught);
+        caught);
   }
 
   protected String compose3(Object arg1, Object arg2, Object arg3,
       Formatter fmt1, Formatter fmt2, Formatter fmt3) {
-    
+
     // Format the objects.
     //
     String stringArg1 = (arg1 != null ? fmt1.format(arg1) : "null");
@@ -43,9 +46,12 @@
     // Decide how to order the inserts.
     // Tests are biased toward $1..$2 order.
     //
-    String insert1 = (argIndices[0] == 0) ? stringArg1 : ((argIndices[0] == 1) ? stringArg2 : stringArg3);  
-    String insert2 = (argIndices[1] == 1) ? stringArg2 : ((argIndices[1] == 0) ? stringArg1 : stringArg3);
-    String insert3 = (argIndices[2] == 2) ? stringArg3 : ((argIndices[2] == 0) ? stringArg1 : stringArg2);
+    String insert1 = (argIndices[0] == 0) ? stringArg1 : ((argIndices[0] == 1)
+        ? stringArg2 : stringArg3);
+    String insert2 = (argIndices[1] == 1) ? stringArg2 : ((argIndices[1] == 0)
+        ? stringArg1 : stringArg3);
+    String insert3 = (argIndices[2] == 2) ? stringArg3 : ((argIndices[2] == 0)
+        ? stringArg1 : stringArg2);
 
     // Cache the length of the inserts.
     //
@@ -59,7 +65,7 @@
     int lenPart1 = fmtParts[1].length;
     int lenPart2 = fmtParts[2].length;
     int lenPart3 = fmtParts[3].length;
-    
+
     // Prep for copying.
     //
     int dest = 0;
@@ -68,27 +74,27 @@
     // literal + insert, part 0
     System.arraycopy(fmtParts[0], 0, chars, dest, lenPart0);
     dest += lenPart0;
-    
-    insert1.getChars(0, lenInsert1, chars, dest);   
+
+    insert1.getChars(0, lenInsert1, chars, dest);
     dest += lenInsert1;
 
     // literal + insert, part 1
     System.arraycopy(fmtParts[1], 0, chars, dest, lenPart1);
     dest += lenPart1;
-    
-    insert2.getChars(0, lenInsert2, chars, dest);   
+
+    insert2.getChars(0, lenInsert2, chars, dest);
     dest += lenInsert2;
-    
+
     // literal + insert, part 2
     System.arraycopy(fmtParts[2], 0, chars, dest, lenPart2);
     dest += lenPart2;
-    
-    insert3.getChars(0, lenInsert3, chars, dest);   
+
+    insert3.getChars(0, lenInsert3, chars, dest);
     dest += lenInsert3;
 
     // final literal
     System.arraycopy(fmtParts[3], 0, chars, dest, lenPart3);
-    
+
     return new String(chars);
   }
 
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message3IntMethodString.java b/dev/core/src/com/google/gwt/dev/util/msg/Message3IntMethodString.java
index e733054..fc6c7e4 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message3IntMethodString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message3IntMethodString.java
@@ -20,6 +20,9 @@
 
 import java.lang.reflect.Method;
 
+/**
+ * Integer, Method, & String message.
+ */
 public final class Message3IntMethodString extends Message3 {
 
   public Message3IntMethodString(Type type, String fmt) {
@@ -30,13 +33,13 @@
       Throwable caught) {
     Integer xi = new Integer(x);
     return branch3(logger, xi, m, s, getFormatter(xi), getFormatter(m),
-      getFormatter(s), caught);
+        getFormatter(s), caught);
   }
 
   public void log(TreeLogger logger, int x, Method m, String s, Throwable caught) {
     Integer xi = new Integer(x);
     log3(logger, xi, m, s, getFormatter(xi), getFormatter(m), getFormatter(s),
-      caught);
+        caught);
   }
 
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message3IntStringClass.java b/dev/core/src/com/google/gwt/dev/util/msg/Message3IntStringClass.java
index d77cafe..d107941 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message3IntStringClass.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message3IntStringClass.java
@@ -18,6 +18,9 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * Integer, String & Class message.
+ */
 public final class Message3IntStringClass extends Message3 {
 
   public Message3IntStringClass(Type type, String fmt) {
@@ -28,12 +31,12 @@
       Throwable caught) {
     Integer xi = new Integer(x);
     return branch3(logger, xi, s, c, getFormatter(xi), getFormatter(s),
-      getFormatter(c), caught);
+        getFormatter(c), caught);
   }
 
   public void log(TreeLogger logger, int x, String s, Class c, Throwable caught) {
     Integer xi = new Integer(x);
     log3(logger, xi, s, c, getFormatter(xi), getFormatter(s), getFormatter(c),
-      caught);
+        caught);
   }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message3IntStringString.java b/dev/core/src/com/google/gwt/dev/util/msg/Message3IntStringString.java
index e78c750..3cfb96d 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message3IntStringString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message3IntStringString.java
@@ -18,6 +18,9 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * Integer, String, & String message.
+ */
 public final class Message3IntStringString extends Message3 {
 
   public Message3IntStringString(Type type, String fmt) {
@@ -28,13 +31,13 @@
       Throwable caught) {
     Integer xi = new Integer(x);
     return branch3(logger, xi, s1, s2, getFormatter(xi), getFormatter(s1),
-      getFormatter(s2), caught);
+        getFormatter(s2), caught);
   }
 
   public void log(TreeLogger logger, int x, String s1, String s2,
       Throwable caught) {
     Integer xi = new Integer(x);
     log3(logger, xi, s1, s2, getFormatter(xi), getFormatter(s1),
-      getFormatter(s2), caught);
+        getFormatter(s2), caught);
   }
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/Message3StringIntString.java b/dev/core/src/com/google/gwt/dev/util/msg/Message3StringIntString.java
index bf388e1..fdee544 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/Message3StringIntString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/Message3StringIntString.java
@@ -18,6 +18,9 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.Type;
 
+/**
+ * String, Integer, & String message.
+ */
 public final class Message3StringIntString extends Message3 {
 
   public Message3StringIntString(Type type, String fmt) {
@@ -28,14 +31,14 @@
       Throwable caught) {
     Integer xi = new Integer(x);
     return branch3(logger, s1, xi, s2, getFormatter(s1), getFormatter(xi),
-      getFormatter(s2), caught);
+        getFormatter(s2), caught);
   }
 
   public void log(TreeLogger logger, String s1, int x, String s2,
       Throwable caught) {
     Integer xi = new Integer(x);
     log3(logger, s1, xi, s2, getFormatter(s1), getFormatter(xi),
-      getFormatter(s2), caught);
+        getFormatter(s2), caught);
   }
 
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/DefaultSchema.java b/dev/core/src/com/google/gwt/dev/util/xml/DefaultSchema.java
index 1765a43..d5d8594 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/DefaultSchema.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/DefaultSchema.java
@@ -22,6 +22,8 @@
 
 public class DefaultSchema extends Schema {
 
+  private final TreeLogger logger;
+
   public DefaultSchema(TreeLogger logger) {
     this.logger = logger;
 
@@ -29,18 +31,18 @@
     //
     registerAttributeConverter(int.class, new AttributeConverterForInteger());
     registerAttributeConverter(Integer.class,
-      new AttributeConverterForInteger());
+        new AttributeConverterForInteger());
     registerAttributeConverter(String.class, new AttributeConverterForString());
     registerAttributeConverter(boolean.class,
-      new AttributeConverterForBoolean());
+        new AttributeConverterForBoolean());
     registerAttributeConverter(Boolean.class,
-      new AttributeConverterForBoolean());
+        new AttributeConverterForBoolean());
   }
 
   public void onBadAttributeValue(int line, String elem, String attr,
       String value, Class paramType) throws UnableToCompleteException {
     Messages.XML_ATTRIBUTE_CONVERSION_ERROR.log(logger, line, attr, paramType,
-      null);
+        null);
     throw new UnableToCompleteException();
   }
 
@@ -52,8 +54,7 @@
 
   public void onMissingAttribute(int line, String elem, String attr)
       throws UnableToCompleteException {
-    Messages.XML_REQUIRED_ATTRIBUTE_MISSING
-      .log(logger, elem, line, attr, null);
+    Messages.XML_REQUIRED_ATTRIBUTE_MISSING.log(logger, elem, line, attr, null);
     throw new UnableToCompleteException();
   }
 
@@ -74,6 +75,4 @@
     Messages.XML_ELEMENT_UNEXPECTED.log(logger, line, elem, null);
     throw new UnableToCompleteException();
   }
-
-  private final TreeLogger logger;
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/HandlerArgs.java b/dev/core/src/com/google/gwt/dev/util/xml/HandlerArgs.java
index 6b3cb02..3cafa9a 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/HandlerArgs.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/HandlerArgs.java
@@ -23,6 +23,19 @@
  */
 public class HandlerArgs {
 
+  // The real (non-normalized) names of the attributes, used to report errors.
+  private final String[] attrNames;
+
+  private final String[] argValues;
+
+  private final HandlerParam[] handlerParams;
+
+  private final int lineNumber;
+
+  private final Schema schema;
+
+  private final String elemName;
+
   public HandlerArgs(Schema schema, int lineNumber, String elemName,
       HandlerParam[] handlerParams) {
     this.schema = schema;
@@ -40,19 +53,17 @@
   }
 
   /**
-   * @return
-   *    the argument converted to a form that is expected to compatible with
-   *    the associated parameter and will work for a reflection "invoke()" call
-   * @throws UnableToCompleteException
-   *    if the argument could not be converted
+   * @return the argument converted to a form that is expected to compatible
+   *         with the associated parameter and will work for a reflection
+   *         "invoke()" call
+   * @throws UnableToCompleteException if the argument could not be converted
    */
   public Object convertToArg(int i) throws UnableToCompleteException {
     String value = argValues[i];
     if (value != null) {
-      AttributeConverter converter = schema
-        .getAttributeConverter(handlerParams[i].getParamType());
-      return converter.convertToArg(schema, lineNumber, elemName,
-        attrNames[i], value);
+      AttributeConverter converter = schema.getAttributeConverter(handlerParams[i].getParamType());
+      return converter.convertToArg(schema, lineNumber, elemName, attrNames[i],
+          value);
     } else {
       return new NullPointerException("Argument " + i + " was null");
     }
@@ -75,9 +86,8 @@
   }
 
   /**
-   * @return 
-   *    <code>true</code> if the param for the specified attribute was set; 
-   *    <code>false</code> if no matching param was found
+   * @return <code>true</code> if the param for the specified attribute was
+   *         set; <code>false</code> if no matching param was found
    */
   public boolean setArg(String attrName, String attrValue) {
     String normalizedAttrName = normalizeAttrName(attrName);
@@ -97,17 +107,4 @@
     // NOTE: this is where other characters would be folded to '_'.
     return attrName.replace('-', '_');
   }
-
-  // The real (non-normalized) names of the attributes, used to report errors.
-  private final String[] attrNames;
-
-  private final String[] argValues;
-
-  private final HandlerParam[] handlerParams;
-
-  private final int lineNumber;
-
-  private final Schema schema;
-
-  private final String elemName;
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/HandlerClassInfo.java b/dev/core/src/com/google/gwt/dev/util/xml/HandlerClassInfo.java
index fbafd2d..5aa0e38 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/HandlerClassInfo.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/HandlerClassInfo.java
@@ -23,6 +23,15 @@
   private static final HandlerMethod[] EMPTY_ARRAY_HANDLERMETHOD = new HandlerMethod[0];
   private static Map sClassInfoMap = new HashMap();
 
+  public static synchronized HandlerClassInfo getClassInfo(Class c) {
+    if (sClassInfoMap.containsKey(c)) {
+      return (HandlerClassInfo) sClassInfoMap.get(c);
+    } else {
+      throw new RuntimeException("The schema class '" + c.getName()
+          + "' should have been registered prior to parsing");
+    }
+  }
+
   public static synchronized void registerClass(Class c) {
     if (sClassInfoMap.containsKey(c)) {
       return;
@@ -36,22 +45,13 @@
     sClassInfoMap.put(c, classInfo);
   }
 
-  public static synchronized HandlerClassInfo getClassInfo(Class c) {
-    if (sClassInfoMap.containsKey(c)) {
-      return (HandlerClassInfo) sClassInfoMap.get(c);
-    } else {
-      throw new RuntimeException("The schema class '" + c.getName()
-        + "' should have been registered prior to parsing");
-    }
-  }
-
   private static HandlerClassInfo createClassInfo(Class c) {
     Map namedHandlerMethods = new HashMap();
     try {
       loadClassInfoRecursive(namedHandlerMethods, c);
     } catch (Exception e) {
       throw new RuntimeException("Unable to use class '" + c.getName()
-        + "' as a handler", e);
+          + "' as a handler", e);
     }
     HandlerClassInfo classInfo = new HandlerClassInfo(namedHandlerMethods);
     return classInfo;
@@ -87,26 +87,26 @@
     }
   }
 
+  private final Map namedHandlerMethods;
+
   // Nobody else can create one.
   private HandlerClassInfo(Map namedHandlerMethods) {
     this.namedHandlerMethods = namedHandlerMethods;
   }
 
-  public HandlerMethod getStartMethod(String localName) {
-    String methodName = "__" + localName.replace('-', '_');
-    return (HandlerMethod) namedHandlerMethods.get(methodName + "_begin");
-  }
-
   public HandlerMethod getEndMethod(String localName) {
     String methodName = "__" + localName.replace('-', '_');
     return (HandlerMethod) namedHandlerMethods.get(methodName + "_end");
   }
 
-  private final Map namedHandlerMethods;
-
   public HandlerMethod[] getHandlerMethods() {
     return (HandlerMethod[]) namedHandlerMethods.values().toArray(
-      EMPTY_ARRAY_HANDLERMETHOD);
+        EMPTY_ARRAY_HANDLERMETHOD);
+  }
+
+  public HandlerMethod getStartMethod(String localName) {
+    String methodName = "__" + localName.replace('-', '_');
+    return (HandlerMethod) namedHandlerMethods.get(methodName + "_begin");
   }
 
   public HandlerMethod getTextMethod() {
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/HandlerMethod.java b/dev/core/src/com/google/gwt/dev/util/xml/HandlerMethod.java
index 55d1749..4a49663 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/HandlerMethod.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/HandlerMethod.java
@@ -63,6 +63,10 @@
   private static final int TYPE_END = 2;
   private static final int TYPE_TEXT = 3;
 
+  static {
+    ReflectiveParser.registerSchemaLevel(sArbitraryChildHandler.getClass());
+  }
+
   /**
    * Attempts to create a handler method from any method. You can pass in any
    * method at all, but an exception will be thrown if the method is clearly a
@@ -79,11 +83,11 @@
         if (methodName.endsWith("_begin")) {
           type = TYPE_BEGIN;
           normalizedTagName = methodName.substring(0, methodName.length()
-            - "_begin".length());
+              - "_begin".length());
         } else if (methodName.endsWith("_end")) {
           type = TYPE_END;
           normalizedTagName = methodName.substring(0, methodName.length()
-            - "_end".length());
+              - "_end".length());
         } else if (methodName.equals("__text")) {
           type = TYPE_TEXT;
         }
@@ -114,11 +118,11 @@
           arbitraryChildren = true;
         } else {
           throw new IllegalArgumentException(
-            "The return type of begin handlers must be 'void' or assignable to 'SchemaLevel'");
+              "The return type of begin handlers must be 'void' or assignable to 'SchemaLevel'");
         }
       } else if (!Void.TYPE.equals(returnType)) {
         throw new IllegalArgumentException(
-          "Only 'void' may be specified as a return type for 'end' and 'text' handlers");
+            "Only 'void' may be specified as a return type for 'end' and 'text' handlers");
       }
 
       // Create handler args.
@@ -127,7 +131,7 @@
         Class[] paramTypes = method.getParameterTypes();
         if (paramTypes.length != 1 || !String.class.equals(paramTypes[0])) {
           throw new IllegalArgumentException(
-            "__text handlers must have exactly one String parameter");
+              "__text handlers must have exactly one String parameter");
         }
 
         // We pretend it doesn't have any param since they're always
@@ -139,25 +143,32 @@
         List handlerParams = new ArrayList();
         for (int i = 0, n = paramTypes.length; i < n; ++i) {
           HandlerParam handlerParam = HandlerParam.create(method,
-            normalizedTagName, i);
+              normalizedTagName, i);
           if (handlerParam != null) {
             handlerParams.add(handlerParam);
           } else {
             throw new IllegalArgumentException("In method '" + method.getName()
-              + "', parameter " + (i + 1) + " is an unsupported type");
+                + "', parameter " + (i + 1) + " is an unsupported type");
           }
         }
 
-        HandlerParam[] hpa = (HandlerParam[]) handlerParams
-          .toArray(EMPTY_HANDLERPARAMS);
+        HandlerParam[] hpa = (HandlerParam[]) handlerParams.toArray(EMPTY_HANDLERPARAMS);
         return new HandlerMethod(method, type, arbitraryChildren, hpa);
       }
     } catch (Exception e) {
       throw new RuntimeException("Unable to use method '" + methodName
-        + "' as a handler", e);
+          + "' as a handler", e);
     }
   }
 
+  private final boolean arbitraryChildren;
+
+  private final HandlerParam[] handlerParams;
+
+  private final Method method;
+
+  private final int methodType;
+
   private HandlerMethod(Method method, int type, boolean arbitraryChildren,
       HandlerParam[] hpa) {
     this.method = method;
@@ -191,23 +202,6 @@
     return handlerParams.length;
   }
 
-  public void invokeText(int lineNumber, String text, Schema target)
-      throws UnableToCompleteException {
-    Throwable caught = null;
-    try {
-      target.setLineNumber(lineNumber);
-      method.invoke(target, new Object[]{text});
-      return;
-    } catch (IllegalArgumentException e) {
-      caught = e;
-    } catch (IllegalAccessException e) {
-      caught = e;
-    } catch (InvocationTargetException e) {
-      caught = e.getTargetException();
-    }
-    target.onHandlerException(lineNumber, "#text", method, caught);
-  }
-
   public Schema invokeBegin(int lineNumber, String elemLocalName,
       Schema target, HandlerArgs args, Object[] outInvokeArgs)
       throws UnableToCompleteException {
@@ -277,6 +271,23 @@
     target.onHandlerException(lineNumber, elem, method, caught);
   }
 
+  public void invokeText(int lineNumber, String text, Schema target)
+      throws UnableToCompleteException {
+    Throwable caught = null;
+    try {
+      target.setLineNumber(lineNumber);
+      method.invoke(target, new Object[] {text});
+      return;
+    } catch (IllegalArgumentException e) {
+      caught = e;
+    } catch (IllegalAccessException e) {
+      caught = e;
+    } catch (InvocationTargetException e) {
+      caught = e.getTargetException();
+    }
+    target.onHandlerException(lineNumber, "#text", method, caught);
+  }
+
   public boolean isEndMethod() {
     return methodType == TYPE_END;
   }
@@ -284,13 +295,4 @@
   public boolean isStartMethod() {
     return methodType == TYPE_BEGIN;
   }
-
-  static {
-    ReflectiveParser.registerSchemaLevel(sArbitraryChildHandler.getClass());
-  }
-
-  private final boolean arbitraryChildren;
-  private final HandlerParam[] handlerParams;
-  private final Method method;
-  private final int methodType;
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/HandlerParam.java b/dev/core/src/com/google/gwt/dev/util/xml/HandlerParam.java
index 3e50bee..f9f0065 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/HandlerParam.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/HandlerParam.java
@@ -41,7 +41,7 @@
 
     if (matchingField == null) {
       throw new IllegalArgumentException("Expecting a meta field with prefix '"
-        + fieldNamePrefix + "'");
+          + fieldNamePrefix + "'");
     }
 
     int under = fieldName.indexOf("_", fieldNamePrefix.length());
@@ -49,8 +49,8 @@
       // Not a valid signature.
       //
       throw new IllegalArgumentException(
-        "Expecting a normalized attribute name suffix (e.g. \"_attr_name\") on field '"
-          + fieldName + "'");
+          "Expecting a normalized attribute name suffix (e.g. \"_attr_name\") on field '"
+              + fieldName + "'");
     }
 
     // Infer the associated attribute name.
@@ -63,17 +63,23 @@
       // Type mismatch.
       //
       throw new IllegalArgumentException("GWT field '" + fieldName
-        + "' must be of type String");
+          + "' must be of type String");
     }
 
     // Instantiate one.
     //
     matchingField.setAccessible(true);
     HandlerParam handlerParam = new HandlerParam(paramType, matchingField,
-      normalizedAttrName);
+        normalizedAttrName);
     return handlerParam;
   }
 
+  private final Class paramType;
+
+  private final Field metaField;
+
+  private final String normalizedAttrName;
+
   private HandlerParam(Class paramType, Field metaField,
       String normalizedAttrName) {
     this.paramType = paramType;
@@ -82,7 +88,7 @@
   }
 
   /**
-   * Called while parsing to get the default value for an attribute. 
+   * Called while parsing to get the default value for an attribute.
    */
   public String getDefaultValue(Schema schema) {
     Throwable caught = null;
@@ -98,9 +104,9 @@
     // which forces us to use this incantation. See the top of
     // {@link java.lang.Throwable} for details.
     //
-    throw (IllegalStateException)new IllegalStateException(
-      "Unable to get attribute default value from meta field '"
-        + metaField.getName() + "'").initCause(caught);
+    throw (IllegalStateException) new IllegalStateException(
+        "Unable to get attribute default value from meta field '"
+            + metaField.getName() + "'").initCause(caught);
   }
 
   public String getNormalizedName() {
@@ -110,8 +116,4 @@
   public Class getParamType() {
     return paramType;
   }
-
-  private final Class paramType;
-  private final Field metaField;
-  private final String normalizedAttrName;
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/Messages.java b/dev/core/src/com/google/gwt/dev/util/xml/Messages.java
index 6580aa2..148b30b 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/Messages.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/Messages.java
@@ -22,29 +22,36 @@
 import com.google.gwt.dev.util.msg.Message3IntStringClass;
 import com.google.gwt.dev.util.msg.Message3StringIntString;
 
+/**
+ * Static XML messages.
+ */
 class Messages {
-  private Messages() {
-  }
-
   public static final Message3IntStringClass XML_ATTRIBUTE_CONVERSION_ERROR = new Message3IntStringClass(
-    TreeLogger.ERROR, "Line $0: Unable to convert attribute '$1' to type '$2'");
+      TreeLogger.ERROR,
+      "Line $0: Unable to convert attribute '$1' to type '$2'");
 
   public static final Message3StringIntString XML_ATTRIBUTE_UNEXPECTED = new Message3StringIntString(
-    TreeLogger.ERROR, "Element '$0' beginning on line $1 contains unexpected attribute '$2'");
+      TreeLogger.ERROR,
+      "Element '$0' beginning on line $1 contains unexpected attribute '$2'");
 
   public static final Message2StringInt XML_CHILDREN_NOT_ALLOWED = new Message2StringInt(
-    TreeLogger.ERROR, "Child element $0 on line $1 is not allowed");
+      TreeLogger.ERROR, "Child element $0 on line $1 is not allowed");
 
   public static final Message2IntString XML_ELEMENT_HANDLER_EXCEPTION = new Message2IntString(
-    TreeLogger.ERROR, "Line $0: Unexpected exception while processing element '$1'");
+      TreeLogger.ERROR,
+      "Line $0: Unexpected exception while processing element '$1'");
 
   public static final Message2IntString XML_ELEMENT_UNEXPECTED = new Message2IntString(
-    TreeLogger.ERROR, "Line $0: Unexpected element '$1'");
+      TreeLogger.ERROR, "Line $0: Unexpected element '$1'");
 
-  public static final Message0 XML_PARSE_FAILED = new Message0(TreeLogger.ERROR,
-    "Failure while parsing XML");
+  public static final Message0 XML_PARSE_FAILED = new Message0(
+      TreeLogger.ERROR, "Failure while parsing XML");
 
   public static final Message3StringIntString XML_REQUIRED_ATTRIBUTE_MISSING = new Message3StringIntString(
-    TreeLogger.ERROR, "Element '$0' beginning on line $1 is missing required attribute '$2'");
+      TreeLogger.ERROR,
+      "Element '$0' beginning on line $1 is missing required attribute '$2'");
+
+  private Messages() {
+  }
 
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/ReflectiveParser.java b/dev/core/src/com/google/gwt/dev/util/xml/ReflectiveParser.java
index 7903c39..5c31158 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/ReflectiveParser.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/ReflectiveParser.java
@@ -47,6 +47,16 @@
 
   private static final class Impl extends DefaultHandler {
 
+    private Locator locator;
+
+    private Reader reader;
+
+    private Stack schemaLevels = new Stack();
+
+    private Stack argStack = new Stack();
+
+    private Schema defaultSchema;
+
     public void characters(char[] ch, int start, int length)
         throws SAXException {
       int lineNumber = locator.getLineNumber();
@@ -184,7 +194,7 @@
           //
           try {
             schemaLevel.onUnexpectedAttribute(lineNumber, elemName, attrName,
-              attrValue);
+                attrValue);
           } catch (UnableToCompleteException e) {
             throw new SAXException(e);
           }
@@ -200,8 +210,8 @@
           // It might throw, but it also might not.
           //
           try {
-            schemaLevel.onMissingAttribute(lineNumber, elemName, args
-              .getArgName(i));
+            schemaLevel.onMissingAttribute(lineNumber, elemName,
+                args.getArgName(i));
           } catch (UnableToCompleteException e) {
             throw new SAXException(e);
           }
@@ -230,7 +240,7 @@
       Schema childSchemaLevel;
       try {
         childSchemaLevel = method.invokeBegin(lineNumber, elemName,
-          schemaLevel, args, invokeArgs);
+            schemaLevel, args, invokeArgs);
       } catch (UnableToCompleteException e) {
         throw new SAXException(e);
       }
@@ -242,6 +252,10 @@
       setArgsAndPushLevel(invokeArgs, childSchemaLevel);
     }
 
+    private Object[] getCurrentArgs() {
+      return (Object[]) argStack.peek();
+    }
+
     private Schema getNextToTopSchemaLevel() {
       return (Schema) schemaLevels.get(schemaLevels.size() - 2);
     }
@@ -250,10 +264,6 @@
       return (Schema) schemaLevels.peek();
     }
 
-    private Object[] getCurrentArgs() {
-      return (Object[]) argStack.peek();
-    }
-
     private void parse(TreeLogger logger, Schema topSchema, Reader reader)
         throws UnableToCompleteException {
       // Set up the parentmost schema which is used to find default converters
@@ -341,12 +351,6 @@
       // The schema for children.
       schemaLevels.push(schemaLevel);
     }
-
-    private Locator locator;
-    private Reader reader;
-    private Stack schemaLevels = new Stack();
-    private Stack argStack = new Stack();
-    private Schema defaultSchema;
   }
 
   public static void parse(TreeLogger logger, Schema schema, Reader reader)
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/Schema.java b/dev/core/src/com/google/gwt/dev/util/xml/Schema.java
index bddc67d..bf9d044 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/Schema.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/Schema.java
@@ -21,15 +21,23 @@
 import java.util.HashMap;
 import java.util.Map;
 
+/**
+ * Abstract base class for reflection-based push-parsing of XML.
+ */
 public abstract class Schema {
 
+  private final Map convertersByType = new HashMap();
+
+  private Schema parent;
+
+  private int lineNumber;
+
   /**
    * Finds the most recent converter in the schema chain that can convert the
    * specified type.
    */
   public AttributeConverter getAttributeConverter(Class type) {
-    AttributeConverter converter = (AttributeConverter) convertersByType
-      .get(type);
+    AttributeConverter converter = (AttributeConverter) convertersByType.get(type);
     if (converter != null) {
       return converter;
     } else if (parent != null) {
@@ -37,7 +45,7 @@
     }
 
     throw new IllegalStateException(
-      "Unable to find an attribute converter for type " + type.getName());
+        "Unable to find an attribute converter for type " + type.getName());
   }
 
   public int getLineNumber() {
@@ -98,8 +106,4 @@
   public void setParent(Schema parent) {
     this.parent = parent;
   }
-
-  private final Map convertersByType = new HashMap();
-  private Schema parent;
-  private int lineNumber;
 }
diff --git a/dev/core/src/com/google/gwt/util/tools/ArgHandlerExtra.java b/dev/core/src/com/google/gwt/util/tools/ArgHandlerExtra.java
index 523dc3b..dbe1984 100644
--- a/dev/core/src/com/google/gwt/util/tools/ArgHandlerExtra.java
+++ b/dev/core/src/com/google/gwt/util/tools/ArgHandlerExtra.java
@@ -20,6 +20,8 @@
  */
 public abstract class ArgHandlerExtra extends ArgHandler {
 
+  public abstract boolean addExtraArg(String arg);
+
   public String[] getDefaultArgs() {
     return null;
   }
@@ -40,6 +42,4 @@
     return false;
   }
 
-  public abstract boolean addExtraArg(String arg);
-
 }
diff --git a/dev/core/src/com/google/gwt/util/tools/ArgHandlerOutDir.java b/dev/core/src/com/google/gwt/util/tools/ArgHandlerOutDir.java
index 1c10b71..ea4f7a9 100644
--- a/dev/core/src/com/google/gwt/util/tools/ArgHandlerOutDir.java
+++ b/dev/core/src/com/google/gwt/util/tools/ArgHandlerOutDir.java
@@ -20,6 +20,10 @@
  */
 public abstract class ArgHandlerOutDir extends ArgHandlerDir {
 
+  public String[] getDefaultArgs() {
+    return new String[] {"-out", System.getProperty("user.dir")};
+  }
+
   public String getPurpose() {
     return "The directory to write output files into (defaults to current)";
   }
@@ -28,8 +32,4 @@
     return "-out";
   }
 
-  public String[] getDefaultArgs() {
-    return new String[]{"-out", System.getProperty("user.dir")};
-  }
-
 }
diff --git a/dev/core/src/com/google/gwt/util/tools/ToolBase.java b/dev/core/src/com/google/gwt/util/tools/ToolBase.java
index 8d846e3..f1f5376 100644
--- a/dev/core/src/com/google/gwt/util/tools/ToolBase.java
+++ b/dev/core/src/com/google/gwt/util/tools/ToolBase.java
@@ -51,6 +51,25 @@
  */
 public abstract class ToolBase {
 
+  static {
+    String installPath = Utility.getInstallPath();
+    try {
+      // try to make absolute
+      installPath = new File(installPath).getCanonicalPath();
+    } catch (IOException e) {
+      // ignore problems, failures will occur when the libs try to load
+    }
+    System.setProperty("swt.library.path", installPath + '/');
+  }
+
+  // Use a tree map to sort the order.
+  //
+  private final Map argHandlers = new TreeMap();
+
+  // Use a list to preserve the declared order for help printing.
+  //
+  private final List orderedArgHandlers = new ArrayList();
+
   protected void printHelp() {
     System.err.println(About.GWT_VERSION);
 
@@ -271,23 +290,4 @@
     orderedArgHandlers.add(handler);
     argHandlers.put(tag != null ? tag : "", handler);
   }
-
-  static {
-    String installPath = Utility.getInstallPath();
-    try {
-      // try to make absolute
-      installPath = new File(installPath).getCanonicalPath();
-    } catch (IOException e) {
-      // ignore problems, failures will occur when the libs try to load
-    }
-    System.setProperty("swt.library.path", installPath + '/');
-  }
-
-  // Use a tree map to sort the order.
-  //
-  private final Map argHandlers = new TreeMap();
-
-  // Use a list to preserve the declared order for help printing.
-  //
-  private final List orderedArgHandlers = new ArrayList();
 }