diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/AbstractClassEnhancePluginDefine.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/AbstractClassEnhancePluginDefine.java
index 0506fa672..ccf1c3b99 100644
--- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/AbstractClassEnhancePluginDefine.java
+++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/AbstractClassEnhancePluginDefine.java
@@ -6,9 +6,23 @@ import com.a.eye.skywalking.util.StringUtil;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.pool.TypePool.Resolution;
-public abstract class AbstractClassEnhancePluginDefine{
+/**
+ * Basic abstract class of all sky-walking auto-instrumentation plugins.
+ *
+ * It provides the outline of enhancing the target class.
+ * If you want to know more about enhancing, you should go to see {@link com.a.eye.skywalking.plugin.interceptor.enhance.ClassEnhancePluginDefine}
+ */
+public abstract class AbstractClassEnhancePluginDefine {
private static ILog logger = LogManager.getLogger(AbstractClassEnhancePluginDefine.class);
+ /**
+ * Main entrance of enhancing the class.
+ *
+ * @param transformClassName target class.
+ * @param builder byte-buddy's builder to manipulate target class's bytecode.
+ * @return be defined builder.
+ * @throws PluginException, when set builder failure.
+ */
public DynamicType.Builder> define(String transformClassName, DynamicType.Builder> builder) throws PluginException {
String interceptorDefineClassName = this.getClass().getName();
@@ -48,15 +62,22 @@ public abstract class AbstractClassEnhancePluginDefine{
protected abstract DynamicType.Builder> enhance(String enhanceOriginClassName, DynamicType.Builder> newClassBuilder) throws PluginException;
/**
- * 返回要被增强的类,应当返回类全名或前匹配(返回*号结尾)
+ * Define the classname of target class.
*
- * @return
+ * @return class full name.
*/
protected abstract String enhanceClassName();
/**
- * 返回一个类名的列表
- * 如果列表中的类在JVM中存在,则enhance可以会尝试生效
+ * Witness classname list.
+ * Why need witness classname? Let's see like this:
+ * A library existed two released versions (like 1.0, 2.0), which include the same target classes,
+ * but because of version iterator, they may have the same name, but different methods, or different method arguments list.
+ * So,
+ * if I want to target the particular version (let's say 1.0 for example), version number is obvious not an option,
+ * this is the moment you need "Witness classes".
+ * You can add any classes only in this particular release version ( something like class com.company.1.x.A, only in 1.0 ),
+ * and you can achieve the goal.
*
* @return
*/
diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/PluginDefineCategory.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/PluginDefineCategory.java
index e177f8738..1cc795b80 100644
--- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/PluginDefineCategory.java
+++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/PluginDefineCategory.java
@@ -10,8 +10,6 @@ public class PluginDefineCategory {
private final Map exactClassEnhancePluginDefineMapping =
new HashMap();
- private final Map blurryClassEnhancePluginDefineMapping =
- new HashMap();
private PluginDefineCategory(List plugins) {
for (AbstractClassEnhancePluginDefine plugin : plugins) {
@@ -21,13 +19,7 @@ public class PluginDefineCategory {
continue;
}
- if (enhanceClassName.endsWith("*")) {
- // 加上. 为了区分 com.ai.test com.ai.test1
- blurryClassEnhancePluginDefineMapping
- .put(enhanceClassName.substring(0, enhanceClassName.length() - 1), plugin);
- } else {
exactClassEnhancePluginDefineMapping.put(enhanceClassName, plugin);
- }
}
}
@@ -38,27 +30,11 @@ public class PluginDefineCategory {
return pluginDefineCategory;
}
-
- public Map getExactClassEnhancePluginDefineMapping() {
- return pluginDefineCategory.exactClassEnhancePluginDefineMapping;
- }
-
- public Map getBlurryClassEnhancePluginDefineMapping() {
- return blurryClassEnhancePluginDefineMapping;
- }
-
public AbstractClassEnhancePluginDefine findPluginDefine(String enhanceClassName) {
if (exactClassEnhancePluginDefineMapping.containsKey(enhanceClassName)) {
return exactClassEnhancePluginDefineMapping.get(enhanceClassName);
}
- for (Map.Entry entry : blurryClassEnhancePluginDefineMapping
- .entrySet()) {
- if (enhanceClassName.startsWith(entry.getKey())) {
- return entry.getValue();
- }
- }
-
return null;
}
}
diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/TracingBootstrap.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/TracingBootstrap.java
index b78e25fd4..d4a9c14bb 100644
--- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/TracingBootstrap.java
+++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/TracingBootstrap.java
@@ -14,8 +14,9 @@ import java.util.Arrays;
import java.util.List;
/**
- * 替代应用函数的main函数入口,确保在程序入口处运行
- * 用于替代-javaagent的另一种模式
+ * A test entrance for enhancing class.
+ * This should be used only in bytecode-manipulate test.
+ * And make sure, all classes which need to be enhanced, must not be loaded.
*
* @author wusheng
*/
@@ -25,6 +26,15 @@ public class TracingBootstrap {
private TracingBootstrap() {
}
+ /**
+ * Main entrance for testing.
+ * @param args includes target classname ( which exists "public static void main(String[] args)" ) and arguments list.
+ * @throws PluginException
+ * @throws ClassNotFoundException
+ * @throws NoSuchMethodException
+ * @throws InvocationTargetException
+ * @throws IllegalAccessException
+ */
public static void main(String[] args)
throws PluginException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException,
IllegalAccessException {
diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/EnhancedClassInstanceContext.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/EnhancedClassInstanceContext.java
index 718ba814e..7c8df094b 100644
--- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/EnhancedClassInstanceContext.java
+++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/plugin/interceptor/EnhancedClassInstanceContext.java
@@ -4,26 +4,57 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
- * 被增强的类实例,需扩展的context属性,用于在不同的方法,或者构造函数间保存实例
+ * Enhanced instance field type.
+ *
+ * Any plugins({@link com.a.eye.skywalking.plugin.AbstractClassEnhancePluginDefine}'s subclass) override
+ * {@link com.a.eye.skywalking.plugin.interceptor.enhance.ClassEnhancePluginDefine#getConstructorsInterceptPoints}
+ * and
+ * {@link com.a.eye.skywalking.plugin.interceptor.enhance.ClassEnhancePluginDefine#getInstanceMethodsInterceptPoints}
+ * will add a field with this type.
*
* @author wusheng
*
*/
public class EnhancedClassInstanceContext {
+ /**
+ * extend field, can store any instance as you want.
+ */
private Map