From df63bc5c746d81ab05ed6767cccb14f12c7c58d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=88=9F?= Date: Sun, 1 Nov 2020 07:53:04 +0800 Subject: [PATCH] fix unsafe access warning --- .../alibaba/testable/agent/handler/TestClassHandler.java | 3 ++- .../agent/transformer/TestableClassTransformer.java | 3 ++- .../com/alibaba/testable/agent/util/AnnotationUtil.java | 4 ++-- .../com/alibaba/testable/agent/util/AnnotationUtilTest.java | 6 +++--- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/testable-agent/src/main/java/com/alibaba/testable/agent/handler/TestClassHandler.java b/testable-agent/src/main/java/com/alibaba/testable/agent/handler/TestClassHandler.java index 199ab38..46eab4e 100644 --- a/testable-agent/src/main/java/com/alibaba/testable/agent/handler/TestClassHandler.java +++ b/testable-agent/src/main/java/com/alibaba/testable/agent/handler/TestClassHandler.java @@ -130,7 +130,8 @@ public class TestClassHandler extends BaseClassHandler { private boolean isMockForConstructor(MethodNode mn) { for (AnnotationNode an : mn.visibleAnnotations) { - String method = AnnotationUtil.getAnnotationParameter(an, ConstPool.FIELD_TARGET_METHOD, null); + String method = AnnotationUtil.getAnnotationParameter + (an, ConstPool.FIELD_TARGET_METHOD, null, String.class); if (ConstPool.CONSTRUCTOR.equals(method)) { return true; } diff --git a/testable-agent/src/main/java/com/alibaba/testable/agent/transformer/TestableClassTransformer.java b/testable-agent/src/main/java/com/alibaba/testable/agent/transformer/TestableClassTransformer.java index 77c927e..1b8296d 100644 --- a/testable-agent/src/main/java/com/alibaba/testable/agent/transformer/TestableClassTransformer.java +++ b/testable-agent/src/main/java/com/alibaba/testable/agent/transformer/TestableClassTransformer.java @@ -90,7 +90,8 @@ public class TestableClassTransformer implements ClassFileTransformer { for (AnnotationNode an : mn.visibleAnnotations) { if (toDotSeparateFullClassName(an.desc).equals(ConstPool.TESTABLE_MOCK)) { String targetClass = ClassUtil.toSlashSeparateFullClassName(methodDescPair.left); - String targetMethod = AnnotationUtil.getAnnotationParameter(an, ConstPool.FIELD_TARGET_METHOD, mn.name); + String targetMethod = AnnotationUtil.getAnnotationParameter( + an, ConstPool.FIELD_TARGET_METHOD, mn.name, String.class); if (targetMethod.equals(ConstPool.CONSTRUCTOR)) { String sourceClassName = ClassUtil.getSourceClassName(cn.name); methodInfos.add(new MethodInfo(sourceClassName, targetMethod, mn.name, mn.desc)); diff --git a/testable-agent/src/main/java/com/alibaba/testable/agent/util/AnnotationUtil.java b/testable-agent/src/main/java/com/alibaba/testable/agent/util/AnnotationUtil.java index 06935ce..b15eeb0 100644 --- a/testable-agent/src/main/java/com/alibaba/testable/agent/util/AnnotationUtil.java +++ b/testable-agent/src/main/java/com/alibaba/testable/agent/util/AnnotationUtil.java @@ -10,11 +10,11 @@ public class AnnotationUtil { /** * Read value of annotation parameter */ - public static T getAnnotationParameter(AnnotationNode an, String key, T defaultValue) { + public static T getAnnotationParameter(AnnotationNode an, String key, T defaultValue, Class clazz) { if (an.values != null) { for (int i = 0; i < an.values.size(); i += 2) { if (an.values.get(i).equals(key)) { - return (T)(an.values.get(i + 1)); + return clazz.cast(an.values.get(i + 1)); } } } diff --git a/testable-agent/src/test/java/com/alibaba/testable/agent/util/AnnotationUtilTest.java b/testable-agent/src/test/java/com/alibaba/testable/agent/util/AnnotationUtilTest.java index da2c4bb..8aab0f0 100644 --- a/testable-agent/src/test/java/com/alibaba/testable/agent/util/AnnotationUtilTest.java +++ b/testable-agent/src/test/java/com/alibaba/testable/agent/util/AnnotationUtilTest.java @@ -12,9 +12,9 @@ class AnnotationUtilTest { void should_get_annotation_parameter() { AnnotationNode an = new AnnotationNode(""); an.values = listOf((Object)"testKey", "testValue", "demoKey", "demoValue"); - assertEquals("testValue", AnnotationUtil.getAnnotationParameter(an, "testKey", "none")); - assertEquals("demoValue", AnnotationUtil.getAnnotationParameter(an, "demoKey", "none")); - assertEquals("none", AnnotationUtil.getAnnotationParameter(an, "testValue", "none")); + assertEquals("testValue", AnnotationUtil.getAnnotationParameter(an, "testKey", "none", String.class)); + assertEquals("demoValue", AnnotationUtil.getAnnotationParameter(an, "demoKey", "none", String.class)); + assertEquals("none", AnnotationUtil.getAnnotationParameter(an, "testValue", "none", String.class)); } }