IDEA-152680 clone() method evaluation is not supported on array argument idea/146.477
authorEgor.Ushakov <egor.ushakov@jetbrains.com>
Thu, 10 Mar 2016 12:07:27 +0000 (15:07 +0300)
committerEgor.Ushakov <egor.ushakov@jetbrains.com>
Thu, 10 Mar 2016 12:08:31 +0000 (15:08 +0300)
java/debugger/openapi/src/com/intellij/debugger/engine/DebuggerUtils.java

index 7819a3dd076df83b99d449f3e3f274259892113d..542fd55570da9a70db0b27a3784a4d4f0c31e14b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -153,10 +153,17 @@ public abstract class DebuggerUtils {
   public static Method findMethod(@NotNull ReferenceType refType, @NonNls String methodName, @Nullable @NonNls String methodSignature) {
     if (refType instanceof ArrayType) {
       // for array types methodByName() in JDI always returns empty list
-      final Method method = findMethod(refType.virtualMachine().classesByName(CommonClassNames.JAVA_LANG_OBJECT).get(0), methodName, methodSignature);
+      Method method = findMethod(refType.virtualMachine().classesByName(CommonClassNames.JAVA_LANG_OBJECT).get(0), methodName, methodSignature);
       if (method != null) {
         return method;
       }
+      // for arrays, clone signature may return array of objects, there is no such method in Object class
+      if ("clone".equals(methodName) && "()[Ljava/lang/Object;".equals(methodSignature)) {
+        method = findMethod(refType.virtualMachine().classesByName(CommonClassNames.JAVA_LANG_OBJECT).get(0), "clone", null);
+        if (method != null) {
+          return method;
+        }
+      }
     }
 
     Method method = null;