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;
}
/**