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) {