Add -helpfull and -?? to command-line tools

Change-Id: I18f91d3b58b21395f8bde970edabd4d9edb238cb
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 ce201ec..6d5baa2 100644
--- a/dev/core/src/com/google/gwt/util/tools/ToolBase.java
+++ b/dev/core/src/com/google/gwt/util/tools/ToolBase.java
@@ -84,6 +84,10 @@
   }
 
   protected void printHelp() {
+    printHelp(false);
+  }
+
+  protected void printHelp(boolean includeUndocumented) {
     System.err.println(About.getGwtVersion());
 
     Set<ArgHandler> uniqueArgHandlers = new LinkedHashSet<ArgHandler>(argHandlers.values());
@@ -120,7 +124,7 @@
     // Print the command-line template.
     //
     for (ArgHandler handler : uniqueArgHandlers) {
-      if (handler.isUndocumented()) {
+      if (!includeUndocumented && handler.isUndocumented()) {
         continue;
       }
       String helpTag = handler.getHelpTag();
@@ -137,7 +141,7 @@
 
     // Print the flagless args.
     //
-    if (nullHandler != null && !nullHandler.isUndocumented()) {
+    if (nullHandler != null && (!nullHandler.isUndocumented() || includeUndocumented)) {
       String[] tagArgs = nullHandler.getTagArgs();
       for (String element : tagArgs) {
         System.err.print(nullHandler.isRequired() ? " " : " [");
@@ -159,7 +163,7 @@
     // Print the details.
     //
     for (ArgHandler handler : uniqueArgHandlers) {
-      if (handler.isUndocumented()) {
+      if (!includeUndocumented && handler.isUndocumented()) {
         continue;
       }
       String helpTag = handler.getHelpTag();
@@ -178,7 +182,7 @@
 
     // And details for the "extra" args, if any.
     //
-    if (nullHandler != null && !nullHandler.isUndocumented()) {
+    if (nullHandler != null && (!nullHandler.isUndocumented() || includeUndocumented)) {
       System.err.println("and ");
       String tagArg = nullHandler.getTagArgs()[0];
       int len = tagArg.length();
@@ -198,14 +202,19 @@
 
     if (args.length > 0) {
       boolean help = false;
+      boolean helpUndocumented = false;
       if ("-help".equalsIgnoreCase(args[0])) {
         help = true;
       } else if ("-?".equals(args[0])) {
         help = true;
+      } else if ("-helpfull".equalsIgnoreCase(args[0])) {
+        help = helpUndocumented = true;
+      } else if ("-??".equals(args[0])) {
+        help = helpUndocumented = true;
       }
 
       if (help) {
-        printHelp();
+        printHelp(helpUndocumented);
         return false;
       }
     }