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

Reply via email to