Reviewers: scheglov, jbrosenberg,
Description:
Better error handling when the cache is initialized with a directory
that does not exist and it cannot create.
Please review this at http://gwt-code-reviews.appspot.com/1380808/
Affected files:
M dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
M dev/core/src/com/google/gwt/dev/javac/PersistentUnitCache.java
M dev/core/src/com/google/gwt/dev/javac/UnitCacheFactory.java
M dev/core/test/com/google/gwt/dev/javac/PersistentUnitCacheTest.java
Index: dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
===================================================================
--- dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
(revision 9896)
+++ dev/core/src/com/google/gwt/dev/javac/CompilationStateBuilder.java
(working copy)
@@ -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);
}
Index: dev/core/src/com/google/gwt/dev/javac/PersistentUnitCache.java
===================================================================
--- dev/core/src/com/google/gwt/dev/javac/PersistentUnitCache.java
(revision 9896)
+++ dev/core/src/com/google/gwt/dev/javac/PersistentUnitCache.java (working
copy)
@@ -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];
}
/**
Index: dev/core/src/com/google/gwt/dev/javac/UnitCacheFactory.java
===================================================================
--- dev/core/src/com/google/gwt/dev/javac/UnitCacheFactory.java (revision
9896)
+++ dev/core/src/com/google/gwt/dev/javac/UnitCacheFactory.java (working
copy)
@@ -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) {
Index: dev/core/test/com/google/gwt/dev/javac/PersistentUnitCacheTest.java
===================================================================
--- dev/core/test/com/google/gwt/dev/javac/PersistentUnitCacheTest.java
(revision 9896)
+++ dev/core/test/com/google/gwt/dev/javac/PersistentUnitCacheTest.java
(working copy)
@@ -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,13 @@
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,8 +66,7 @@
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");
assertNotNull(result);
@@ -167,6 +169,21 @@
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