diff --git a/user/BUILD b/user/BUILD
index 25a7416..591231c 100644
--- a/user/BUILD
+++ b/user/BUILD
@@ -45,6 +45,10 @@
 java_library(
     name = "gwt-javaemul-annotations",
     srcs = glob(["super/com/google/gwt/emul/javaemul/internal/annotations/*.java"]),
+    compatible_with = [
+        "//buildenv/target:android",
+        "//buildenv/target:appengine",
+    ],
 )
 
 # The classes in gwt-user.jar that GWT applications can depend on.
@@ -95,11 +99,8 @@
     ),
     compatible_with = ["//buildenv/target:appengine"],
     javacopts = [
+        "-Xep:FutureReturnValueIgnored:OFF",
         "-Xep:MissingCasesInEnumSwitch:OFF",
-        "-Xep:SelfComparison:OFF",
-        "-Xep:SelfEquals:OFF",
-        "-Xep:FallThrough:OFF",
-        "-Xep:ReturnValueIgnored:OFF",
         "-Xep:EqualsIncompatibleType:OFF",
     ],
     plugins = [
@@ -140,14 +141,7 @@
         "src/com/google/gwt/user/server/Base64Utils.java",
     ],
     compatible_with = ["//buildenv/target:appengine"],
-    javacopts = [
-        "-Xep:MissingCasesInEnumSwitch:OFF",
-        "-Xep:SelfComparison:OFF",
-        "-Xep:SelfEquals:OFF",
-        "-Xep:FallThrough:OFF",
-        "-Xep:ReturnValueIgnored:OFF",
-        "-Xep:EqualsIncompatibleType:OFF",
-    ],
+    javacopts = ["-Xep:MissingCasesInEnumSwitch:OFF"],
     deps = [
         "//third_party/java_src/gwt/svn/trunk/dev:requestfactory-apt-deps",
     ],
@@ -412,6 +406,8 @@
             "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",
+            "super/com/google/gwt/emul/javaemul/internal/JsUtils.java",
+            "super/com/google/gwt/emul/javaemul/internal/NativeArray.java",
             # And it's also sensible to want for serialization:
             "src/com/google/gwt/user/client/ui/SuggestOracle.java",
         ],
@@ -421,17 +417,17 @@
         ] + DTO_SRCS + JVM_REGEXP_SRCS,
     ),
     compatible_with = ["//buildenv/target:appengine"],
+    javacopts = ["-Xep:EqualsIncompatibleType:OFF"],
     deps = [
         ":gwt-dto-serializers",
+        ":gwt-javaemul-annotations",
+        ":gwt-jsinterop-annotations",
         ":jvm_regexp",
         "//third_party/java/servlet/servlet_api",
         "//third_party/java_src/gwt/svn/tools:servlet_deps",
         "//third_party/java_src/gwt/svn/trunk/dev:compiler.standalone.super",
         "//third_party/java_src/gwt/svn/trunk/dev:servlet-deps",
     ],
-    javacopts = [
-        "-Xep:EqualsIncompatibleType:OFF",
-    ]
 )
 
 # The minimum requirements for GWT-RPC serializable object definition.
@@ -455,6 +451,13 @@
     gwtxml = "Gwt-dto-serializers.gwt.xml",
 )
 
+# GWT pluggable type annotations in a separate library.
+java_library(
+    name = "gwt-safehtml-pluggabletypes",
+    srcs = glob(["src/com/google/gwt/safehtml/shared/annotations/Is*.java"]),
+    compatible_with = ["//buildenv/target:appengine"],
+)
+
 # Creates gwt-testing.jar, which contains GWTTestCase and its infrastructure.
 # (The jar depends on gwt-user.jar but the dependency isn't declared.
 # Instead we assume it will be added by a wrapper rule.)
@@ -544,16 +547,14 @@
         "//third_party/java_src/gwt/svn/trunk/dev:dev-test-code",
     ],
     javacopts = [
+        "-Xep:CheckReturnValue:OFF",
+        "-Xep:ReturnValueIgnored:OFF",
         "-Xep:SelfComparison:OFF",  # go/self-comparison-lsc
         "-Xep:SelfEquals:OFF",  # go/self-equals-lsc
         "-Xep:IdentityBinaryExpression:OFF",
         "-Xep:LoopConditionChecker:OFF",
-        "-Xep:CollectionIncompatibleType:OFF",
-        "-Xep:MissingCasesInEnumSwitch:OFF",
-        "-Xep:FallThrough:OFF",
-        "-Xep:ReturnValueIgnored:OFF",
-        "-Xep:JUnit3TestNotRun:OFF",
         "-Xep:EqualsIncompatibleType:OFF",
+        "-Xep:LogicalAssignment:OFF",
     ],
     deps = [
         "//third_party/java/jsr305_annotations",
@@ -686,7 +687,7 @@
 
 filegroup(
     name = "java_emul_internal",
-    srcs = glob(["super/com/google/gwt/emul/javaemul/**/*.java"]),
+    srcs = glob(["super/com/google/gwt/emul/javaemul/internal/*.java"]),
     visibility = ["//third_party/java_src/j2cl:__subpackages__"],
 )
 
diff --git a/user/super/com/google/gwt/emul/java/util/Arrays.java b/user/super/com/google/gwt/emul/java/util/Arrays.java
index a8ed4ce..53a927f 100644
--- a/user/super/com/google/gwt/emul/java/util/Arrays.java
+++ b/user/super/com/google/gwt/emul/java/util/Arrays.java
@@ -44,6 +44,8 @@
 import javaemul.internal.JsUtils;
 import javaemul.internal.NativeArray.CompareFunction;
 
+import jsinterop.annotations.JsFunction;
+
 /**
  * Utility methods related to native arrays.
  * See <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html">
@@ -1757,16 +1759,27 @@
     nativeSort(array, fromIndex, toIndex, getIntComparator());
   }
 
+  @JsFunction
+  private interface CompareDoubleFunction {
+    double compare(double d1, double d2);
+  }
+
   private static CompareFunction getIntComparator() {
-    return (a, b) -> JsUtils.unsafeCastToDouble(a) - JsUtils.unsafeCastToDouble(b);
+    return JsUtils.uncheckedCast((CompareDoubleFunction) (a, b) -> a - b);
   }
 
   private static CompareFunction getDoubleComparator() {
-    return (a, b) -> Double.compare(JsUtils.unsafeCastToDouble(a), JsUtils.unsafeCastToDouble(b));
+    return JsUtils.uncheckedCast((CompareDoubleFunction) Double::compare);
+  }
+
+  @JsFunction
+  private interface CompareLongFunction {
+    @SuppressWarnings("unusable-by-js")
+    int compare(long d1, long d2);
   }
 
   private static CompareFunction getLongComparator() {
-    return (a, b) -> Long.compare(JsUtils.unsafeCastToLong(a), JsUtils.unsafeCastToLong(b));
+    return JsUtils.uncheckedCast((CompareLongFunction) Long::compare);
   }
 
   private Arrays() { }
diff --git a/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java b/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
index c1a66f5..c388935 100644
--- a/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
+++ b/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
@@ -101,7 +101,7 @@
   private static native NativeFunction getSpliceFunction();
 
   public static NativeArray asNativeArray(Object array) {
-    return JsUtils.unsafeCastToNativeArray(array);
+    return JsUtils.uncheckedCast(array);
   }
 }
 
diff --git a/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java b/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
index c0477ac..87c404d 100644
--- a/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
+++ b/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
@@ -15,6 +15,8 @@
  */
 package javaemul.internal;
 
+import javaemul.internal.annotations.UncheckedCast;
+
 /**
  * Provides an interface for simple JavaScript idioms that can not be expressed in Java.
  */
@@ -52,12 +54,9 @@
    return bool;
   }-*/;
 
-  public static native long unsafeCastToLong(Object l) /*-{
-    return l;
-  }-*/;
-
-  public static native NativeArray unsafeCastToNativeArray(Object array) /*-{
-    return array;
+  @UncheckedCast
+  public static native <T> T uncheckedCast(Object o) /*-{
+    return o;
   }-*/;
 
   public static native <T> T getProperty(Object map, String key) /*-{
