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