Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
SkyWalking
提交
303cc1ca
S
SkyWalking
项目概览
apache
/
SkyWalking
上一次同步 1 年多
通知
302
Star
21345
Fork
6091
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
303cc1ca
编写于
8月 09, 2017
作者:
wu-sheng
提交者:
GitHub
8月 09, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #345 from ascrutae/zhangxin/fix/hierarchy-match-failed
fix issue that the match of HierarchyMatch do not work
上级
972d4396
164960f6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
37 addition
and
3 deletion
+37
-3
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/match/HierarchyMatch.java
...kywalking/apm/agent/core/plugin/match/HierarchyMatch.java
+37
-3
未找到文件。
apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/match/HierarchyMatch.java
浏览文件 @
303cc1ca
package
org.skywalking.apm.agent.core.plugin.match
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
net.bytebuddy.description.type.TypeDescription
;
import
net.bytebuddy.description.type.TypeList
;
import
net.bytebuddy.matcher.ElementMatcher
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
hasSuperType
;
...
...
@@ -28,24 +32,54 @@ public class HierarchyMatch implements IndirectMatch {
ElementMatcher
.
Junction
junction
=
null
;
for
(
String
superTypeName
:
parentTypes
)
{
if
(
junction
==
null
)
{
junction
=
build
EachAnnotation
(
superTypeName
);
junction
=
build
SuperClassMatcher
(
superTypeName
);
}
else
{
junction
=
junction
.
and
(
build
EachAnnotation
(
superTypeName
));
junction
=
junction
.
and
(
build
SuperClassMatcher
(
superTypeName
));
}
}
junction
=
junction
.
and
(
not
(
isInterface
()));
return
junction
;
}
private
ElementMatcher
.
Junction
build
EachAnnotation
(
String
superTypeName
)
{
private
ElementMatcher
.
Junction
build
SuperClassMatcher
(
String
superTypeName
)
{
return
hasSuperType
(
named
(
superTypeName
));
}
@Override
public
boolean
isMatch
(
TypeDescription
typeDescription
)
{
List
<
String
>
parentTypes
=
new
ArrayList
<
String
>(
Arrays
.
asList
(
this
.
parentTypes
));
TypeList
.
Generic
implInterfaces
=
typeDescription
.
getInterfaces
();
for
(
TypeDescription
.
Generic
implInterface
:
implInterfaces
)
{
matchHierarchyClass
(
implInterface
,
parentTypes
);
}
matchHierarchyClass
(
typeDescription
.
getSuperClass
(),
parentTypes
);
if
(
parentTypes
.
size
()
==
0
)
{
return
true
;
}
return
false
;
}
private
void
matchHierarchyClass
(
TypeDescription
.
Generic
clazz
,
List
<
String
>
parentTypes
)
{
parentTypes
.
remove
(
clazz
.
getTypeName
());
if
(
parentTypes
.
size
()
==
0
)
{
return
;
}
for
(
TypeDescription
.
Generic
generic
:
clazz
.
getInterfaces
())
{
matchHierarchyClass
(
generic
,
parentTypes
);
}
TypeDescription
.
Generic
superClazz
=
clazz
.
getSuperClass
();
if
(
superClazz
!=
null
&&
!
clazz
.
getTypeName
().
equals
(
"java.lang.Object"
))
{
matchHierarchyClass
(
superClazz
,
parentTypes
);
}
}
public
static
ClassMatch
byHierarchyMatch
(
String
[]
parentTypes
)
{
return
new
HierarchyMatch
(
parentTypes
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录