mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-20 10:16:13 +10:00
git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-tomcat-profiler/trunk@461 84d0f5b1-2673-498c-a247-62c4ff18d310
125 lines
3.9 KiB
Java
125 lines
3.9 KiB
Java
package com.profiler.modifier;
|
|
|
|
import com.profiler.logging.Logger;
|
|
|
|
import javassist.ClassPool;
|
|
import javassist.CtClass;
|
|
import javassist.CtConstructor;
|
|
import javassist.CtMethod;
|
|
|
|
public abstract class AbstractModifier {
|
|
|
|
private static final Logger logger = Logger.getLogger(AbstractModifier.class);
|
|
|
|
public static void printClassInfo(String className) {
|
|
logger.debug("Printing Class Info of [" + className + "]");
|
|
try {
|
|
ClassPool pool = ClassPool.getDefault();
|
|
logger.debug("try");
|
|
String javaassistClassName = className.replace('/', '.');
|
|
logger.debug("replace");
|
|
CtClass cc = pool.get(javaassistClassName);
|
|
logger.debug("ClassName:" + javaassistClassName);
|
|
CtConstructor[] constructorList = cc.getConstructors();
|
|
|
|
for (CtConstructor cons : constructorList) {
|
|
try {
|
|
String signature = cons.getSignature();
|
|
logger.info("Constructor signature:%s", signature);
|
|
} catch (Exception e) {
|
|
logger.error(e.getMessage());
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
CtMethod[] methodList = cc.getDeclaredMethods();
|
|
|
|
for (CtMethod tempMethod : methodList) {
|
|
try {
|
|
String methodName = tempMethod.getLongName();
|
|
|
|
logger.debug("MethodName:" + methodName);
|
|
|
|
CtClass[] params = tempMethod.getParameterTypes();
|
|
|
|
if (params.length != 0) {
|
|
int paramsLength = params.length;
|
|
for (int loop = paramsLength - 1; loop > 0; loop--) {
|
|
logger.debug("Param" + loop + ":" + params[loop].getName());
|
|
}
|
|
} else {
|
|
logger.debug(" No params");
|
|
}
|
|
|
|
logger.debug("ReturnType=" + tempMethod.getReturnType().getName());
|
|
} catch (Exception methodException) {
|
|
logger.error("Exception : " + methodException.getMessage());
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
logger.error(e.getMessage());
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public static byte[] addBeforeAfterLogics(ClassPool classPool, String javassistClassName) {
|
|
try {
|
|
CtClass cc = classPool.get(javassistClassName);
|
|
CtMethod[] methods = cc.getDeclaredMethods();
|
|
|
|
for (CtMethod method : methods) {
|
|
if (!method.isEmpty()) {
|
|
String methodName = method.getName();
|
|
CtClass[] params = method.getParameterTypes();
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
if (params.length != 0) {
|
|
int paramsLength = params.length;
|
|
|
|
for (int loop = paramsLength - 1; loop > 0; loop--) {
|
|
sb.append(params[loop].getName()).append(",");
|
|
}
|
|
// sb.substring(0, sb.length()-2);
|
|
}
|
|
method.insertBefore("{System.out.println(\"*****" + javassistClassName + "." + methodName + "(" + sb + ") is started.\");}");
|
|
method.insertAfter("{System.out.println(\"*****" + javassistClassName + "." + methodName + "(" + sb + ") is finished.\");}");
|
|
} else {
|
|
logger.warn(method.getLongName() + " is empty !!!!!");
|
|
}
|
|
}
|
|
|
|
CtConstructor[] constructors = cc.getConstructors();
|
|
|
|
for (CtConstructor constructor : constructors) {
|
|
|
|
if (!constructor.isEmpty()) {
|
|
CtClass[] params = constructor.getParameterTypes();
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
if (params.length != 0) {
|
|
int paramsLength = params.length;
|
|
for (int loop = paramsLength - 1; loop > 0; loop--) {
|
|
sb.append(params[loop].getName()).append(",");
|
|
}
|
|
// sb.substring(0, sb.length()-2);
|
|
}
|
|
|
|
constructor.insertBefore("{System.out.println(\"*****" + javassistClassName + " Constructor:Param=(" + sb + ") is started.\");}");
|
|
constructor.insertAfter("{System.out.println(\"*****" + javassistClassName + " Constructor:Param=(" + sb + ") is finished.\");}");
|
|
} else {
|
|
logger.warn(constructor.getLongName() + " is empty !!!!!");
|
|
}
|
|
}
|
|
return cc.toBytecode();
|
|
} catch (Exception e) {
|
|
logger.error(e.getMessage());
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static void printClassConvertComplete(String javassistClassName) {
|
|
logger.info("%s class is converted.", javassistClassName);
|
|
}
|
|
}
|