Revision: 9897
Author:   zun...@google.com
Date:     Fri Mar 25 11:27:04 2011
Log: Better error handling when the cache is initialized with a directory
that does not exist and it cannot create.

Review at http://gwt-code-reviews.appspot.com/1380808

http://code.google.com/p/google-web-toolkit/source/detail?r=9897

Modified:
 /trunk/dev/core/src/com/google/gwt/dev/DevModeBase.java
 /trunk/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
 /trunk/dev/core/src/com/google/gwt/dev/javac/PersistentUnitCache.java
 /trunk/dev/core/src/com/google/gwt/dev/javac/UnitCacheFactory.java
 /trunk/dev/core/test/com/google/gwt/dev/javac/PersistentUnitCacheTest.java

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/DevModeBase.java Thu Mar 24 15:47:57 2011 +++ /trunk/dev/core/src/com/google/gwt/dev/DevModeBase.java Fri Mar 25 11:27:04 2011
@@ -883,7 +883,11 @@
     ui.initialize(options.getLogLevel());
     topLogger = ui.getTopLogger();

-    CompilationStateBuilder.init(getTopLogger(), persistentCacheDir);
+    try {
+      CompilationStateBuilder.init(getTopLogger(), persistentCacheDir);
+    } catch (UnableToCompleteException ex) {
+      return false;
+    }

     // Set done callback
     ui.setCallback(DoneEvent.getType(), this);
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java Thu Mar 24 15:47:57 2011 +++ /trunk/dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java Fri Mar 25 11:27:04 2011
@@ -16,6 +16,7 @@
 package com.google.gwt.dev.javac;

 import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.dev.javac.CompilationUnitBuilder.GeneratedCompilationUnitBuilder; import com.google.gwt.dev.javac.CompilationUnitBuilder.ResourceCompilationUnitBuilder;
 import com.google.gwt.dev.javac.JdtCompiler.AdditionalTypeProviderDelegate;
@@ -289,7 +290,8 @@
* Called to setup the directory where the persistent {@link ComplationUnit} * cache should be stored. Only the first call to init() will have an effect.
    */
- public static synchronized void init(TreeLogger logger, File cacheDirectory) { + public static synchronized void init(TreeLogger logger, File cacheDirectory)
+      throws UnableToCompleteException {
     instance.unitCache = UnitCacheFactory.get(logger, cacheDirectory);
   }

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/javac/PersistentUnitCache.java Thu Mar 24 15:47:57 2011 +++ /trunk/dev/core/src/com/google/gwt/dev/javac/PersistentUnitCache.java Fri Mar 25 11:27:04 2011
@@ -16,6 +16,7 @@
 package com.google.gwt.dev.javac;

 import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.UnableToCompleteException;
 import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
 import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;
 import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event;
@@ -284,14 +285,19 @@
    */
   private File currentCacheFile;

-  PersistentUnitCache(TreeLogger logger, File cacheDir) {
+ PersistentUnitCache(TreeLogger logger, File cacheDir) throws UnableToCompleteException {
     assert cacheDir != null;

     this.cacheDirectory = new File(cacheDir, UNIT_CACHE_PREFIX);
     logger.log(TreeLogger.TRACE, "Persistent unit cache dir set to: "
         + this.cacheDirectory.getAbsolutePath());

-    cacheDirectory.mkdir();
+    if (!cacheDirectory.exists() && !cacheDirectory.mkdir()) {
+ logger.log(TreeLogger.ERROR, "Unable to initialize cache. Couldn't create directory "
+          + cacheDirectory.getAbsolutePath() + ".");
+      throw new UnableToCompleteException();
+    }
+
     long timestamp = System.currentTimeMillis();
     do {
       currentCacheFile =
@@ -415,7 +421,7 @@
       Arrays.sort(retFiles);
       return retFiles;
     }
-    return null;
+    return new File[0];
   }

   /**
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/javac/UnitCacheFactory.java Thu Mar 24 15:47:57 2011 +++ /trunk/dev/core/src/com/google/gwt/dev/javac/UnitCacheFactory.java Fri Mar 25 11:27:04 2011
@@ -16,6 +16,7 @@
 package com.google.gwt.dev.javac;

 import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.UnableToCompleteException;

 import java.io.File;

@@ -36,10 +37,11 @@
* into memory in a background thread. If the cache is not enabled, it clears
    * out any old cached files.
    *
- * Only one instance of the cache is instantiated. If a previously created cache
-   * exists, the previous instance is returned.
+ * Only one instance of the cache is instantiated. If a previously created
+   * cache exists, the previous instance is returned.
    */
- public static synchronized UnitCache get(TreeLogger logger, File cacheDir) { + public static synchronized UnitCache get(TreeLogger logger, File cacheDir)
+      throws UnableToCompleteException {
     assert logger != null;
     if (instance == null) {
       if (usePersistent) {
=======================================
--- /trunk/dev/core/test/com/google/gwt/dev/javac/PersistentUnitCacheTest.java Thu Mar 24 15:47:57 2011 +++ /trunk/dev/core/test/com/google/gwt/dev/javac/PersistentUnitCacheTest.java Fri Mar 25 11:27:04 2011
@@ -16,6 +16,7 @@
 package com.google.gwt.dev.javac;

 import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.UnableToCompleteException;
 import com.google.gwt.dev.util.Util;

 import junit.framework.TestCase;
@@ -31,11 +32,14 @@
   File lastCacheDir = null;

   public void tearDown() {
-    Util.recursiveDelete(lastCacheDir, false);
+    if (lastCacheDir != null) {
+      Util.recursiveDelete(lastCacheDir, false);
+    }
     lastCacheDir = null;
   }

- public void testPersistentCache() throws IOException, InterruptedException { + public void testPersistentCache() throws IOException, InterruptedException,
+      UnableToCompleteException {
     TreeLogger logger = TreeLogger.NULL;

     File cacheDir = null;
@@ -63,7 +67,6 @@
     result = cache.find(bar1.getContentId());
     assertNotNull(result);
     assertEquals("com.example.Bar", result.getTypeName());
-    System.err.println("resource loc: " + bar1.getResourceLocation());

     // Find by type name
     result = cache.find("/mock/com/example/Foo.java");
@@ -166,6 +169,20 @@
     cache.shutdown();
     assertNumCacheFiles(unitCacheDir, 1);
   }
+
+  public void testBadDir() {
+    TreeLogger logger = TreeLogger.NULL;
+    File badDir = new File("sHoUlDnOtExi57");
+    boolean caught = false;
+    try {
+      PersistentUnitCache puc = new PersistentUnitCache(logger, badDir);
+    } catch (UnableToCompleteException ex) {
+      // expected
+      caught = true;
+    } finally {
+      assertTrue("Did not catch UnableToCompleteException", caught);
+    }
+  }

   private void assertNumCacheFiles(File unitCacheDir, int expected) {
     assertEquals(expected, unitCacheDir.list().length);

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

Reply via email to