From a463bcbfd9d38cc192940fc4920d5807552b39d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=88=9F?= Date: Sun, 11 Dec 2022 12:03:37 +0800 Subject: [PATCH] fix: correctly handle array type --- .../com/alibaba/testable/agent/handler/OmniClassHandler.java | 2 +- .../java/com/alibaba/testable/agent/util/BytecodeUtil.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/testable-agent/src/main/java/com/alibaba/testable/agent/handler/OmniClassHandler.java b/testable-agent/src/main/java/com/alibaba/testable/agent/handler/OmniClassHandler.java index dd42dd0..3ca5777 100644 --- a/testable-agent/src/main/java/com/alibaba/testable/agent/handler/OmniClassHandler.java +++ b/testable-agent/src/main/java/com/alibaba/testable/agent/handler/OmniClassHandler.java @@ -153,7 +153,7 @@ public class OmniClassHandler extends BaseClassHandler { il.add(new InsnNode(ICONST_0)); il.add(new TypeInsnNode(ANEWARRAY, CLASS_CONSTRUCTION_OPTION)); il.add(new MethodInsnNode(INVOKESTATIC, CLASS_OMNI_CONSTRUCTOR, METHOD_NEW_INSTANCE, METHOD_DESC_NEW_INSTANCE, false)); - il.add(new TypeInsnNode(CHECKCAST, ClassUtil.toSlashSeparateJavaStyleName(p))); + il.add(new TypeInsnNode(CHECKCAST, (p.startsWith("[")) ? p : ClassUtil.toSlashSeparateJavaStyleName(p))); } il.add(new MethodInsnNode(INVOKESPECIAL, superName, CONSTRUCTOR, METHOD_START + StringUtil.join("", parameters) + VOID_METHOD_END, false)); diff --git a/testable-agent/src/main/java/com/alibaba/testable/agent/util/BytecodeUtil.java b/testable-agent/src/main/java/com/alibaba/testable/agent/util/BytecodeUtil.java index da8d5bb..57bea4b 100644 --- a/testable-agent/src/main/java/com/alibaba/testable/agent/util/BytecodeUtil.java +++ b/testable-agent/src/main/java/com/alibaba/testable/agent/util/BytecodeUtil.java @@ -187,6 +187,9 @@ public class BytecodeUtil { put(IFNONNULL, -1); }}; + /** + * Java primitive type name to bytecode mapping + */ public static Map PRIMITIVE_TYPE_NAME_MAP = new HashMap() {{ put("byte", String.valueOf((char)TYPE_BYTE)); put("char", String.valueOf((char)TYPE_CHAR));