From a1f4e82fc4b15c3df81eda24fa07369e232e309c Mon Sep 17 00:00:00 2001 From: wusheng Date: Wed, 4 Jan 2017 12:06:01 +0800 Subject: [PATCH] Add comments on the two new match. #78 --- .../AllObjectDefaultMethodsMatch.java | 15 ++++++++-- .../bytebuddy/ArgumentTypeNameMatch.java | 29 +++++++++++++++++++ .../jedis/v2/define/JedisPluginDefine.java | 1 - 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/bytebuddy/AllObjectDefaultMethodsMatch.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/bytebuddy/AllObjectDefaultMethodsMatch.java index da1cd1c05..2992246d1 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/bytebuddy/AllObjectDefaultMethodsMatch.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/bytebuddy/AllObjectDefaultMethodsMatch.java @@ -13,9 +13,15 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; * Created by wusheng on 2017/1/3. */ public enum AllObjectDefaultMethodsMatch implements ElementMatcher { + /** + * Stay in singleton. + */ INSTANCE; - private ElementMatcher.Junction matcher; + /** + * The matcher will be init in constructor and stay permanent. + */ + private final ElementMatcher.Junction matcher; AllObjectDefaultMethodsMatch() { ElementMatcher.Junction[] allDefaultMethods = new ElementMatcher.Junction[] {named("finalize").and(takesArguments(0)).and(ElementMatchers.isPublic()), @@ -30,13 +36,16 @@ public enum AllObjectDefaultMethodsMatch implements ElementMatcherisPublic()), named("notifyAll").and(takesArguments(0)).and(ElementMatchers.isPublic())}; + ElementMatcher.Junction newMatcher = null; for (int i = 0; i < allDefaultMethods.length; i++) { if(i == 0){ - matcher = allDefaultMethods[i]; + newMatcher = allDefaultMethods[i]; }else{ - matcher.or(allDefaultMethods[i]); + newMatcher = newMatcher.or(allDefaultMethods[i]); } } + + matcher = newMatcher; } @Override diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/bytebuddy/ArgumentTypeNameMatch.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/bytebuddy/ArgumentTypeNameMatch.java index a80a2610c..6efebf36f 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/bytebuddy/ArgumentTypeNameMatch.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/bytebuddy/ArgumentTypeNameMatch.java @@ -4,18 +4,39 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; /** + * Argument Type match. + * Similar with {@link net.bytebuddy.matcher.ElementMatchers#takesArgument}, + * the only different between them is this match use {@link String} to declare the type, instead of {@link Class}. + * This can avoid the classloader risk. + * * Created by wusheng on 2016/12/1. */ public class ArgumentTypeNameMatch implements ElementMatcher { + /** + * the index of arguments list. + */ private int index; + /** + * the target argument type at {@link ArgumentTypeNameMatch#index} of the arguments list. + */ private String argumentTypeName; + /** + * declare the match target method with the certain index and type. + * @param index the index of arguments list. + * @param argumentTypeName target argument type + */ private ArgumentTypeNameMatch(int index, String argumentTypeName) { this.index = index; this.argumentTypeName = argumentTypeName; } + /** + * Match the target method. + * @param target target method description. + * @return true if matched. or false. + */ @Override public boolean matches(MethodDescription target) { if (target.getParameters().size() > index) { @@ -25,6 +46,14 @@ public class ArgumentTypeNameMatch implements ElementMatcher return false; } + /** + * The static method to create {@link ArgumentTypeNameMatch} + * This is a delegate method to follow byte-buddy {@link ElementMatcher}'s code style. + * + * @param index the index of arguments list. + * @param argumentTypeName target argument type + * @return new {@link ArgumentTypeNameMatch} instance. + */ public static ElementMatcher takesArgumentWithType(int index, String argumentTypeName){ return new ArgumentTypeNameMatch(index, argumentTypeName); } diff --git a/skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/define/JedisPluginDefine.java b/skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/define/JedisPluginDefine.java index 24b847a0a..651eb0908 100644 --- a/skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/define/JedisPluginDefine.java +++ b/skywalking-sniffer/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/com/a/eye/skywalking/plugin/jedis/v2/define/JedisPluginDefine.java @@ -1,7 +1,6 @@ package com.a.eye.skywalking.plugin.jedis.v2.define; import com.a.eye.skywalking.plugin.bytebuddy.AllObjectDefaultMethodsMatch; -import com.a.eye.skywalking.plugin.bytebuddy.ArgumentTypeNameMatch; import com.a.eye.skywalking.plugin.interceptor.ConstructorInterceptPoint; import com.a.eye.skywalking.plugin.interceptor.InstanceMethodsInterceptPoint; import com.a.eye.skywalking.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;