Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
阿啄debugIT
transmittable-thread-local
提交
fea4248e
T
transmittable-thread-local
项目概览
阿啄debugIT
/
transmittable-thread-local
与 Fork 源项目一致
从无法访问的项目Fork
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
transmittable-thread-local
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
fea4248e
编写于
1月 28, 2021
作者:
oldratlee
🔥
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
! move getLocationUrlOfClass logic to ClassInfo
上级
e1cae897
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
22 addition
and
11 deletion
+22
-11
src/main/java/com/alibaba/ttl/threadpool/agent/TtlTransformer.java
...java/com/alibaba/ttl/threadpool/agent/TtlTransformer.java
+4
-9
src/main/java/com/alibaba/ttl/threadpool/agent/transformlet/ClassInfo.java
.../alibaba/ttl/threadpool/agent/transformlet/ClassInfo.java
+18
-2
未找到文件。
src/main/java/com/alibaba/ttl/threadpool/agent/TtlTransformer.java
浏览文件 @
fea4248e
...
...
@@ -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
(
'/'
,
'.'
);
}
}
src/main/java/com/alibaba/ttl/threadpool/agent/transformlet/ClassInfo.java
浏览文件 @
fea4248e
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录