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();
+}