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

! move getLocationUrlOfClass logic to ClassInfo

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