From 351b3399e6e0c70ebd8b2c39b978d9fef6b062fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=88=9F?= Date: Sun, 20 Feb 2022 22:22:00 +0800 Subject: [PATCH] feat: elastic plugin class should contain only one constructor --- .../alibaba/testable/agent/handler/OmniClassHandler.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 e51b6a6..d6f5d39 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 @@ -38,7 +38,7 @@ public class OmniClassHandler extends BaseClassHandler { @Override protected void transform(ClassNode cn) { - if (isInterfaceOrAtom(cn) || isJunitTestClass(cn) || isUninstantiableClass(cn) || hasSpecialAnnotation(cn)) { + if (isInterfaceOrAtom(cn) || isUniqueConstructorClass(cn) || isUninstantiableClass(cn) || hasSpecialAnnotation(cn)) { return; } addConstructorWithVoidTypeParameter(cn); @@ -89,7 +89,11 @@ public class OmniClassHandler extends BaseClassHandler { return (cn.access & ACC_INTERFACE) != 0 || cn.superName == null || VOID_TYPE.equals(cn.name); } - private boolean isJunitTestClass(ClassNode cn) { + private boolean isUniqueConstructorClass(ClassNode cn) { + // elastic plugin class should contain only one constructor + if ("org/elasticsearch/plugins/Plugin".equals(cn.superName)) { + return true; + } // junit require test class contains only one constructor for (MethodNode mn : cn.methods) { if (mn.visibleAnnotations == null) {