Add -XjsInteropMode option to SuperDevMode

The option is already present when compiling a GWT app and is required
to use JsInterop features like @JsType annotations. This change makes it
possible to debug the use of JsInterop features while in SuperDevMode.

Change-Id: I108754c59d34f4df6b3bd38df4109af2758f2ebe
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/CompilerOptionsImpl.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/CompilerOptionsImpl.java
index d70afaf..cf1bd86 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/CompilerOptionsImpl.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/CompilerOptionsImpl.java
@@ -42,6 +42,7 @@
   private final SourceLevel sourceLevel;
   private final boolean strictPublicResources;
   private final boolean strictSourceResources;
+  private final JsInteropMode jsInteropMode;
 
   CompilerOptionsImpl(CompileDir compileDir, String moduleName, Options options) {
     this.compileDir = compileDir;
@@ -52,6 +53,7 @@
     this.strictSourceResources = options.enforceStrictResources();
     this.strictPublicResources = options.enforceStrictResources();
     this.logLevel = options.getLogLevel();
+    this.jsInteropMode = options.getJsInteropMode();
   }
 
   @Override
@@ -96,7 +98,7 @@
 
   @Override
   public JsInteropMode getJsInteropMode() {
-    return JsInteropMode.NONE;
+    return jsInteropMode;
   }
 
   @Override
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 0680a12..6c58d5f 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/Options.java
@@ -18,8 +18,11 @@
 
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.dev.ArgProcessorBase;
+import com.google.gwt.dev.util.arg.ArgHandlerJsInteropMode;
 import com.google.gwt.dev.util.arg.ArgHandlerLogLevel;
 import com.google.gwt.dev.util.arg.ArgHandlerSourceLevel;
+import com.google.gwt.dev.util.arg.JsInteropMode;
+import com.google.gwt.dev.util.arg.OptionJsInteropMode;
 import com.google.gwt.dev.util.arg.OptionLogLevel;
 import com.google.gwt.dev.util.arg.OptionSourceLevel;
 import com.google.gwt.dev.util.arg.SourceLevel;
@@ -47,7 +50,7 @@
   private boolean noPrecompile = false;
   private boolean isCompileTest = false;
   private File workDir;
-  private List<String> moduleNames = new ArrayList<String>();
+  private final List<String> moduleNames = new ArrayList<String>();
   private boolean allowMissingSourceDir = false;
   private final List<File> sourcePath = new ArrayList<File>();
   private String bindAddress = "127.0.0.1";
@@ -60,6 +63,7 @@
   private boolean failOnError = false;
   private boolean strictResources = false;
   private int compileTestRecompiles = 0;
+  private JsInteropMode jsInteropMode = JsInteropMode.NONE;
 
   /**
    * Sets each option to the appropriate value, based on command-line arguments.
@@ -210,6 +214,10 @@
     return failOnError;
   }
 
+  JsInteropMode getJsInteropMode() {
+    return jsInteropMode;
+  }
+
   private class ArgProcessor extends ArgProcessorBase {
 
     public ArgProcessor() {
@@ -248,6 +256,16 @@
           Options.this.logLevel = logLevel;
         }
       }));
+      registerHandler(new ArgHandlerJsInteropMode(new OptionJsInteropMode() {
+        @Override
+        public JsInteropMode getJsInteropMode() {
+          return Options.this.jsInteropMode;
+        }
+
+        @Override
+        public void setJsInteropMode(JsInteropMode mode) {
+          Options.this.jsInteropMode = mode;
+        }}));
     }
 
     @Override