Replace makeCastMapFromArray with goog.object.createSet

JCHSU.makeCastMapFromArray increases startup latency by 150ms
in Closure/GWT hybrid apps like Google Inbox by doing more work
during initial load to construct cast maps.

This patch uses the closure library goog.object.createSet() function
which accomplishes the same task, but has a builtin closure compiler
optimization which turns var-arg arguments into a static object literal.

Change-Id: Ia091e280c305c7f7964fd25bb0d2197aa0245ea0
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
index 84f5df9..5827b3f 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
@@ -2222,7 +2222,7 @@
         SourceInfo sourceInfo) {
       if (JjsUtils.closureStyleLiteralsNeeded(incremental, jsInteropMode,
           jsExportClosureStyle)) {
-        return buildCastMapFromArrayLiteral(runtimeTypeIdLiterals, sourceInfo);
+        return buildClosureStyleCastMapFromArrayLiteral(runtimeTypeIdLiterals, sourceInfo);
       } else {
         return buildCastMapAsObjectLiteral(runtimeTypeIdLiterals, sourceInfo);
       }
@@ -2244,17 +2244,24 @@
       return objLit;
     }
 
-    private JsExpression buildCastMapFromArrayLiteral(
-        List<JsExpression> runtimeTypeIdLiterals, SourceInfo sourceInfo) {
-      JsArrayLiteral castExprs = new JsArrayLiteral(sourceInfo);
+    private JsExpression buildClosureStyleCastMapFromArrayLiteral(
+            List<JsExpression> runtimeTypeIdLiterals, SourceInfo sourceInfo) {
+      /*
+       * goog.object.createSet('foo', 'bar', 'baz') is optimized by closure compiler into
+       * {'foo': !0, 'bar': !0, baz: !0}
+       */
+      JsNameRef createSet = new JsNameRef(sourceInfo, "createSet");
+      JsNameRef googObject = new JsNameRef(sourceInfo, "object");
+      JsNameRef goog = new JsNameRef(sourceInfo, "goog");
+      createSet.setQualifier(googObject);
+      googObject.setQualifier(goog);
+
+      JsInvocation jsInvocation = new JsInvocation(sourceInfo, createSet);
+
       for (JsExpression expr : runtimeTypeIdLiterals) {
-        castExprs.getExpressions().add(expr);
+        jsInvocation.getArguments().add(expr);
       }
-      castExprs.setInternable();
-      JsInvocation jsInvocation = new JsInvocation(sourceInfo,
-          indexedFunctions
-              .get("JavaClassHierarchySetupUtil.makeCastMapFromArray"),
-          castExprs);
+
       return jsInvocation;
     }
 
diff --git a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/JavaClassHierarchySetupUtil.java b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/JavaClassHierarchySetupUtil.java
index 5f9f528..9ff1d37 100644
--- a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/JavaClassHierarchySetupUtil.java
+++ b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/JavaClassHierarchySetupUtil.java
@@ -127,19 +127,6 @@
         portableObjCreate(Lcom/google/gwt/core/client/JavaScriptObject;)(prototypesByTypeId[superTypeId]);
   }-*/;
 
-  public static native JavaScriptObject makeCastMapFromArray(JavaScriptObject array) /*-{
-    if (array.castMap) {
-        // already created on interned array
-        return array.castMap;
-    }
-    var castMap = {};
-    for (var i = 0; i < array.length; i++) {
-        castMap[array[i]] = 1;
-    }
-    array.castMap = castMap;
-    return castMap;
-  }-*/;
-
   /**
    * Retrieves the class literal if stored in a place holder, {@code null} otherwise.
    */