Revision: 9509
Author: gwt.mirror...@gmail.com
Date: Fri Jan 7 06:41:55 2011
Log: ModuleDef's resource oracles really should be lazy.
http://gwt-code-reviews.appspot.com/1264801/show
Tested: tap_presubmit -p gwt: 709 passed, 4 skipped at
2011-01-07T17:41:24.621Z
Review by: zun...@google.com
http://code.google.com/p/google-web-toolkit/source/detail?r=9509
Modified:
/trunk/dev/core/src/com/google/gwt/dev/cfg/ModuleDef.java
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/cfg/ModuleDef.java Mon Dec 20
10:49:11 2010
+++ /trunk/dev/core/src/com/google/gwt/dev/cfg/ModuleDef.java Fri Jan 7
06:41:55 2011
@@ -111,6 +111,8 @@
*/
private String nameOverride;
+ private boolean needsRefresh;
+
private final Properties properties = new Properties();
private PathPrefixSet publicPrefixSet = new PathPrefixSet();
@@ -196,7 +198,7 @@
* method, the ResourceOraclewill be empty and unusable. Calling
* {...@link #refresh(TreeLogger)} will restore them.
*/
- public void clear() {
+ public synchronized void clear() {
if (lazySourceOracle != null) {
lazySourceOracle.clear();
}
@@ -241,6 +243,7 @@
}
public synchronized Resource findPublicFile(String partialPath) {
+ doRefresh(TreeLogger.NULL);
return lazyPublicOracle.getResourceMap().get(partialPath);
}
@@ -272,6 +275,7 @@
* @return the resource for the requested source file
*/
public synchronized Resource findSourceFile(String partialPath) {
+ doRefresh(TreeLogger.NULL);
return lazySourceOracle.getResourceMap().get(partialPath);
}
@@ -294,6 +298,7 @@
}
public String[] getAllPublicFiles() {
+ doRefresh(TreeLogger.NULL);
return lazyPublicOracle.getPathNames().toArray(Empty.STRINGS);
}
@@ -302,6 +307,7 @@
* oracle has been initialized.
*/
public String[] getAllSourceFiles() {
+ doRefresh(TreeLogger.NULL);
return lazySourceOracle.getPathNames().toArray(Empty.STRINGS);
}
@@ -315,6 +321,7 @@
public synchronized CompilationState getCompilationState(TreeLogger
logger)
throws UnableToCompleteException {
+ doRefresh(TreeLogger.NULL);
CompilationState compilationState = CompilationStateBuilder.buildFrom(
logger, lazySourceOracle.getResources());
checkForSeedTypes(logger, compilationState);
@@ -360,6 +367,8 @@
}
lazyResourcesOracle.setPathPrefixes(newPathPrefixes);
ResourceOracleImpl.refresh(TreeLogger.NULL, lazyResourcesOracle);
+ } else {
+ doRefresh(TreeLogger.NULL);
}
return lazyResourcesOracle;
}
@@ -416,18 +425,7 @@
}
public synchronized void refresh(TreeLogger logger) {
- Event moduleDefEvent =
SpeedTracerLogger.start(CompilerEventType.MODULE_DEF, "phase", "refresh", "module",
getName());
- logger = logger.branch(TreeLogger.DEBUG, "Refreshing module '" +
getName()
- + "'");
-
- // Refresh resource oracles.
- if (lazyResourcesOracle == null) {
- ResourceOracleImpl.refresh(logger, lazyPublicOracle,
lazySourceOracle);
- } else {
- ResourceOracleImpl.refresh(
- logger, lazyPublicOracle, lazySourceOracle, lazyResourcesOracle);
- }
- moduleDefEvent.end();
+ needsRefresh = true;
}
/**
@@ -483,23 +481,15 @@
// Create the public path.
TreeLogger branch = Messages.PUBLIC_PATH_LOCATIONS.branch(logger,
null);
- // lazyPublicOracle = publicPathEntries.create(branch);
- if (lazyPublicOracle == null) {
- lazyPublicOracle = new ResourceOracleImpl(branch);
- lazyPublicOracle.setPathPrefixes(publicPrefixSet);
- }
+ lazyPublicOracle = new ResourceOracleImpl(branch);
+ lazyPublicOracle.setPathPrefixes(publicPrefixSet);
// Create the source path.
branch = Messages.SOURCE_PATH_LOCATIONS.branch(logger, null);
lazySourceOracle = new ResourceOracleImpl(branch);
lazySourceOracle.setPathPrefixes(sourcePrefixSet);
- ResourceOracleImpl.refresh(logger, lazyPublicOracle, lazySourceOracle);
- if (lazySourceOracle.getResources().isEmpty()) {
- branch.log(TreeLogger.WARN,
- "No source path entries; expect subsequent failures", null);
- }
-
+ needsRefresh = true;
moduleDefNormalize.end();
}
@@ -528,4 +518,24 @@
throw new UnableToCompleteException();
}
}
-}
+
+ private synchronized void doRefresh(TreeLogger logger) {
+ if (!needsRefresh) {
+ return;
+ }
+ Event moduleDefEvent = SpeedTracerLogger.start(
+ CompilerEventType.MODULE_DEF, "phase", "refresh", "module",
getName());
+ logger = logger.branch(TreeLogger.DEBUG, "Refreshing module '" +
getName()
+ + "'");
+
+ // Refresh resource oracles.
+ if (lazyResourcesOracle == null) {
+ ResourceOracleImpl.refresh(logger, lazyPublicOracle,
lazySourceOracle);
+ } else {
+ ResourceOracleImpl.refresh(logger, lazyPublicOracle,
lazySourceOracle,
+ lazyResourcesOracle);
+ }
+ moduleDefEvent.end();
+ needsRefresh = false;
+ }
+}
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors