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