diff --git a/java/jsinterop/base/BUILD b/java/jsinterop/base/BUILD index 0b8f193..1815367 100644 --- a/java/jsinterop/base/BUILD +++ b/java/jsinterop/base/BUILD @@ -40,6 +40,8 @@ javadoc_library( j2cl_library( name = "base-j2cl", srcs = [":processed_j2cl_srcs"] + glob(["*.js"]), + # Tested internally in google3 + experimental_enable_jspecify_support_do_not_enable_without_jspecify_static_checking_or_you_might_cause_an_outage = True, deps = [ "//third_party:jspecify_annotations-j2cl", "@com_google_j2cl//:jsinterop-annotations-j2cl", diff --git a/java/jsinterop/base/InternalJsUtil.java b/java/jsinterop/base/InternalJsUtil.java index c3cee27..3cb90b0 100644 --- a/java/jsinterop/base/InternalJsUtil.java +++ b/java/jsinterop/base/InternalJsUtil.java @@ -60,7 +60,7 @@ public static native Object delete(Object obj, String key) /*-{ }-*/; // J2CL_ONLY @JsMethod(name="setIndexed") - public static native void set(Object obj, String key, Object value) /*-{ + public static native void set(Object obj, String key, @Nullable Object value) /*-{ obj[key] = value; }-*/; @@ -92,38 +92,38 @@ public static native void forEach(Object obj, JsForEachCallbackFn cb) /*-{ }-*/; // J2CL_ONLY @JsMethod(name="castToAny") - public static native boolean asBoolean(Object obj) /*-{ + public static native boolean asBoolean(@Nullable Object obj) /*-{ return obj; }-*/; // J2CL_ONLY @JsMethod(name="castToAny") - public static native double asDouble(Object obj) /*-{ + public static native double asDouble(@Nullable Object obj) /*-{ return obj; }-*/; // J2CL_ONLY @JsMethod(name="castToAny") - public static native int asInt(Object obj) /*-{ + public static native int asInt(@Nullable Object obj) /*-{ return obj; }-*/; // J2CL_ONLY @JsMethod(name="castToAny") - public static native short asShort(Object obj) /*-{ + public static native short asShort(@Nullable Object obj) /*-{ return obj; }-*/; // J2CL_ONLY @JsMethod(name="castToAny") - public static native char asChar(Object obj) /*-{ + public static native char asChar(@Nullable Object obj) /*-{ return obj; }-*/; // J2CL_ONLY @JsMethod(name="castToAny") - public static native byte asByte(Object obj) /*-{ + public static native byte asByte(@Nullable Object obj) /*-{ return obj; }-*/; @UnsafeNativeLong // J2CL_ONLY @JsMethod(name="castToAny") - public static native long asLong(Object obj) /*-{ + public static native long asLong(@Nullable Object obj) /*-{ return obj; }-*/; diff --git a/java/jsinterop/base/InternalPreconditions.java b/java/jsinterop/base/InternalPreconditions.java index 16098bf..6cf52fb 100644 --- a/java/jsinterop/base/InternalPreconditions.java +++ b/java/jsinterop/base/InternalPreconditions.java @@ -24,8 +24,9 @@ */ public final class InternalPreconditions { - private static final boolean IS_TYPE_CHECKED = getProperty("jsinterop.checks").equals("ENABLED"); - private static final boolean IS_ASSERTED = getProperty("jre.checkedMode").equals("ENABLED"); + private static final boolean IS_TYPE_CHECKED = getProperty("jsinterop.checks") == "ENABLED"; + + private static final boolean IS_ASSERTED = getProperty("jre.checkedMode") == "ENABLED"; public static void checkType(boolean expression) { if (IS_TYPE_CHECKED) { diff --git a/java/jsinterop/base/Js.java b/java/jsinterop/base/Js.java index 7c37a4a..9d89909 100644 --- a/java/jsinterop/base/Js.java +++ b/java/jsinterop/base/Js.java @@ -64,14 +64,12 @@ public static JsConstructorFn asConstructorFn(Class clazz) { } /** Returns {@code JsPropertyMap} view of provided object. */ - public static @Nullable JsPropertyMap<@Nullable Object> asPropertyMap( - @Nullable Object obj) { + public static @Nullable JsPropertyMap<@Nullable Object> asPropertyMap(@Nullable Object obj) { return uncheckedCast(obj); } /** Returns {@code JsArrayLike} view of provided array-like object. */ - public static @Nullable JsArrayLike<@Nullable Object> asArrayLike( - @Nullable Object obj) { + public static @Nullable JsArrayLike<@Nullable Object> asArrayLike(@Nullable Object obj) { // TODO(goktug): switch to custom $isInstance checkType(obj == null || InternalJsUtil.hasLength(obj)); return uncheckedCast(obj); @@ -139,8 +137,7 @@ public static byte asByte(Object obj) { * interface to a final Java class (like String). */ @SuppressWarnings({"TypeParameterUnusedInFormals", "unchecked"}) - public static T cast( - @DoNotAutobox @Nullable Object obj) { + public static T cast(@DoNotAutobox @Nullable Object obj) { return (T) obj; } diff --git a/java/jsinterop/base/JsArrayLike.java b/java/jsinterop/base/JsArrayLike.java index 29e25a5..4a99485 100644 --- a/java/jsinterop/base/JsArrayLike.java +++ b/java/jsinterop/base/JsArrayLike.java @@ -67,7 +67,7 @@ default void delete(int index) { @JsOverlay default List asList() { // Since it is hidden behind Arrays.asList, it is safe to do uncheckedCast. - T[] asArray = Js.uncheckedCast(this); + T[] asArray = Js.uncheckedCast(this); return Arrays.asList(asArray); } }