General polish on ArgHandlerLogLevel to use strong types; also computing valid options from the enum instead of hard coding.

Review by: jat (desk check)


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1723 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/GWTShell.java b/dev/core/src/com/google/gwt/dev/GWTShell.java
index a009e2c..be9390d 100644
--- a/dev/core/src/com/google/gwt/dev/GWTShell.java
+++ b/dev/core/src/com/google/gwt/dev/GWTShell.java
@@ -292,7 +292,7 @@
 
     /**
      * Load a module.
-     *
+     * 
      * @param moduleName name of the module to load
      * @param logger TreeLogger to use
      * @return the loaded module
@@ -420,8 +420,8 @@
 
     registerHandler(new ArgHandlerLogLevel() {
       @Override
-      public String[] getDefaultArgs() {
-        return new String[] {getTag(), doGetDefaultLogLevel()};
+      protected Type getDefaultLogLevel() {
+        return doGetDefaultLogLevel();
       }
 
       @Override
@@ -670,8 +670,8 @@
    * Can be override to change the default log level in subclasses. JUnit does
    * this for example.
    */
-  protected String doGetDefaultLogLevel() {
-    return "INFO";
+  protected Type doGetDefaultLogLevel() {
+    return Type.INFO;
   }
 
   /**
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLogLevel.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLogLevel.java
index b79675f..ee08e85 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLogLevel.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLogLevel.java
@@ -20,16 +20,33 @@
 import com.google.gwt.util.tools.ArgHandler;
 
 /**
- * Arugment handler for processing the log level flag.
+ * Argument handler for processing the log level flag.
  */
 public abstract class ArgHandlerLogLevel extends ArgHandler {
 
-  public String[] getDefaultArgs() {
-    return new String[]{getTag(), "INFO"};
+  private static final String OPTIONS_STRING = computeOptionsString();
+
+  private static String computeOptionsString() {
+    StringBuffer sb = new StringBuffer();
+    Type[] values = Type.values();
+    for (int i = 0, c = values.length; i < c; ++i) {
+      if (i > 0) {
+        sb.append(", ");
+      }
+      if (i + 1 == c) {
+        sb.append("or ");
+      }
+      sb.append(values[i].name());
+    }
+    return sb.toString();
+  }
+
+  public final String[] getDefaultArgs() {
+    return new String[] {getTag(), getDefaultLogLevel().name()};
   }
 
   public String getPurpose() {
-    return "The level of logging detail: ERROR, WARN, INFO, TRACE, DEBUG, SPAM, or ALL";
+    return "The level of logging detail: " + OPTIONS_STRING;
   }
 
   public String getTag() {
@@ -37,23 +54,29 @@
   }
 
   public String[] getTagArgs() {
-    return new String[]{"level"};
+    return new String[] {"level"};
   }
 
   public int handle(String[] args, int startIndex) {
     if (startIndex + 1 < args.length) {
-      TreeLogger.Type level = TreeLogger.Type.valueOf(args[startIndex + 1]);
-      if (level != null) {
+      try {
+        Type level = Type.valueOf(args[startIndex + 1]);
         setLogLevel(level);
         return 1;
+      } catch (IllegalArgumentException e) {
+        // Argument did not match any enum value; fall through to error case.
       }
     }
 
     System.err.println(getTag() + " should be followed by one of");
-    System.err.println("  ERROR, WARN, INFO, TRACE, DEBUG, SPAM, or ALL");
+    System.err.println("  " + OPTIONS_STRING);
     return -1;
   }
 
   public abstract void setLogLevel(Type level);
 
+  protected Type getDefaultLogLevel() {
+    return Type.INFO;
+  }
+
 }
diff --git a/user/src/com/google/gwt/junit/JUnitShell.java b/user/src/com/google/gwt/junit/JUnitShell.java
index 2237ccd..9249024 100644
--- a/user/src/com/google/gwt/junit/JUnitShell.java
+++ b/user/src/com/google/gwt/junit/JUnitShell.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.core.ext.TreeLogger.Type;
 import com.google.gwt.dev.BootStrapPlatform;
 import com.google.gwt.dev.GWTShell;
 import com.google.gwt.dev.cfg.ModuleDef;
@@ -352,8 +353,8 @@
   }
 
   @Override
-  protected String doGetDefaultLogLevel() {
-    return "WARN";
+  protected Type doGetDefaultLogLevel() {
+    return Type.WARN;
   }
 
   /**