Make Boolean, Double and String compatible with j2cl.
Change-Id: Ic3e094041dd620084b547dc945357c36de6cf072
diff --git a/dev/core/super/javaemul/internal/ArrayStamper.java b/dev/core/super/javaemul/internal/ArrayStamper.java
index a6a9ed2..5c3d828 100644
--- a/dev/core/super/javaemul/internal/ArrayStamper.java
+++ b/dev/core/super/javaemul/internal/ArrayStamper.java
@@ -18,7 +18,7 @@
/**
* A utility to provide array stamping. Provided as a separate class to simplify super-source.
*/
-class ArrayStamper {
+public class ArrayStamper {
public static native <T> T[] stampJavaTypeInfo(Object array, T[] referenceType) /*-{
return @com.google.gwt.lang.Array::stampJavaTypeInfo(*)(array, referenceType);
}-*/;
diff --git a/user/super/com/google/gwt/emul/java/lang/Boolean.java b/user/super/com/google/gwt/emul/java/lang/Boolean.java
index 9d4a1a4..a97f813 100644
--- a/user/super/com/google/gwt/emul/java/lang/Boolean.java
+++ b/user/super/com/google/gwt/emul/java/lang/Boolean.java
@@ -15,6 +15,8 @@
*/
package java.lang;
+import static javaemul.internal.InternalPreconditions.checkNotNull;
+
import java.io.Serializable;
/**
@@ -88,19 +90,23 @@
$createBoolean(s);
}
- public native boolean booleanValue() /*-{
- return @javaemul.internal.InternalPreconditions::checkNotNull(Ljava/lang/Object;)(this);
+ public boolean booleanValue() {
+ return unsafeCast(checkNotNull(this));
+ }
+
+ private native boolean unsafeCast(Object value) /*-{
+ return value;
}-*/;
@Override
public int compareTo(Boolean b) {
return compare(booleanValue(), b.booleanValue());
- };
+ }
@Override
- public native boolean equals(Object o) /*-{
- return this === o;
- }-*/;
+ public boolean equals(Object o) {
+ return checkNotNull(this) == o;
+ }
@Override
public int hashCode() {
diff --git a/user/super/com/google/gwt/emul/java/lang/Double.java b/user/super/com/google/gwt/emul/java/lang/Double.java
index 2151657..7808fe9 100644
--- a/user/super/com/google/gwt/emul/java/lang/Double.java
+++ b/user/super/com/google/gwt/emul/java/lang/Double.java
@@ -15,6 +15,8 @@
*/
package java.lang;
+import static javaemul.internal.InternalPreconditions.checkNotNull;
+
import javaemul.internal.JsUtils;
/**
@@ -304,14 +306,18 @@
}
@Override
- public native double doubleValue() /*-{
- return @javaemul.internal.InternalPreconditions::checkNotNull(Ljava/lang/Object;)(this);
+ public double doubleValue() {
+ return unsafeCast(checkNotNull(this));
+ }
+
+ private native double unsafeCast(Object instance) /*-{
+ return instance;
}-*/;
@Override
- public native boolean equals(Object o) /*-{
- return this === o;
- }-*/;
+ public boolean equals(Object o) {
+ return checkNotNull(this) == o;
+ }
@Override
public float floatValue() {
diff --git a/user/super/com/google/gwt/emul/java/lang/String.java b/user/super/com/google/gwt/emul/java/lang/String.java
index 75cf4ab..6bf9e92 100644
--- a/user/super/com/google/gwt/emul/java/lang/String.java
+++ b/user/super/com/google/gwt/emul/java/lang/String.java
@@ -26,6 +26,7 @@
import java.util.Locale;
import javaemul.internal.ArrayHelper;
+import javaemul.internal.ArrayStamper;
import javaemul.internal.EmulatedCharset;
import javaemul.internal.HashCodes;
import javaemul.internal.annotations.DoNotInline;
@@ -157,13 +158,6 @@
// CHECKSTYLE_OFF: This class has special needs.
- /**
- * @skip
- */
- static String[] __createArray(int numElements) {
- return new String[numElements];
- }
-
static native String __substr(String str, int beginIndex, int len) /*-{
return str.substr(beginIndex, len);
}-*/;
@@ -175,7 +169,7 @@
*
* @skip
*/
- static String __translateReplaceString(String replaceStr) {
+ private static String translateReplaceString(String replaceStr) {
int pos = 0;
while (0 <= (pos = replaceStr.indexOf("\\", pos))) {
if (replaceStr.charAt(pos + 1) == '$') {
@@ -188,8 +182,6 @@
return replaceStr;
}
-
-
// CHECKSTYLE_ON
private static native int compareTo(String thisStr, String otherStr) /*-{
@@ -532,13 +524,19 @@
return regionMatches(false, toffset, other, ooffset, len);
}
- public native String replace(char from, char to) /*-{
+ public String replace(char from, char to) {
// Translate 'from' into unicode escape sequence (\\u and a four-digit hexadecimal number).
// Escape sequence replacement is used instead of a string literal replacement
// in order to escape regexp special characters (e.g. '.').
- var hex = @java.lang.Integer::toHexString(I)(from);
- var regex = "\\u" + "0000".substring(hex.length) + hex;
- return this.replace(RegExp(regex, "g"), String.fromCharCode(to));
+ String hex = Integer.toHexString(from);
+ String regex = "\\u" + "0000".substring(hex.length()) + hex;
+ Object jsRegEx = createRegEx(regex, "g");
+ String replace = fromCharCode(to);
+ return replace(jsRegEx, replace);
+ }
+
+ private native String fromCharCode(char to) /*-{
+ return String.fromCharCode(to);
}-*/;
public String replace(CharSequence from, CharSequence to) {
@@ -565,10 +563,11 @@
*
* TODO(jat): properly handle Java regex syntax
*/
- public native String replaceAll(String regex, String replace) /*-{
- replace = @java.lang.String::__translateReplaceString(Ljava/lang/String;)(replace);
- return this.replace(RegExp(regex, "g"), replace);
- }-*/;
+ public String replaceAll(String regex, String replace) {
+ replace = translateReplaceString(replace);
+ Object jsRegEx = createRegEx(regex, "g");
+ return replace(jsRegEx, replace);
+ }
/**
* Regular expressions vary from the standard implementation. The
@@ -578,9 +577,18 @@
*
* TODO(jat): properly handle Java regex syntax
*/
- public native String replaceFirst(String regex, String replace) /*-{
- replace = @java.lang.String::__translateReplaceString(Ljava/lang/String;)(replace);
- return this.replace(RegExp(regex), replace);
+ public String replaceFirst(String regex, String replace) {
+ replace = translateReplaceString(replace);
+ Object jsRegEx = createRegEx(regex, "");
+ return replace(jsRegEx, replace);
+ }
+
+ private native Object createRegEx(String regex, String mode) /*-{
+ return RegExp(regex, mode);
+ }-*/;
+
+ private native String replace(Object regex, String replace) /*-{
+ return this.replace(regex, replace);
}-*/;
/**
@@ -601,7 +609,13 @@
*
* TODO(jat): properly handle Java regex syntax
*/
- public native String[] split(String regex, int maxMatch) /*-{
+ public String[] split(String regex, int maxMatch) {
+ String[] jsArrayString = split0(regex, maxMatch);
+ ArrayStamper.stampJavaTypeInfo(jsArrayString, new String[0]);
+ return jsArrayString;
+ }
+
+ public native String[] split0(String regex, int maxMatch) /*-{
// The compiled regular expression created from the string
var compiled = new RegExp(regex, "g");
// the Javascipt array to hold the matches prior to conversion
@@ -648,11 +662,7 @@
out.splice(lastNonEmpty, out.length - lastNonEmpty);
}
}
- var jr = @java.lang.String::__createArray(I)(out.length);
- for ( var i = 0; i < out.length; ++i) {
- jr[i] = out[i];
- }
- return jr;
+ return out;
}-*/;
public boolean startsWith(String prefix) {