Make arrays instance of Cloneable.
Arrays are implicitly instances of Serializable and Cloneable (JLS 10.7).
Change-Id: I8cf270145246bc993b6d58ee4368417644cb5475
diff --git a/user/super/com/google/gwt/emul/java/io/Serializable.java b/user/super/com/google/gwt/emul/java/io/Serializable.java
index f47aa5d..3032baf 100644
--- a/user/super/com/google/gwt/emul/java/io/Serializable.java
+++ b/user/super/com/google/gwt/emul/java/io/Serializable.java
@@ -36,6 +36,7 @@
|| type.equals("number")
|| type.equals("string")
|| instance.getTypeMarker()
+ // Arrays are implicitly instances of Serializable (JLS 10.7).
|| instance.getClass().isArray();
}
// CHECKSTYLE_ON: end utility methods
diff --git a/user/super/com/google/gwt/emul/java/lang/Cloneable.java b/user/super/com/google/gwt/emul/java/lang/Cloneable.java
index 46581f4..74535b4 100644
--- a/user/super/com/google/gwt/emul/java/lang/Cloneable.java
+++ b/user/super/com/google/gwt/emul/java/lang/Cloneable.java
@@ -15,8 +15,23 @@
*/
package java.lang;
+import jsinterop.annotations.JsMethod;
+
/**
* Indicates that a class implements <code>clone()</code>.
*/
public interface Cloneable {
+
+ // CHECKSTYLE_OFF: Utility methods.
+ @JsMethod
+ static boolean $isInstance(HasCloneableTypeMarker instance) {
+ if (instance == null) {
+ return false;
+ }
+
+ return instance.getTypeMarker()
+ // Arrays are implicitly instances of Cloneable (JLS 10.7).
+ || instance.getClass().isArray();
+ }
+ // CHECKSTYLE_ON: end utility methods
}
diff --git a/user/super/com/google/gwt/emul/java/lang/HasCloneableTypeMarker.java b/user/super/com/google/gwt/emul/java/lang/HasCloneableTypeMarker.java
new file mode 100644
index 0000000..06df165
--- /dev/null
+++ b/user/super/com/google/gwt/emul/java/lang/HasCloneableTypeMarker.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2019 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package java.lang;
+
+import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsProperty;
+import jsinterop.annotations.JsType;
+
+@JsType(isNative = true, name = "*", namespace = JsPackage.GLOBAL)
+interface HasCloneableTypeMarker {
+ @JsProperty(name = "$implements__java_lang_Cloneable")
+ boolean getTypeMarker();
+}