Unify DevMode's startupModules and alreadySeen modules to simplify code.
Review by: rice
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7062 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/DevMode.java b/dev/core/src/com/google/gwt/dev/DevMode.java
index 379519d..6e6c309 100644
--- a/dev/core/src/com/google/gwt/dev/DevMode.java
+++ b/dev/core/src/com/google/gwt/dev/DevMode.java
@@ -38,6 +38,8 @@
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 @@
*/
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.
*/
@@ -388,6 +392,16 @@
}
@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 {
diff --git a/dev/core/src/com/google/gwt/dev/DevModeBase.java b/dev/core/src/com/google/gwt/dev/DevModeBase.java
index 17e8b29..e58db6f 100644
--- a/dev/core/src/com/google/gwt/dev/DevModeBase.java
+++ b/dev/core/src/com/google/gwt/dev/DevModeBase.java
@@ -54,11 +54,9 @@
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 @@
// 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);
@@ -575,8 +571,6 @@
}
}
- 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();
@@ -656,14 +650,6 @@
protected DevModeUI ui = null;
protected TreeLogger.Type baseLogLevelForUI = 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();
@@ -903,10 +889,8 @@
*/
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;
}