diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java index 8a4a0a9fe..a4493cb10 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java @@ -121,8 +121,8 @@ public class EnhanceClazz4Interceptor { interceptor); for (MethodMatcher methodMatcher : methodMatchers) { - logger.debug("prepare to enhance class {} method [{}] ", - enhanceOriginClassName, methodMatcher.getMethodMatchDescribe()); + logger.debug("prepare to enhance class {} {}", + enhanceOriginClassName, methodMatcher); newClassBuilder = newClassBuilder.method( methodMatcher.builderMatcher()).intercept( MethodDelegation.to(classMethodInterceptor)); diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/MethodMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/MethodMatcher.java index ab2cb3db8..b9feacf62 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/MethodMatcher.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/MethodMatcher.java @@ -90,4 +90,35 @@ public abstract class MethodMatcher { } } + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(" the method named " + getMethodMatchDescribe()); + if (getModifier() != null) { + stringBuilder.append(" with " + getModifier() + " modifier"); + } + + if (getArgNum() > -1) { + stringBuilder.append("," + getArgNum() + " arguments"); + } + + if (getArgTypeArray() != null) { + stringBuilder.append(",argument type are "); + for (Class argType : getArgTypeArray()) { + stringBuilder.append(argType.getName()); + } + } + return stringBuilder.toString(); + } + + protected int getArgNum() { + return argNum; + } + + protected Class[] getArgTypeArray() { + return argTypeArray; + } + + protected Modifier getModifier() { + return modifier; + } } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/AnyMethodMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/AnyMethodMatcher.java index 7ff417286..03608b354 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/AnyMethodMatcher.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/AnyMethodMatcher.java @@ -9,11 +9,16 @@ import static net.bytebuddy.matcher.ElementMatchers.any; public class AnyMethodMatcher extends MethodMatcher { public AnyMethodMatcher() { - super("*"); + super("any method"); } @Override public ElementMatcher.Junction builderMatcher() { return any(); } + + @Override + public String toString() { + return getMethodMatchDescribe(); + } } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodExclusiveMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodExclusiveMatcher.java index 5ea3cbb83..6a2ef1249 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodExclusiveMatcher.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodExclusiveMatcher.java @@ -38,4 +38,28 @@ public class MethodExclusiveMatcher extends MethodMatcher { ElementMatcher.Junction matcher = named(getMethodMatchDescribe()); return not(mergeArgumentsIfNecessary(matcher)); } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder("any method exclude "); + + stringBuilder.append(" method named " + getMethodMatchDescribe()); + + if (getModifier() != null) { + stringBuilder.append(getModifier()); + } + + if (getArgNum() > -1) { + stringBuilder.append(" with " + getArgNum() + " arguments"); + } + + if (getArgTypeArray() != null) { + stringBuilder.append(" with "); + for (Class argType : getArgTypeArray()) { + stringBuilder.append(argType.getName()); + } + } + + return stringBuilder.toString(); + } } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodRegexMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodRegexMatcher.java index 047eba467..22df3b18d 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodRegexMatcher.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodRegexMatcher.java @@ -38,4 +38,5 @@ public class MethodRegexMatcher extends MethodMatcher { ElementMatcher.Junction matcher = nameMatches(getMethodMatchDescribe()); return mergeArgumentsIfNecessary(matcher); } + } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodsExclusiveMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodsExclusiveMatcher.java index 96e411bef..f15b85b45 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodsExclusiveMatcher.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/MethodsExclusiveMatcher.java @@ -46,4 +46,19 @@ public class MethodsExclusiveMatcher extends MethodMatcher { return not(result); } + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder("any method exclude the method(s) as follow:\n "); + int i = 0; + for (MethodMatcher methodMatcher : matchers) { + if (i == 0) { + stringBuilder.append(methodMatcher.toString() + " or "); + i++; + } else { + stringBuilder.append(methodMatcher.toString()); + } + } + + return stringBuilder.toString(); + } } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/PrivateMethodMatcher.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/PrivateMethodMatcher.java new file mode 100644 index 000000000..374415c63 --- /dev/null +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/matcher/PrivateMethodMatcher.java @@ -0,0 +1,24 @@ +package com.ai.cloud.skywalking.plugin.interceptor.matcher; + +import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import net.bytebuddy.matcher.ElementMatchers; + +import static net.bytebuddy.matcher.ElementMatchers.any; + +public class PrivateMethodMatcher extends MethodMatcher { + public PrivateMethodMatcher() { + super("any private method"); + } + + @Override + public ElementMatcher.Junction builderMatcher() { + return any().and(ElementMatchers.isPrivate()); + } + + @Override + public String toString() { + return getMethodMatchDescribe(); + } +} diff --git a/skywalking-api/src/test/java/test/ai/cloud/matcher/TestMatcherDefine.java b/skywalking-api/src/test/java/test/ai/cloud/matcher/TestMatcherDefine.java index 6af67b91e..90bad5df4 100644 --- a/skywalking-api/src/test/java/test/ai/cloud/matcher/TestMatcherDefine.java +++ b/skywalking-api/src/test/java/test/ai/cloud/matcher/TestMatcherDefine.java @@ -4,6 +4,7 @@ import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor; import com.ai.cloud.skywalking.plugin.interceptor.InterceptorDefine; import com.ai.cloud.skywalking.plugin.interceptor.MethodMatcher; import com.ai.cloud.skywalking.plugin.interceptor.matcher.MethodsExclusiveMatcher; +import com.ai.cloud.skywalking.plugin.interceptor.matcher.PrivateMethodMatcher; import com.ai.cloud.skywalking.plugin.interceptor.matcher.SimpleMethodMatcher; /** @@ -18,8 +19,9 @@ public class TestMatcherDefine implements InterceptorDefine { @Override public MethodMatcher[] getBeInterceptedMethodsMatchers() { return new MethodMatcher[]{ - new MethodsExclusiveMatcher("set", "get"), - new SimpleMethodMatcher(MethodMatcher.Modifier.Private, "set") + new PrivateMethodMatcher(), + new MethodsExclusiveMatcher(new SimpleMethodMatcher("set"), new SimpleMethodMatcher(MethodMatcher.Modifier.Public,"get")), + new SimpleMethodMatcher(MethodMatcher.Modifier.Private, "set", 1) }; }