You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2022/06/26 17:27:14 UTC

[groovy] branch GROOVY_4_0_X updated: Tweak finding `cloneArray` method

This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY_4_0_X by this push:
     new 8d95d66067 Tweak finding `cloneArray` method
8d95d66067 is described below

commit 8d95d6606782ddb77c866e097273c0284e3d86d7
Author: Daniel Sun <su...@apache.org>
AuthorDate: Mon Jun 27 01:22:29 2022 +0800

    Tweak finding `cloneArray` method
    
    (cherry picked from commit c18411fe233bd60d4d045d65d9bb04b459f95e12)
---
 src/main/java/groovy/lang/MetaClassImpl.java | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/main/java/groovy/lang/MetaClassImpl.java b/src/main/java/groovy/lang/MetaClassImpl.java
index 5a30b58c58..a5586381d2 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -1166,14 +1166,16 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
     private static class MethodHandleHolder {
         private static final MethodHandle CLONE_ARRAY_METHOD_HANDLE;
         static {
-            Optional<Method> methodOptional = Arrays.stream(ArrayUtil.class.getDeclaredMethods()).filter(m -> "cloneArray".equals(m.getName())).findFirst();
-            if (!methodOptional.isPresent()) {
-                throw new GroovyBugError("Failed to find `cloneArray` method in class `" + ArrayUtil.class.getName() + "`");
+            final Class<ArrayUtil> arrayUtilClass = ArrayUtil.class;
+            Method cloneArrayMethod;
+            try {
+                cloneArrayMethod = arrayUtilClass.getDeclaredMethod("cloneArray", Object[].class);
+            } catch (NoSuchMethodException e) {
+                throw new GroovyBugError("Failed to find `cloneArray` method in class `" + arrayUtilClass.getName() + "`", e);
             }
-            Method cloneArrayMethod = methodOptional.get();
 
             try {
-                CLONE_ARRAY_METHOD_HANDLE = MethodHandles.lookup().in(ArrayUtil.class).unreflect(cloneArrayMethod);
+                CLONE_ARRAY_METHOD_HANDLE = MethodHandles.lookup().in(arrayUtilClass).unreflect(cloneArrayMethod);
             } catch (IllegalAccessException e) {
                 throw new GroovyBugError("Failed to create method handle for " + cloneArrayMethod);
             }