Enable generator result caching, by default.

This initially will allow caching for ClientBundle and RPC generators.  Other generators can be updated to support caching.

The -XenableGeneratorResultCaching flag is now redundant, but it is still
allowed.  It should eventually be phased out.

To allow diabling caching if needed, the system property
"gwt.disableGeneratorResultCaching" is now available.

Review at http://gwt-code-reviews.appspot.com/1467808


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10411 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/DevModeBase.java b/dev/core/src/com/google/gwt/dev/DevModeBase.java
index 1ffc4be..69d575b 100644
--- a/dev/core/src/com/google/gwt/dev/DevModeBase.java
+++ b/dev/core/src/com/google/gwt/dev/DevModeBase.java
@@ -69,13 +69,13 @@
  * any GUI dependencies.
  */
 public abstract class DevModeBase implements DoneCallback {
-
   /**
    * Implementation of BrowserWidgetHost that supports the abstract UI
    * interface.
    */
   public class UiBrowserWidgetHostImpl implements BrowserWidgetHost {
 
+    @Override
     public ModuleHandle createModuleLogger(String moduleName, String userAgent, String url,
         String tabKey, String sessionKey, BrowserChannelServer serverChannel, byte[] userAgentIcon) {
       if (sessionKey == null) {
@@ -91,6 +91,7 @@
       return module;
     }
 
+    @Override
     public ModuleSpaceHost createModuleSpaceHost(ModuleHandle module, String moduleName)
         throws UnableToCompleteException {
       Event moduleSpaceHostCreateEvent =
@@ -477,34 +478,42 @@
     private int remoteUIHostPort;
     private final List<String> startupURLs = new ArrayList<String>();
 
+    @Override
     public void addStartupURL(String url) {
       startupURLs.add(url);
     }
 
+    @Override
     public boolean alsoLogToFile() {
       return logDir != null;
     }
 
+    @Override
     public String getBindAddress() {
       return bindAddress;
     }
 
+    @Override
     public String getClientId() {
       return remoteUIClientId;
     }
 
+    @Override
     public int getCodeServerPort() {
       return codeServerPort;
     }
 
+    @Override
     public String getConnectAddress() {
       return connectAddress;
     }
 
+    @Override
     public File getLogDir() {
       return logDir;
     }
 
+    @Override
     public File getLogFile(String sublog) {
       if (logDir == null) {
         return null;
@@ -512,62 +521,77 @@
       return new File(logDir, sublog);
     }
 
+    @Override
     public int getPort() {
       return port;
     }
 
+    @Override
     public String getRemoteUIHost() {
       return remoteUIHost;
     }
 
+    @Override
     public int getRemoteUIHostPort() {
       return remoteUIHostPort;
     }
 
+    @Override
     public List<String> getStartupURLs() {
       return Collections.unmodifiableList(startupURLs);
     }
 
+    @Override
     public boolean isNoServer() {
       return isNoServer;
     }
 
+    @Override
     public void setBindAddress(String bindAddress) {
       this.bindAddress = bindAddress;
     }
 
+    @Override
     public void setClientId(String clientId) {
       this.remoteUIClientId = clientId;
     }
 
+    @Override
     public void setCodeServerPort(int port) {
       codeServerPort = port;
     }
 
+    @Override
     public void setConnectAddress(String connectAddress) {
       this.connectAddress = connectAddress;
     }
 
+    @Override
     public void setLogFile(String filename) {
       logDir = new File(filename);
     }
 
+    @Override
     public void setNoServer(boolean isNoServer) {
       this.isNoServer = isNoServer;
     }
 
+    @Override
     public void setPort(int port) {
       this.port = port;
     }
 
+    @Override
     public void setRemoteUIHost(String remoteUIHost) {
       this.remoteUIHost = remoteUIHost;
     }
 
+    @Override
     public void setRemoteUIHostPort(int remoteUIHostPort) {
       this.remoteUIHostPort = remoteUIHostPort;
     }
 
+    @Override
     public boolean useRemoteUI() {
       return remoteUIHost != null;
     }
@@ -668,7 +692,7 @@
       registerHandler(new ArgHandlerPort(options));
       registerHandler(new ArgHandlerWhitelist());
       registerHandler(new ArgHandlerBlacklist());
-      registerHandler(new ArgHandlerEnableGeneratorResultCaching(options));
+      registerHandler(new ArgHandlerEnableGeneratorResultCaching());
       registerHandler(new ArgHandlerLogDir(options));
       registerHandler(new ArgHandlerLogLevel(options));
       registerHandler(new ArgHandlerGenDir(options));
@@ -678,6 +702,9 @@
     }
   }
 
+  private static final boolean generatorResultCachingDisabled =
+      (System.getProperty("gwt.disableGeneratorResultCaching") != null);
+
   private static final Random RNG = new Random();
 
   public static String normalizeURL(String unknownUrlText, boolean isHttps, int port, String host) {
@@ -793,6 +820,7 @@
   /**
    * Callback for the UI to indicate it is done.
    */
+  @Override
   public void onDone() {
     setDone();
   }
@@ -1114,6 +1142,7 @@
       throws UnableToCompleteException {
     final StandardLinkerContext linkerContext = link(logger, module);
     return new ArtifactAcceptor() {
+      @Override
       public void accept(TreeLogger relinkLogger, ArtifactSet newArtifacts)
           throws UnableToCompleteException {
         relink(relinkLogger, linkerContext, module, newArtifacts);
@@ -1160,7 +1189,7 @@
 
   private RebindCache getRebindCache(String moduleName) {
 
-    if (!options.isGeneratorResultCachingEnabled()) {
+    if (generatorResultCachingDisabled) {
       return null;
     }
 
diff --git a/dev/core/src/com/google/gwt/dev/PrecompileTaskOptionsImpl.java b/dev/core/src/com/google/gwt/dev/PrecompileTaskOptionsImpl.java
index cf99d31..7abf8b5 100644
--- a/dev/core/src/com/google/gwt/dev/PrecompileTaskOptionsImpl.java
+++ b/dev/core/src/com/google/gwt/dev/PrecompileTaskOptionsImpl.java
@@ -103,11 +103,6 @@
   }
 
   @Override
-  public boolean isGeneratorResultCachingEnabled() {
-    return jjsOptions.isGeneratorResultCachingEnabled();
-  }
-
-  @Override
   public boolean isOptimizePrecompile() {
     return jjsOptions.isOptimizePrecompile();
   }
@@ -188,11 +183,6 @@
   }
 
   @Override
-  public void setGeneratorResultCachingEnabled(boolean enabled) {
-    jjsOptions.setGeneratorResultCachingEnabled(enabled);
-  }
-
-  @Override
   public void setMaxPermsPerPrecompile(int maxPermsPerPrecompile) {
     this.maxPermsPerPrecompile = maxPermsPerPrecompile;
   }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java b/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
index 886a312..fc13cde 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JJSOptions.java
@@ -19,7 +19,6 @@
 import com.google.gwt.dev.util.arg.OptionDisableCastChecking;
 import com.google.gwt.dev.util.arg.OptionDisableClassMetadata;
 import com.google.gwt.dev.util.arg.OptionEnableAssertions;
-import com.google.gwt.dev.util.arg.OptionEnableGeneratorResultCaching;
 import com.google.gwt.dev.util.arg.OptionOptimize;
 import com.google.gwt.dev.util.arg.OptionOptimizePrecompile;
 import com.google.gwt.dev.util.arg.OptionRunAsyncEnabled;
@@ -34,8 +33,7 @@
  */
 public interface JJSOptions extends OptionOptimize, OptionAggressivelyOptimize,
     OptionDisableClassMetadata, OptionDisableCastChecking, OptionEnableAssertions,
-    OptionEnableGeneratorResultCaching, OptionRunAsyncEnabled, OptionScriptStyle,
-    OptionSoycEnabled, OptionSoycDetailed, OptionOptimizePrecompile, OptionStrict,
-    OptionSoycHtmlDisabled {
+    OptionRunAsyncEnabled, OptionScriptStyle, OptionSoycEnabled, OptionSoycDetailed,
+    OptionOptimizePrecompile, OptionStrict, OptionSoycHtmlDisabled {
 
 }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java b/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java
index 417f6fa..d3abb04 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JJSOptionsImpl.java
@@ -29,7 +29,6 @@
   private boolean disableCastChecking = false;
   private boolean disableClassMetadata = false;
   private boolean enableAssertions;
-  private boolean enableGeneratorResultCaching = false;
   private int optimizationLevel = OptionOptimize.OPTIMIZE_LEVEL_MAX;
   private boolean optimizePrecompile = false;
   private JsOutputOption output = JsOutputOption.OBFUSCATED;
@@ -52,7 +51,6 @@
     setClassMetadataDisabled(other.isClassMetadataDisabled());
     setCompilerMetricsEnabled(other.isCompilerMetricsEnabled());
     setEnableAssertions(other.isEnableAssertions());
-    setGeneratorResultCachingEnabled(other.isGeneratorResultCachingEnabled());
     setOptimizationLevel(other.getOptimizationLevel());
     setOutput(other.getOutput());
     setRunAsyncEnabled(other.isRunAsyncEnabled());
@@ -62,26 +60,32 @@
     setStrict(other.isStrict());
   }
 
+  @Override
   public int getOptimizationLevel() {
     return optimizationLevel;
   }
 
+  @Override
   public JsOutputOption getOutput() {
     return output;
   }
 
+  @Override
   public boolean isAggressivelyOptimize() {
     return aggressivelyOptimize;
   }
 
+  @Override
   public boolean isCastCheckingDisabled() {
     return disableCastChecking;
   }
 
+  @Override
   public boolean isClassMetadataDisabled() {
     return disableClassMetadata;
   }
 
+  @Override
   public boolean isCompilerMetricsEnabled() {
     return compilerMetricsEnabled;
   }
@@ -90,90 +94,102 @@
     return optimizationLevel == OptionOptimize.OPTIMIZE_LEVEL_DRAFT;
   }
 
+  @Override
   public boolean isEnableAssertions() {
     return enableAssertions;
   }
 
-  public boolean isGeneratorResultCachingEnabled() {
-    return enableGeneratorResultCaching;
-  }
-
+  @Override
   public boolean isOptimizePrecompile() {
     return optimizePrecompile;
   }
 
+  @Override
   public boolean isRunAsyncEnabled() {
     return runAsyncEnabled;
   }
 
+  @Override
   public boolean isSoycEnabled() {
     return soycEnabled;
   }
 
+  @Override
   public boolean isSoycExtra() {
     return soycExtra;
   }
   
+  @Override
   public boolean isSoycHtmlDisabled() {
     return soycHtmlDisabled;
   }
 
+  @Override
   public boolean isStrict() {
     return strict;
   }
 
+  @Override
   public void setAggressivelyOptimize(boolean aggressivelyOptimize) {
     this.aggressivelyOptimize = aggressivelyOptimize;
   }
 
+  @Override
   public void setCastCheckingDisabled(boolean disabled) {
     disableCastChecking = disabled;
   }
 
+  @Override
   public void setClassMetadataDisabled(boolean disabled) {
     disableClassMetadata = disabled;
   }
 
+  @Override
   public void setCompilerMetricsEnabled(boolean enabled) {
     this.compilerMetricsEnabled = enabled;
   }
 
+  @Override
   public void setEnableAssertions(boolean enableAssertions) {
     this.enableAssertions = enableAssertions;
   }
 
-  public void setGeneratorResultCachingEnabled(boolean enabled) {
-    this.enableGeneratorResultCaching = enabled;
-  }
-
+  @Override
   public void setOptimizationLevel(int level) {
     optimizationLevel = level;
   }
 
+  @Override
   public void setOptimizePrecompile(boolean optimize) {
     optimizePrecompile = optimize;
   }
 
+  @Override
   public void setOutput(JsOutputOption output) {
     this.output = output;
   }
 
+  @Override
   public void setRunAsyncEnabled(boolean enabled) {
     runAsyncEnabled = enabled;
   }
 
+  @Override
   public void setSoycEnabled(boolean enabled) {
     soycEnabled = enabled;
   }
 
+  @Override
   public void setSoycExtra(boolean enabled) {
     soycExtra = enabled;
   }
   
+  @Override
   public void setSoycHtmlDisabled(boolean disabled) {
     soycHtmlDisabled = disabled;
   }
 
+  @Override
   public void setStrict(boolean strict) {
     this.strict = strict;
   }
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerEnableGeneratorResultCaching.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerEnableGeneratorResultCaching.java
index b9b8f29..9825457 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerEnableGeneratorResultCaching.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerEnableGeneratorResultCaching.java
@@ -19,18 +19,19 @@
 
 /**
  * An ArgHandler to provide the -XenableGeneratorResultCaching flag.
+ * 
+ * Note: This is no longer needed since generator result caching is now enabled by default.
+ * It's left here for an interim period, so that uses of the flag can be removed.
+ * TODO(jbrosenberg): remove this after interim period.
  */
 public class ArgHandlerEnableGeneratorResultCaching extends ArgHandlerFlag {
 
-  private final OptionEnableGeneratorResultCaching option;
-
-  public ArgHandlerEnableGeneratorResultCaching(OptionEnableGeneratorResultCaching option) {
-    this.option = option;
+  public ArgHandlerEnableGeneratorResultCaching() {
   }
 
   @Override
   public String getPurpose() {
-    return "EXPERIMENTAL: enables generator result caching, for those generators that implement it";
+    return "Enables generator result caching, for those generators that implement it";
   }
 
   @Override
@@ -45,7 +46,6 @@
  
   @Override
   public boolean setFlag() {
-    option.setGeneratorResultCachingEnabled(true);
     return true;
   }
 }
diff --git a/user/src/com/google/gwt/junit/JUnitShell.java b/user/src/com/google/gwt/junit/JUnitShell.java
index d20427c..eb9b112 100644
--- a/user/src/com/google/gwt/junit/JUnitShell.java
+++ b/user/src/com/google/gwt/junit/JUnitShell.java
@@ -42,7 +42,6 @@
 import com.google.gwt.dev.util.arg.ArgHandlerDisableUpdateCheck;
 import com.google.gwt.dev.util.arg.ArgHandlerDraftCompile;
 import com.google.gwt.dev.util.arg.ArgHandlerEnableAssertions;
-import com.google.gwt.dev.util.arg.ArgHandlerEnableGeneratorResultCaching;
 import com.google.gwt.dev.util.arg.ArgHandlerExtraDir;
 import com.google.gwt.dev.util.arg.ArgHandlerGenDir;
 import com.google.gwt.dev.util.arg.ArgHandlerLocalWorkers;
@@ -191,7 +190,6 @@
       registerHandler(new ArgHandlerDisableRunAsync(options));
       registerHandler(new ArgHandlerDisableUpdateCheck(options));
       registerHandler(new ArgHandlerDraftCompile(options));
-      registerHandler(new ArgHandlerEnableGeneratorResultCaching(options));
       registerHandler(new ArgHandlerMaxPermsPerPrecompile(options));
       registerHandler(new ArgHandlerLocalWorkers(options));