Prevent a module from refreshing twice on initial load.
Review by: bruce (TBR)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@2763 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 61ba6ad..20d9a2d 100644
--- a/dev/core/src/com/google/gwt/dev/GWTShell.java
+++ b/dev/core/src/com/google/gwt/dev/GWTShell.java
@@ -57,6 +57,7 @@
import java.io.File;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -280,9 +281,12 @@
* @return the loaded module
* @throws UnableToCompleteException
*/
- private ModuleDef loadModule(final String moduleName, TreeLogger logger)
+ private ModuleDef loadModule(String moduleName, TreeLogger logger)
throws UnableToCompleteException {
- ModuleDef moduleDef = doLoadModule(logger, moduleName);
+ boolean assumeFresh = !alreadySeenModules.contains(moduleName);
+ ModuleDef moduleDef = ModuleDefLoader.loadFromClassPath(logger,
+ moduleName, !assumeFresh);
+ alreadySeenModules.add(moduleName);
assert (moduleDef != null) : "Required module state is absent";
return moduleDef;
}
@@ -364,6 +368,14 @@
protected File outDir;
+ /**
+ * 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 BrowserWidgetHostImpl browserHost = new BrowserWidgetHostImpl();
private final List<Shell> browserShells = new ArrayList<Shell>();
@@ -655,16 +667,6 @@
}
/**
- * Loads a named module. This method can be overridden if the module def needs
- * to be tweaked (or even created) programmatically -- JUnit integration does
- * this, for example.
- */
- protected ModuleDef doLoadModule(TreeLogger logger, final String moduleName)
- throws UnableToCompleteException {
- return ModuleDefLoader.loadFromClassPath(logger, moduleName);
- }
-
- /**
* Derived classes can override to prevent automatic update checking.
*/
protected boolean doShouldCheckForUpdates() {
diff --git a/user/src/com/google/gwt/junit/JUnitShell.java b/user/src/com/google/gwt/junit/JUnitShell.java
index 0bd81e8..dbfaa08 100644
--- a/user/src/com/google/gwt/junit/JUnitShell.java
+++ b/user/src/com/google/gwt/junit/JUnitShell.java
@@ -490,7 +490,9 @@
void compileForWebMode(String moduleName, String userAgentString)
throws UnableToCompleteException {
- ModuleDef module = doLoadModule(getTopLogger(), moduleName);
+ // Never fresh during JUnit.
+ ModuleDef module = ModuleDefLoader.loadFromClassPath(getTopLogger(),
+ moduleName, false);
if (userAgentString != null) {
Properties props = module.getProperties();
Property userAgent = props.find("user.agent");