Adds helpers to CharSequence and Comparable for J2CL
Change-Id: Ifc471c7a9565894ea4feaa5cc8659c7db46bf214
diff --git a/dev/core/test/com/google/gwt/dev/CompilerTest.java b/dev/core/test/com/google/gwt/dev/CompilerTest.java
index 3aee111..137e2ff 100644
--- a/dev/core/test/com/google/gwt/dev/CompilerTest.java
+++ b/dev/core/test/com/google/gwt/dev/CompilerTest.java
@@ -2548,6 +2548,8 @@
// comparisons.
staleTypeNames.removeAll(Arrays.asList(
"java.lang.Boolean",
+ "java.lang.CharSequence",
+ "java.lang.Comparable",
"java.lang.Double",
"java.lang.Number",
"java.lang.String",
diff --git a/user/super/com/google/gwt/emul/java/lang/CharSequence.java b/user/super/com/google/gwt/emul/java/lang/CharSequence.java
index a359d37..4286821 100644
--- a/user/super/com/google/gwt/emul/java/lang/CharSequence.java
+++ b/user/super/com/google/gwt/emul/java/lang/CharSequence.java
@@ -15,6 +15,10 @@
*/
package java.lang;
+import javaemul.internal.JsUtils;
+
+import jsinterop.annotations.JsMethod;
+
/**
* Abstracts the notion of a sequence of characters.
*/
@@ -27,4 +31,15 @@
@Override
String toString();
+
+ // CHECKSTYLE_OFF: Utility methods.
+ @JsMethod
+ static boolean $isInstance(Object instance) {
+ if (JsUtils.typeOf(instance).equals("string")) {
+ return true;
+ }
+
+ return instance != null && JsUtils.hasCharSequenceTypeMarker(instance);
+ }
+ // CHECKSTYLE_ON: end utility methods
}
diff --git a/user/super/com/google/gwt/emul/java/lang/Comparable.java b/user/super/com/google/gwt/emul/java/lang/Comparable.java
index 70d6c91..8e92784 100644
--- a/user/super/com/google/gwt/emul/java/lang/Comparable.java
+++ b/user/super/com/google/gwt/emul/java/lang/Comparable.java
@@ -15,6 +15,10 @@
*/
package java.lang;
+import javaemul.internal.JsUtils;
+
+import jsinterop.annotations.JsMethod;
+
/**
* An interface used a basis for implementing custom ordering. <a
* href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html">[Sun
@@ -24,4 +28,16 @@
*/
public interface Comparable<T> {
int compareTo(T other);
+
+ // CHECKSTYLE_OFF: Utility methods.
+ @JsMethod
+ static boolean $isInstance(Object instance) {
+ String type = JsUtils.typeOf(instance);
+ if (type.equals("boolean") || type.equals("number") || type.equals("string")) {
+ return true;
+ }
+
+ return instance != null && JsUtils.hasComparableTypeMarker(instance);
+ }
+ // CHECKSTYLE_ON: end utility methods
}
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 d9fad43..981f224 100644
--- a/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
+++ b/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
@@ -70,5 +70,13 @@
public static native String typeOf(Object o) /*-{
return typeof o;
}-*/;
+
+ public static native boolean hasComparableTypeMarker(Object o) /*-{
+ return o.$implements__java_lang_Comparable;
+ }-*/;
+
+ public static native boolean hasCharSequenceTypeMarker(Object o) /*-{
+ return o.$implements__java_lang_CharSequence;
+ }-*/;
}