Reviewers: rice+legacy,

Description:
Hi Dan, small review: this is what I was getting at about merging the
module pinning and "no refresh on first load" together.

Please review this at http://gwt-code-reviews.appspot.com/106805

Affected files:
   dev/core/src/com/google/gwt/dev/DevMode.java
   dev/core/src/com/google/gwt/dev/DevModeBase.java


Index: dev/core/src/com/google/gwt/dev/DevMode.java
--- dev/core/src/com/google/gwt/dev/DevMode.java        (revision 7037)
+++ dev/core/src/com/google/gwt/dev/DevMode.java        (working copy)
@@ -38,6 +38,8 @@ import com.google.gwt.util.tools.Utility;
  import java.io.File;
  import java.io.IOException;
  import java.net.BindException;
+import java.util.HashMap;
+import java.util.Map;

  /**
   * The main executable class for the hosted mode shell. NOTE: the public  
API for
@@ -254,6 +256,8 @@ public class DevMode extends DevModeBase implements  
RestartServerCallback {
     */
    private ServletContainer server;

+  private final Map<String, ModuleDef> startupModules = new  
HashMap<String, ModuleDef>();
+
    /**
     * Tracks whether we created a temp workdir that we need to destroy.
     */
@@ -379,6 +383,16 @@ public class DevMode extends DevModeBase implements  
RestartServerCallback {
    }

    @Override
+  protected ModuleDef loadModule(TreeLogger logger, String moduleName,
+      boolean refresh) throws UnableToCompleteException {
+    if (startupModules.containsKey(moduleName)) {
+      // First load of a startup module; remove from list, no need to  
refresh.
+      return startupModules.remove(moduleName);
+    }
+    return super.loadModule(logger, moduleName, refresh);
+  }
+
+  @Override
    protected synchronized void produceOutput(TreeLogger logger,
        StandardLinkerContext linkerStack, ArtifactSet artifacts,
        ModuleDef module, boolean isRelink) throws UnableToCompleteException  
{
Index: dev/core/src/com/google/gwt/dev/DevModeBase.java
--- dev/core/src/com/google/gwt/dev/DevModeBase.java    (revision 7037)
+++ dev/core/src/com/google/gwt/dev/DevModeBase.java    (working copy)
@@ -54,11 +54,9 @@ import java.net.URL;
  import java.util.ArrayList;
  import java.util.Collections;
  import java.util.HashMap;
-import java.util.HashSet;
  import java.util.List;
  import java.util.Map;
  import java.util.Random;
-import java.util.Set;
  import java.util.concurrent.Semaphore;
  import java.util.concurrent.atomic.AtomicLong;

@@ -97,8 +95,6 @@ abstract class DevModeBase implements DoneCallback {
          // Try to find an existing loaded version of the module def.
          ModuleDef moduleDef = loadModule(logger, moduleName, true);
          assert (moduleDef != null);
-        // Release the hard reference to the module if it is present.
-        startupModules.remove(moduleDef.getName());

          ShellModuleSpaceHost host = doCreateShellModuleSpaceHost(logger,
              moduleDef.getCompilationState(logger), moduleDef);
@@ -570,8 +566,6 @@ abstract class DevModeBase implements DoneCallback {
      }
    }

-  protected static final Map<String, ModuleDef> startupModules = new  
HashMap<String, ModuleDef>();
-
    private static final Random RNG = new Random();

    private static final AtomicLong uniqueId = new AtomicLong();
@@ -650,14 +644,6 @@ abstract class DevModeBase implements DoneCallback {

    protected DevModeUI ui = null;

-  /**
-   * Cheat on the first load's refresh by assuming the module loaded by
-   * {...@link com.google.gwt.dev.shell.GWTShellServlet} is still fresh. This
-   * prevents a double-refresh on startup. Subsequent refreshes will  
trigger a
-   * real refresh.
-   */
-  private Set<String> alreadySeenModules = new HashSet<String>();
-
    private final Semaphore blockUntilDone = new Semaphore(0);

    private BrowserWidgetHost browserHost = new UiBrowserWidgetHostImpl();
@@ -883,10 +869,8 @@ abstract class DevModeBase implements DoneCallback {
     */
    protected ModuleDef loadModule(TreeLogger logger, String moduleName,
        boolean refresh) throws UnableToCompleteException {
-    refresh &= alreadySeenModules.contains(moduleName);
      ModuleDef moduleDef = ModuleDefLoader.loadFromClassPath(logger,  
moduleName,
          refresh);
-    alreadySeenModules.add(moduleName);
      assert (moduleDef != null) : "Required module state is absent";
      return moduleDef;
    }



-- 
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to