提交 fea4248e 编写于 作者: oldratlee's avatar oldratlee 🔥

! move getLocationUrlOfClass logic to ClassInfo

上级 e1cae897
......@@ -60,12 +60,11 @@ public class TtlTransformer implements ClassFileTransformer {
// Lambda has no class file, no need to transform, just return.
if (classFile == null) return NO_TRANSFORM;
final String className = toClassName(classFile);
final ClassInfo classInfo = new ClassInfo(className, classFileBuffer, loader);
final ClassInfo classInfo = new ClassInfo(classFile, classFileBuffer, loader);
if (logClassTransform)
logger.info("[TtlTransformer] transforming " + classInfo.getClassName()
+ " from classloader " + classInfo.getClassLoader()
+ " at location " + getLocationUrlOfClass(classInfo.getCtClass()));
+ " at location " + classInfo.getLocationUrl());
extensionTransformletManager.collectExtensionTransformlet(classInfo);
......@@ -74,7 +73,7 @@ public class TtlTransformer implements ClassFileTransformer {
if (classInfo.isModified()) {
logger.info("[TtlTransformer] " + transformlet.getClass().getName() + " transformed " + classInfo.getClassName()
+ " from classloader " + classInfo.getClassLoader()
+ " at location " + getLocationUrlOfClass(classInfo.getCtClass()));
+ " at location " + classInfo.getLocationUrl());
return classInfo.getCtClass().toBytecode();
}
}
......@@ -83,7 +82,7 @@ public class TtlTransformer implements ClassFileTransformer {
if (classInfo.isModified()) {
logger.info("[TtlTransformer] " + transformlet + " transformed " + classInfo.getClassName()
+ " from classloader " + classInfo.getClassLoader()
+ " at location " + getLocationUrlOfClass(classInfo.getCtClass()));
+ " at location " + classInfo.getLocationUrl());
return classInfo.getCtClass().toBytecode();
}
} catch (Throwable t) {
......@@ -94,8 +93,4 @@ public class TtlTransformer implements ClassFileTransformer {
return NO_TRANSFORM;
}
private static String toClassName(@NonNull final String classFile) {
return classFile.replace('/', '.');
}
}
......@@ -9,14 +9,21 @@ import javassist.LoaderClassPath;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.URL;
import static com.alibaba.ttl.threadpool.agent.transformlet.helper.TtlTransformletHelper.getLocationUrlOfClass;
/**
* Class Info for {@link TtlTransformlet}.
*
* <B><I>Caution:</I></B><br>
* Do <b>NOT</b> load {@link Class} which is transforming, or the transform will lose effectiveness.
*
* @author Jerry Lee (oldratlee at gmail dot com)
* @since 2.13.0
*/
public class ClassInfo {
private final String transformerClassFile;
private final String className;
private final byte[] classFileBuffer;
private final ClassLoader loader;
......@@ -25,8 +32,9 @@ public class ClassInfo {
// [ERROR] new com.alibaba.ttl.threadpool.agent.transformlet.ClassInfo(String, byte[], ClassLoader)
// may expose internal representation by storing an externally mutable object
// into ClassInfo.classFileBuffer
public ClassInfo(@NonNull String className, @NonNull @SuppressFBWarnings({"EI_EXPOSE_REP2"}) byte[] classFileBuffer, @Nullable ClassLoader loader) {
this.className = className;
public ClassInfo(@NonNull String transformerClassFile, @NonNull @SuppressFBWarnings({"EI_EXPOSE_REP2"}) byte[] classFileBuffer, @Nullable ClassLoader loader) {
this.transformerClassFile = transformerClassFile;
this.className = toClassName(transformerClassFile);
this.classFileBuffer = classFileBuffer;
this.loader = loader;
}
......@@ -38,6 +46,10 @@ public class ClassInfo {
private CtClass ctClass;
public URL getLocationUrl() throws IOException {
return getLocationUrlOfClass(getCtClass());
}
@NonNull
public CtClass getCtClass() throws IOException {
if (ctClass != null) return ctClass;
......@@ -69,4 +81,8 @@ public class ClassInfo {
public ClassLoader getClassLoader() {
return loader;
}
private static String toClassName(@NonNull final String classFile) {
return classFile.replace('/', '.');
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册