Migrate all javaemul.internal to user

Change-Id: I4121c7979552043bce654f6ea418f1519e3d51c4
diff --git a/dev/BUILD b/dev/BUILD
index de10940..89ea1cc 100644
--- a/dev/BUILD
+++ b/dev/BUILD
@@ -216,7 +216,6 @@
         exclude = [
             "core/super/com/google/gwt/dev/jjs/intrinsic/**",
             "**/package-info.java",
-            "**/EmulatedCharset.java",
         ],
     ),
     compatible_with = ["//buildenv/target:android"],
@@ -339,11 +338,3 @@
     tests = GWT_DEV_TESTS,
     deps = [":dev-test-code"],
 )
-
-filegroup(
-    name = "emul",
-    srcs = glob([
-        "core/super/javaemul/**/*.java",
-    ]),
-    visibility = ["//third_party/java_src/j2cl:__subpackages__"],
-)
diff --git a/dev/build.xml b/dev/build.xml
index e6e0d4f..a7f37c9 100755
--- a/dev/build.xml
+++ b/dev/build.xml
@@ -32,8 +32,9 @@
         <pathelement location="${gwt.tools.lib}/junit/junit-4.8.2.jar"/>
       </classpath>
     </gwt.javac>
-    <gwt.javac srcdir="${gwt.root}/user/src" destdir="${javac.junit.out}"
-               excludes="**/super/**">
+    <gwt.javac srcdir="" destdir="${javac.junit.out}" excludes="**/EmulatedCharset.java">
+      <src path="${gwt.root}/user/src" />
+      <src path="${gwt.root}/user/super/com/google/gwt/emul/javaemul/internal"/>
       <classpath>
         <pathelement location="${javac.out}"/>
         <pathelement location="${gwt.tools.lib}/gss/2015-11-04/closure-stylesheets-library-20151104-rebased.jar"/>
@@ -175,7 +176,7 @@
   <target name="compiler.standalone"
           description="Validates that the standalone gwt-compiler project can build.">
     <mkdir dir="${javac.out}"/>
-    <gwt.javac srcdir="core/super" excludes="com/google/gwt/dev/jjs/intrinsic/,**/EmulatedCharset.java"/>
+    <gwt.javac srcdir="core/super" excludes="com/google/gwt/dev/jjs/intrinsic/"/>
     <gwt.javac srcdir="core/src">
       <include name="com/google/gwt/core/ext/**"/>
       <include name="com/google/gwt/core/linker/**"/>
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java
index 6debb78..ace1e31 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java
@@ -237,9 +237,6 @@
 import java.util.Map.Entry;
 import java.util.Set;
 
-import javaemul.internal.annotations.DoNotInline;
-import javaemul.internal.annotations.ForceInline;
-
 /**
  * Constructs a GWT Java AST from a single isolated compilation unit. The AST is
  * not associated with any {@link com.google.gwt.dev.jjs.ast.JProgram} and will
@@ -4090,11 +4087,11 @@
     x.setSuppressedWarnings(JdtUtil.getSuppressedWarnings(annotations));
   }
 
-  private void maybeSetInliningMode(AbstractMethodDeclaration x,
-      JMethod method) {
-    if (JdtUtil.getAnnotation(x.binding, DoNotInline.class.getCanonicalName()) != null) {
+  private void maybeSetInliningMode(AbstractMethodDeclaration x, JMethod method) {
+    MethodBinding bind = x.binding;
+    if (JdtUtil.getAnnotation(bind, "javaemul.internal.annotations.DoNotInline") != null) {
       method.setInliningMode(InliningMode.DO_NOT_INLINE);
-    } else if (JdtUtil.getAnnotation(x.binding, ForceInline.class.getCanonicalName()) != null) {
+    } else if (JdtUtil.getAnnotation(bind, "javaemul.internal.annotations.ForceInline") != null) {
       method.setInliningMode(InliningMode.FORCE_INLINE);
     }
   }
diff --git a/dev/core/super/com/google/gwt/lang/BigLongLibBase.java b/dev/core/super/com/google/gwt/lang/BigLongLibBase.java
index ebc31f8..3323bf1 100644
--- a/dev/core/super/com/google/gwt/lang/BigLongLibBase.java
+++ b/dev/core/super/com/google/gwt/lang/BigLongLibBase.java
@@ -15,8 +15,6 @@
  */
 package com.google.gwt.lang;
 
-import com.google.gwt.core.client.UnsafeNativeLong;
-
 /**
  * Implements a Java <code>long</code> in a way that can be translated to
  * JavaScript.
@@ -65,14 +63,6 @@
   protected static final double TWO_PWR_63_DBL = TWO_PWR_32_DBL
       * TWO_PWR_31_DBL;
 
-  /**
-   * Production Mode implementation; the int array is already the right object.
-   */
-  @UnsafeNativeLong
-  protected static native long asLong(BigLong value) /*-{
-    return value;
-  }-*/;
-
   protected static BigLong create(int value) {
     int a0 = value & MASK;
     int a1 = (value >> BITS) & MASK;
diff --git a/dev/core/test/com/google/gwt/dev/jjs/impl/EnumOrdinalizerTest.java b/dev/core/test/com/google/gwt/dev/jjs/impl/EnumOrdinalizerTest.java
index 7258b75..d80f771 100644
--- a/dev/core/test/com/google/gwt/dev/jjs/impl/EnumOrdinalizerTest.java
+++ b/dev/core/test/com/google/gwt/dev/jjs/impl/EnumOrdinalizerTest.java
@@ -26,8 +26,6 @@
 import com.google.gwt.dev.jjs.ast.JVisitor;
 import com.google.gwt.dev.jjs.impl.EnumOrdinalizer.Tracker;
 
-import javaemul.internal.annotations.DoNotInline;
-
 /**
  * A set of tests for the conditions under which ordinalization is and is not allowed.  The
  * ordinalization is performed when allowed.
@@ -1033,7 +1031,7 @@
   }
 
   private void setupFruitEnumWithStaticMethod() {
-    addSnippetImport(DoNotInline.class.getCanonicalName());
+    addSnippetImport("javaemul.internal.annotations.DoNotInline");
     addSnippetClassDecl("public enum Fruit {APPLE, ORANGE;",
         "  @DoNotInline",
         "  public static final int staticMethod() {",
diff --git a/dev/core/test/com/google/gwt/dev/jjs/impl/MethodInlinerTest.java b/dev/core/test/com/google/gwt/dev/jjs/impl/MethodInlinerTest.java
index c0ad828..1a71837 100644
--- a/dev/core/test/com/google/gwt/dev/jjs/impl/MethodInlinerTest.java
+++ b/dev/core/test/com/google/gwt/dev/jjs/impl/MethodInlinerTest.java
@@ -17,8 +17,6 @@
 import com.google.gwt.dev.jjs.ast.JMethod;
 import com.google.gwt.dev.jjs.ast.JProgram;
 
-import javaemul.internal.annotations.DoNotInline;
-
 /**
  * Test for {@link MethodInliner}.
  */
@@ -39,7 +37,7 @@
   }
 
   public void testLocalVariables() throws Exception {
-    addSnippetImport(DoNotInline.class.getCanonicalName());
+    addSnippetImport("javaemul.internal.annotations.DoNotInline");
     addSnippetClassDecl("static int fun() { int a = 1; return a; }");
     addSnippetClassDecl("@DoNotInline static int caller() { return fun(); }");
     Result result = optimize("int", "return caller();");
@@ -48,7 +46,7 @@
   }
 
   public void testLocalVariables_unassignedAtDefinition() throws Exception {
-    addSnippetImport(DoNotInline.class.getCanonicalName());
+    addSnippetImport("javaemul.internal.annotations.DoNotInline");
     addSnippetClassDecl("static int fun() { int a; return a = 1; }");
     addSnippetClassDecl("@DoNotInline static int caller() { return fun(); }");
     Result result = optimize("int", "return caller();");
@@ -57,7 +55,7 @@
   }
 
   public void testLocalVariablesUnusedReturn() throws Exception {
-    addSnippetImport(DoNotInline.class.getCanonicalName());
+    addSnippetImport("javaemul.internal.annotations.DoNotInline");
     addSnippetClassDecl("static int fun() { int a = 1; return a; }");
     addSnippetClassDecl("@DoNotInline static int caller() { fun(); return 1; }");
     Result result = optimize("int", "return caller();");
diff --git a/user/BUILD b/user/BUILD
index 64ca2fa..2fb8d6f 100644
--- a/user/BUILD
+++ b/user/BUILD
@@ -60,10 +60,13 @@
 java_library(
     name = "gwt-user-bare",
     srcs = glob(
-        ["src/**/*.java"],
+        [
+            "src/**/*.java",
+            "super/com/google/gwt/emul/javaemul/internal/**/*.java",
+        ],
         exclude = [
             "src/com/google/gwt/junit/**/*.java",  # see gwt-testing
-            "**/super/**",
+            "**/EmulatedCharset.java",
             "**/RunStyleSelenium.java",
         ],
     ),
@@ -343,8 +346,6 @@
             "src/com/google/gwt/user/client/impl/WindowImpl.java",
             "src/com/google/gwt/dom/client/*.java",
             "src/com/google/gwt/core/client/impl/Impl.java",
-            "src/com/google/gwt/core/client/impl/Disposable.java",
-            "src/com/google/gwt/core/client/impl/UnloadSupport.java",
             "src/com/google/gwt/core/client/impl/StackTraceCreator.java",
             "src/com/google/gwt/core/client/impl/SchedulerImpl.java",
             "src/com/google/gwt/core/client/impl/AsyncFragmentLoader.java",
@@ -359,12 +360,13 @@
             "src/com/google/gwt/i18n/client/impl/*.java",
             "src/com/google/gwt/i18n/client/*.java",
             "src/com/google/gwt/i18n/rebind/keygen/*.java",
+            "super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java",
+            "super/com/google/gwt/emul/javaemul/internal/ArrayStamper.java",
             # And it's also sensible to want for serialization:
             "src/com/google/gwt/user/client/ui/SuggestOracle.java",
         ],
         exclude = [
             "**/junit/**",
-            "**/super/**",
             "**/package-info.java",
             "src/com/google/web/bindery/requestfactory/server/RequestFactoryJarExtractor.java",
         ],
@@ -641,24 +643,30 @@
 )
 
 filegroup(
-    name = "emul",
-    srcs = glob(
-        [
-            "super/com/google/gwt/emul/java/**/*.java",
-        ],
-    ),
+    name = "java_emul",
+    srcs = glob(["super/com/google/gwt/emul/java/**/*.java"]),
     visibility = ["//third_party/java_src/j2cl:__subpackages__"],
 )
 
 filegroup(
-    name = "emul_test",
+    name = "java_emul_internal",
+    srcs = glob(["super/com/google/gwt/emul/javaemul/**/*.java"]),
+    visibility = ["//third_party/java_src/j2cl:__subpackages__"],
+)
+
+filegroup(
+    name = "java_emul_test",
     srcs = glob(
         [
             "test/com/google/gwt/emultest/**/*.java",
             "test/com/google/gwt/testing/TestUtils.java",
             "test/org/apache/commons/**/*.java",
         ],
-        exclude = ["**/package-info.java"],
+        exclude = [
+            "test/**/java8/**",
+            "test/**/*Java8Suite.java",
+            "**/package-info.java",
+        ],
     ),
     visibility = ["//third_party/java_src/j2cl:__subpackages__"],
 )
diff --git a/user/build.xml b/user/build.xml
index bf50826..7769964 100755
--- a/user/build.xml
+++ b/user/build.xml
@@ -104,7 +104,8 @@
   <target name="compile" description="Compile all class files"
           unless="compile.complete">
     <mkdir dir="${javac.out}"/>
-    <gwt.javac excludes="**/super/**">
+    <gwt.javac excludes="**/EmulatedCharset.java">
+      <src path="super/com/google/gwt/emul/javaemul/internal"/>
       <classpath>
         <pathelement location="${gwt.tools.lib}/gss/2015-10-07/closure-stylesheets-library-20151007-rebased.jar"/>
         <pathelement location="${gwt.tools.lib}/gss/2015-11-04/closure-stylesheets-library-20151104-rebased.jar"/>
diff --git a/user/src/com/google/gwt/core/client/JavaScriptObject.java b/user/src/com/google/gwt/core/client/JavaScriptObject.java
index 3462bc7..abaa697 100644
--- a/user/src/com/google/gwt/core/client/JavaScriptObject.java
+++ b/user/src/com/google/gwt/core/client/JavaScriptObject.java
@@ -15,8 +15,6 @@
  */
 package com.google.gwt.core.client;
 
-import javaemul.internal.HashCodes;
-
 /**
  * An opaque handle to a native JavaScript object. A
  * <code>JavaScriptObject</code> cannot be created directly.
@@ -148,7 +146,7 @@
    */
   @Override
   public final int hashCode() {
-    return HashCodes.getObjectIdentityHashCode(this);
+    return super.hashCode();
   }
 
   /**
diff --git a/user/super/com/google/gwt/emul/Emulation.gwt.xml b/user/super/com/google/gwt/emul/Emulation.gwt.xml
index 9555138..9b75e95 100644
--- a/user/super/com/google/gwt/emul/Emulation.gwt.xml
+++ b/user/super/com/google/gwt/emul/Emulation.gwt.xml
@@ -15,7 +15,6 @@
 <!-- A JavaScript-based emulation of the Java Runtime library.              -->
 <!-- Do not inherit this module directly; inherit com.google.gwt.core.Core. -->
 <module>
-  <inherits name="javaemul.internal.Internal"/>
   <inherits name="com.google.gwt.emul.Preconditions" />
 
   <extend-configuration-property name="compiler.enum.obfuscate.names.blacklist"
diff --git a/dev/core/super/javaemul/internal/ArrayHelper.java b/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
similarity index 100%
rename from dev/core/super/javaemul/internal/ArrayHelper.java
rename to user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
diff --git a/dev/core/super/javaemul/internal/ArrayStamper.java b/user/super/com/google/gwt/emul/javaemul/internal/ArrayStamper.java
similarity index 100%
rename from dev/core/super/javaemul/internal/ArrayStamper.java
rename to user/super/com/google/gwt/emul/javaemul/internal/ArrayStamper.java
diff --git a/dev/core/super/javaemul/internal/Coercions.java b/user/super/com/google/gwt/emul/javaemul/internal/Coercions.java
similarity index 100%
rename from dev/core/super/javaemul/internal/Coercions.java
rename to user/super/com/google/gwt/emul/javaemul/internal/Coercions.java
diff --git a/dev/core/super/javaemul/internal/ConsoleLogger.java b/user/super/com/google/gwt/emul/javaemul/internal/ConsoleLogger.java
similarity index 100%
rename from dev/core/super/javaemul/internal/ConsoleLogger.java
rename to user/super/com/google/gwt/emul/javaemul/internal/ConsoleLogger.java
diff --git a/dev/core/super/javaemul/internal/DateUtil.java b/user/super/com/google/gwt/emul/javaemul/internal/DateUtil.java
similarity index 100%
rename from dev/core/super/javaemul/internal/DateUtil.java
rename to user/super/com/google/gwt/emul/javaemul/internal/DateUtil.java
diff --git a/dev/core/super/javaemul/internal/EmulatedCharset.java b/user/super/com/google/gwt/emul/javaemul/internal/EmulatedCharset.java
similarity index 100%
rename from dev/core/super/javaemul/internal/EmulatedCharset.java
rename to user/super/com/google/gwt/emul/javaemul/internal/EmulatedCharset.java
diff --git a/dev/core/super/javaemul/internal/HashCodes.java b/user/super/com/google/gwt/emul/javaemul/internal/HashCodes.java
similarity index 100%
rename from dev/core/super/javaemul/internal/HashCodes.java
rename to user/super/com/google/gwt/emul/javaemul/internal/HashCodes.java
diff --git a/dev/core/super/javaemul/internal/Internal.gwt.xml b/user/super/com/google/gwt/emul/javaemul/internal/Internal.gwt.xml
similarity index 100%
rename from dev/core/super/javaemul/internal/Internal.gwt.xml
rename to user/super/com/google/gwt/emul/javaemul/internal/Internal.gwt.xml
diff --git a/dev/core/super/javaemul/internal/InternalPreconditions.java b/user/super/com/google/gwt/emul/javaemul/internal/InternalPreconditions.java
similarity index 100%
rename from dev/core/super/javaemul/internal/InternalPreconditions.java
rename to user/super/com/google/gwt/emul/javaemul/internal/InternalPreconditions.java
diff --git a/dev/core/super/javaemul/internal/JsUtils.java b/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
similarity index 100%
rename from dev/core/super/javaemul/internal/JsUtils.java
rename to user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
diff --git a/dev/core/super/javaemul/internal/LongCompareHolder.java b/user/super/com/google/gwt/emul/javaemul/internal/LongCompareHolder.java
similarity index 100%
rename from dev/core/super/javaemul/internal/LongCompareHolder.java
rename to user/super/com/google/gwt/emul/javaemul/internal/LongCompareHolder.java
diff --git a/dev/core/super/javaemul/internal/StringHashCache.java b/user/super/com/google/gwt/emul/javaemul/internal/StringHashCache.java
similarity index 100%
rename from dev/core/super/javaemul/internal/StringHashCache.java
rename to user/super/com/google/gwt/emul/javaemul/internal/StringHashCache.java
diff --git a/dev/core/super/javaemul/internal/annotations/CompilerHint.java b/user/super/com/google/gwt/emul/javaemul/internal/annotations/CompilerHint.java
similarity index 100%
rename from dev/core/super/javaemul/internal/annotations/CompilerHint.java
rename to user/super/com/google/gwt/emul/javaemul/internal/annotations/CompilerHint.java
diff --git a/dev/core/super/javaemul/internal/annotations/DoNotInline.java b/user/super/com/google/gwt/emul/javaemul/internal/annotations/DoNotInline.java
similarity index 100%
rename from dev/core/super/javaemul/internal/annotations/DoNotInline.java
rename to user/super/com/google/gwt/emul/javaemul/internal/annotations/DoNotInline.java
diff --git a/dev/core/super/javaemul/internal/annotations/ForceInline.java b/user/super/com/google/gwt/emul/javaemul/internal/annotations/ForceInline.java
similarity index 100%
rename from dev/core/super/javaemul/internal/annotations/ForceInline.java
rename to user/super/com/google/gwt/emul/javaemul/internal/annotations/ForceInline.java
diff --git a/dev/core/super/javaemul/internal/annotations/GwtIncompatible.java b/user/super/com/google/gwt/emul/javaemul/internal/annotations/GwtIncompatible.java
similarity index 100%
rename from dev/core/super/javaemul/internal/annotations/GwtIncompatible.java
rename to user/super/com/google/gwt/emul/javaemul/internal/annotations/GwtIncompatible.java
diff --git a/dev/core/super/javaemul/internal/annotations/HasNoSideEffects.java b/user/super/com/google/gwt/emul/javaemul/internal/annotations/HasNoSideEffects.java
similarity index 100%
rename from dev/core/super/javaemul/internal/annotations/HasNoSideEffects.java
rename to user/super/com/google/gwt/emul/javaemul/internal/annotations/HasNoSideEffects.java
diff --git a/dev/core/super/javaemul/internal/annotations/SpecializeMethod.java b/user/super/com/google/gwt/emul/javaemul/internal/annotations/SpecializeMethod.java
similarity index 100%
rename from dev/core/super/javaemul/internal/annotations/SpecializeMethod.java
rename to user/super/com/google/gwt/emul/javaemul/internal/annotations/SpecializeMethod.java