Super Dev Mode: display warning when -XcompilePerFile is on

Change-Id: I95cb24e04868777a9d676b6cc35f8fabc6866388
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/CodeServer.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/CodeServer.java
index bdde81c..a3ac485 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/CodeServer.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/CodeServer.java
@@ -131,7 +131,7 @@
     File workDir = ensureWorkDir(options);
     System.out.println("workDir: " + workDir);
 
-    Modules modules = new Modules();
+    Modules modules = new Modules(options);
     for (String moduleName : options.getModuleNames()) {
       AppSpace appSpace = AppSpace.create(new File(workDir, moduleName));
 
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/Modules.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/Modules.java
index b38e1f5..5e8ab8c 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/Modules.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/Modules.java
@@ -19,8 +19,8 @@
 import com.google.gwt.core.ext.UnableToCompleteException;
 import com.google.gwt.dev.json.JsonArray;
 import com.google.gwt.dev.json.JsonObject;
+import com.google.gwt.thirdparty.guava.common.collect.Maps;
 
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
@@ -31,11 +31,15 @@
  * modules on the front page.
  */
 class Modules implements Iterable<String> {
-  private final Map<String, ModuleState> moduleStateMap =
-      new HashMap<String, ModuleState>();
+  private final Options options;
+  private final Map<String, ModuleState> moduleStateMap = Maps.newHashMap();
 
   private AtomicReference<Progress> progress = new AtomicReference<Progress>(Progress.IDLE);
 
+  public Modules(Options options) {
+    this.options = options;
+  }
+
   /**
    * Adds a {@link ModuleState} to the map.
    * @param state the module state to map
@@ -67,7 +71,8 @@
   }
 
   /**
-   * Returns a configuration object containing the names of all the modules.
+   * Returns a configuration object containing the names of all the modules
+   * and warnings to display to the user.
    */
   JsonObject getConfig() {
     JsonObject config = JsonObject.create();
@@ -76,6 +81,7 @@
       moduleNames.add(module);
     }
     config.put("moduleNames", moduleNames);
+    config.put("warnings", options.getWarningsAsJson());
     return config;
   }
 
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 6c58d5f..cdccc02 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java
@@ -18,6 +18,8 @@
 
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.dev.ArgProcessorBase;
+import com.google.gwt.dev.json.JsonArray;
+import com.google.gwt.dev.json.JsonObject;
 import com.google.gwt.dev.util.arg.ArgHandlerJsInteropMode;
 import com.google.gwt.dev.util.arg.ArgHandlerLogLevel;
 import com.google.gwt.dev.util.arg.ArgHandlerSourceLevel;
@@ -218,6 +220,14 @@
     return jsInteropMode;
   }
 
+  JsonArray getWarningsAsJson() {
+    JsonArray warnings = new JsonArray();
+    if (compilePerFile) {
+      warnings.add("-XcompilePerFile is not done yet. Generators might not be run when needed.");
+    }
+    return warnings;
+  }
+
   private class ArgProcessor extends ArgProcessorBase {
 
     public ArgProcessor() {
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/dev_mode_on.js b/dev/codeserver/java/com/google/gwt/dev/codeserver/dev_mode_on.js
index 2964be7..c8f7124 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/dev_mode_on.js
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/dev_mode_on.js
@@ -268,6 +268,20 @@
       return div;
     }
 
+    function makeFooter() {
+      var warnings = window.__gwt_codeserver_config.warnings;
+      var div = $doc.createElement("div");
+      if (warnings.length > 0) {
+        div.style.marginTop = "10px";
+      }
+      div.appendChild(makeCodeServerLink());
+      for (var i = 0; i < warnings.length; i++) {
+        var warning = makeTextElt('div', '10pt', warnings[i]);
+        div.appendChild(warning);
+      }
+      return div;
+    }
+
     var active_modules = window.__gwt_activeModules;
 
     var moduleTable = $doc.createElement('table');
@@ -288,7 +302,7 @@
       dialog.appendChild(makeTextElt('span', '16pt',
           'Can\'t find any GWT Modules on this page.'));
     }
-    dialog.appendChild(makeCodeServerLink());
+    dialog.appendChild(makeFooter());
 
     // Grey out everything under the dialog.
     var overlay = makeOverlay();