Adding -da flag to disable assertions, and flipping the default for tests 
to have assertions on unless -da is used.

Patch by: flin
Review by: fabbott



git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5726 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 53924db..54243ee 100644
--- a/dev/core/src/com/google/gwt/dev/GWTShell.java
+++ b/dev/core/src/com/google/gwt/dev/GWTShell.java
@@ -90,7 +90,7 @@
   /**
    * Concrete class to implement all shell options.
    */
-  static class ShellOptionsImpl extends HostedModeBaseOptionsImpl implements
+  protected static class ShellOptionsImpl extends HostedModeBaseOptionsImpl implements
       HostedModeBaseOptions, WorkDirs, LegacyCompilerOptions {
     private int localWorkers;
     private File outDir;
diff --git a/dev/core/src/com/google/gwt/dev/HostedModeBase.java b/dev/core/src/com/google/gwt/dev/HostedModeBase.java
index 9d1d7cc..1a1f59e 100644
--- a/dev/core/src/com/google/gwt/dev/HostedModeBase.java
+++ b/dev/core/src/com/google/gwt/dev/HostedModeBase.java
@@ -32,6 +32,7 @@
 import com.google.gwt.dev.shell.ShellModuleSpaceHost;
 import com.google.gwt.dev.util.Util;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableAggressiveOptimization;
+import com.google.gwt.dev.util.arg.ArgHandlerDisableAssertions;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableCastChecking;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableClassMetadata;
 import com.google.gwt.dev.util.arg.ArgHandlerDraftCompile;
@@ -321,6 +322,7 @@
       registerHandler(new ArgHandlerGenDir(options));
       registerHandler(new ArgHandlerScriptStyle(options));
       registerHandler(new ArgHandlerEnableAssertions(options));
+      registerHandler(new ArgHandlerDisableAssertions(options));
       registerHandler(new ArgHandlerDisableAggressiveOptimization(options));
       registerHandler(new ArgHandlerDisableClassMetadata(options));
       registerHandler(new ArgHandlerDisableCastChecking(options));
diff --git a/dev/core/src/com/google/gwt/dev/Precompile.java b/dev/core/src/com/google/gwt/dev/Precompile.java
index 5c28b9e..aefc3d7 100644
--- a/dev/core/src/com/google/gwt/dev/Precompile.java
+++ b/dev/core/src/com/google/gwt/dev/Precompile.java
@@ -43,6 +43,7 @@
 import com.google.gwt.dev.util.PerfLogger;
 import com.google.gwt.dev.util.Util;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableAggressiveOptimization;
+import com.google.gwt.dev.util.arg.ArgHandlerDisableAssertions;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableCastChecking;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableClassMetadata;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableRunAsync;
@@ -94,6 +95,7 @@
       registerHandler(new ArgHandlerGenDir(options));
       registerHandler(new ArgHandlerScriptStyle(options));
       registerHandler(new ArgHandlerEnableAssertions(options));
+      registerHandler(new ArgHandlerDisableAssertions(options));
       registerHandler(new ArgHandlerDisableAggressiveOptimization(options));
       registerHandler(new ArgHandlerDisableClassMetadata(options));
       registerHandler(new ArgHandlerDisableCastChecking(options));
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableAssertions.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableAssertions.java
new file mode 100644
index 0000000..cd6be03
--- /dev/null
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableAssertions.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.dev.util.arg;
+
+import com.google.gwt.util.tools.ArgHandlerFlag;
+
+/**
+ * Handler for -da arg to disable assertions in compiled code.
+ */
+public final class ArgHandlerDisableAssertions extends ArgHandlerFlag {
+
+  private final OptionEnableAssertions option;
+
+  public ArgHandlerDisableAssertions(OptionEnableAssertions option) {
+    this.option = option;
+  }
+
+  @Override
+  public String getPurpose() {
+    return "Debugging: disables checking assertion statements in the compiled output.";
+  }
+
+  @Override
+  public String getTag() {
+    return "-da";
+  }
+
+  @Override
+  public boolean setFlag() {
+    option.setEnableAssertions(false);
+    return true;
+  }
+
+}
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerEnableAssertions.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerEnableAssertions.java
index 9697b1c..b2e2f90 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerEnableAssertions.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerEnableAssertions.java
@@ -30,7 +30,7 @@
 
   @Override
   public String getPurpose() {
-    return "Debugging: causes the compiled output to check assert statements.";
+    return "Debugging: enables checking assertion statements in the compiled output.";
   }
 
   @Override
diff --git a/dev/core/test/com/google/gwt/dev/GWTShellTest.java b/dev/core/test/com/google/gwt/dev/GWTShellTest.java
index 29ab059..1e46da0 100644
--- a/dev/core/test/com/google/gwt/dev/GWTShellTest.java
+++ b/dev/core/test/com/google/gwt/dev/GWTShellTest.java
@@ -76,6 +76,16 @@
     assertEquals("foo", options.getStartupURLs().get(1));
   }
 
+  public void testAssertionsArgs() {
+    // Assertion is enabled by default in web mode, i.e. -ea flag.
+    assertProcessSuccess(argProcessor, "-ea");
+    assertTrue(options.isEnableAssertions());
+    assertProcessSuccess(argProcessor, "-da");
+    assertFalse(options.isEnableAssertions());   
+    assertProcessSuccess(argProcessor, "-ea");
+    assertTrue(options.isEnableAssertions());
+  }
+
   public void testDefaultArgs() {
     assertProcessSuccess(argProcessor);
 
diff --git a/user/src/com/google/gwt/junit/JUnitShell.java b/user/src/com/google/gwt/junit/JUnitShell.java
index 82cc08a..3f69af0 100644
--- a/user/src/com/google/gwt/junit/JUnitShell.java
+++ b/user/src/com/google/gwt/junit/JUnitShell.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -52,26 +52,26 @@
 /**
  * This class is responsible for hosting JUnit test case execution. There are
  * three main pieces to the JUnit system.
- * 
+ *
  * <ul>
  * <li>Test environment</li>
  * <li>Client classes</li>
  * <li>Server classes</li>
  * </ul>
- * 
+ *
  * <p>
  * The test environment consists of this class and the non-translatable version
  * of {@link com.google.gwt.junit.client.GWTTestCase}. These two classes
  * integrate directly into the real JUnit test process.
  * </p>
- * 
+ *
  * <p>
  * The client classes consist of the translatable version of {@link
  * com.google.gwt.junit.client.GWTTestCase}, translatable JUnit classes, and the
  * user's own {@link com.google.gwt.junit.client.GWTTestCase}-derived class.
  * The client communicates to the server via RPC.
  * </p>
- * 
+ *
  * <p>
  * The server consists of {@link com.google.gwt.junit.server.JUnitHostImpl}, an
  * RPC servlet which communicates back to the test environment through a
@@ -351,7 +351,7 @@
   /**
    * Called by {@link com.google.gwt.junit.server.JUnitHostImpl} to get an
    * interface into the test process.
-   * 
+   *
    * @return The {@link JUnitMessageQueue} interface that belongs to the
    *         singleton {@link JUnitShell}, or <code>null</code> if no such
    *         singleton exists.
@@ -522,6 +522,9 @@
     if (System.getProperty(PROP_JUNIT_HYBRID_MODE) != null) {
       runStyle = new RunStyleLocalWeb(this);
     }
+    // If no explicit disable argument presented,
+    // Enables assertions by default in all tests
+    options.setEnableAssertions(true);
   }
 
   @Override