Makes a PersistentUnitCache only for directory -war's.

Previously Compiler.java would attempt to place a persistent unit cache
directory relative to the provided -war path except when the provided
-war path was a .jar file.

Generalized the guard to actually avoid any -war path that did not refer
to a directory.

Change-Id: I903adbc3557901b104fc06cd3f44e72be07bb7e4
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java
index bee2b4b..7a1c789 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java
@@ -91,6 +91,11 @@
       return false;
     }
 
+    if (compilePerFile && !noPrecompile) {
+      System.out.println("Turning off precompile in compilePerFile mode.");
+      noPrecompile = true;
+    }
+
     return true;
   }
 
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/Outbox.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/Outbox.java
index 62f7d19..f2275f2 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/Outbox.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/Outbox.java
@@ -70,7 +70,7 @@
    */
   void maybePrecompile(TreeLogger logger) throws UnableToCompleteException {
 
-    if (options.getNoPrecompile() || options.shouldCompilePerFile()) {
+    if (options.getNoPrecompile()) {
       publish(recompiler.initWithoutPrecompile(logger), null);
       return;
     }
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/Recompiler.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/Recompiler.java
index 9eb5948..d2ed011 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/Recompiler.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/Recompiler.java
@@ -189,7 +189,7 @@
 
     ModuleDef module = loadModule(compileLogger);
 
-    logger.log(TreeLogger.INFO, "Prebuilding/loading the compilation unit cache.");
+    logger.log(TreeLogger.INFO, "Loading Java files in " + inputModuleName + ".");
     CompilerOptions loadOptions = new CompilerOptionsImpl(compileDir, inputModuleName, options);
     compilerContext = compilerContextBuilder.options(loadOptions).unitCache(
         Compiler.getOrCreateUnitCache(logger, loadOptions)).build();
diff --git a/dev/core/src/com/google/gwt/dev/Compiler.java b/dev/core/src/com/google/gwt/dev/Compiler.java
index 440e952..24fb2d9 100644
--- a/dev/core/src/com/google/gwt/dev/Compiler.java
+++ b/dev/core/src/com/google/gwt/dev/Compiler.java
@@ -82,9 +82,11 @@
    */
   public static UnitCache getOrCreateUnitCache(TreeLogger logger, CompilerOptions options) {
     File persistentUnitCacheDir = null;
-    if (options.getWarDir() != null && !options.getWarDir().getName().endsWith(".jar")) {
+    if (options.getWarDir() != null && options.getWarDir().isDirectory()) {
       persistentUnitCacheDir = new File(options.getWarDir(), "../");
     }
+    // TODO: returns the same UnitCache even if the passed directory changes. Make this less
+    // surprising.
     return UnitCacheSingleton.get(logger, persistentUnitCacheDir);
   }