Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_39073359
jadx
提交
9c90699c
J
jadx
项目概览
qq_39073359
/
jadx
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jadx
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9c90699c
编写于
6月 15, 2014
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
core: fix parsing of generic signature with inner classes
上级
b67cd50e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
27 addition
and
11 deletion
+27
-11
jadx-core/src/main/java/jadx/core/dex/nodes/parser/SignatureParser.java
...main/java/jadx/core/dex/nodes/parser/SignatureParser.java
+8
-3
jadx-core/src/main/java/jadx/core/utils/Utils.java
jadx-core/src/main/java/jadx/core/utils/Utils.java
+1
-2
jadx-core/src/test/groovy/jadx/tests/TestSignatureParser.groovy
...ore/src/test/groovy/jadx/tests/TestSignatureParser.groovy
+18
-6
未找到文件。
jadx-core/src/main/java/jadx/core/dex/nodes/parser/SignatureParser.java
浏览文件 @
9c90699c
...
...
@@ -6,7 +6,6 @@ import jadx.core.dex.attributes.annotations.Annotation;
import
jadx.core.dex.instructions.args.ArgType
;
import
jadx.core.utils.exceptions.JadxRuntimeException
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.LinkedHashMap
;
import
java.util.LinkedList
;
...
...
@@ -159,7 +158,13 @@ public class SignatureParser {
}
while
(
ch
!=
'<'
&&
ch
!=
';'
);
if
(
ch
==
';'
)
{
return
ArgType
.
object
(
incompleteType
?
slice
()
:
inclusiveSlice
());
String
obj
;
if
(
incompleteType
)
{
obj
=
slice
().
replace
(
'/'
,
'.'
);
}
else
{
obj
=
inclusiveSlice
();
}
return
ArgType
.
object
(
obj
);
}
else
{
// generic type start ('<')
String
obj
=
slice
();
...
...
@@ -184,7 +189,7 @@ public class SignatureParser {
}
private
ArgType
[]
consumeGenericArgs
()
{
List
<
ArgType
>
list
=
new
ArrayList
<
ArgType
>(
1
);
List
<
ArgType
>
list
=
new
LinkedList
<
ArgType
>(
);
ArgType
type
;
do
{
if
(
lookAhead
(
'*'
))
{
...
...
jadx-core/src/main/java/jadx/core/utils/Utils.java
浏览文件 @
9c90699c
...
...
@@ -16,9 +16,8 @@ public class Utils {
int
last
=
obj
.
length
()
-
1
;
if
(
obj
.
charAt
(
0
)
==
'L'
&&
obj
.
charAt
(
last
)
==
';'
)
{
return
obj
.
substring
(
1
,
last
).
replace
(
'/'
,
'.'
);
}
else
{
return
obj
;
}
return
obj
;
}
public
static
String
makeQualifiedObjectName
(
String
obj
)
{
...
...
jadx-core/src/test/groovy/jadx/tests/TestSignatureParser.groovy
浏览文件 @
9c90699c
...
...
@@ -26,12 +26,14 @@ class TestSignatureParser extends Specification {
new
SignatureParser
(
str
).
consumeType
()
==
result
where:
str
|
result
"TD;"
|
genericType
(
"D"
)
"La<TV;Lb;>;"
|
generic
(
"La;"
,
genericType
(
"V"
),
object
(
"b"
))
"La<Lb<Lc;>;>;"
|
generic
(
"La;"
,
generic
(
"Lb;"
,
object
(
"Lc;"
)))
"La<TD;>.c;"
|
genericInner
(
generic
(
"La;"
,
genericType
(
"D"
)),
"c"
,
null
)
"La<Lb;>.c<TV;>;"
|
genericInner
(
generic
(
"La;"
,
object
(
"Lb;"
)),
"c"
,
genericType
(
"V"
))
str
|
result
"TD;"
|
genericType
(
"D"
)
"La<TV;Lb;>;"
|
generic
(
"La;"
,
genericType
(
"V"
),
object
(
"b"
))
"La<Lb<Lc;>;>;"
|
generic
(
"La;"
,
generic
(
"Lb;"
,
object
(
"Lc;"
)))
"La/b/C<Ld/E<Lf/G;>;>;"
|
generic
(
"La/b/C;"
,
generic
(
"Ld/E;"
,
object
(
"Lf/G;"
)))
"La<TD;>.c;"
|
genericInner
(
generic
(
"La;"
,
genericType
(
"D"
)),
"c"
,
null
)
"La<TD;>.c/d;"
|
genericInner
(
generic
(
"La;"
,
genericType
(
"D"
)),
"c.d"
,
null
)
"La<Lb;>.c<TV;>;"
|
genericInner
(
generic
(
"La;"
,
object
(
"Lb;"
)),
"c"
,
genericType
(
"V"
))
}
def
"inner generic"
()
{
...
...
@@ -85,6 +87,16 @@ class TestSignatureParser extends Specification {
argTypes
.
get
(
0
)
==
generic
(
"Ljava/util/List;"
,
wildcard
())
}
def
"method args 2"
()
{
when:
def
argTypes
=
new
SignatureParser
(
"(La/b/C<TT;>.d/E;)V"
).
consumeMethodArgs
()
then:
argTypes
.
size
()
==
1
def
argType
=
argTypes
.
get
(
0
)
argType
.
getObject
().
indexOf
(
'/'
)
==
-
1
argTypes
.
get
(
0
)
==
genericInner
(
generic
(
"La/b/C;"
,
genericType
(
"T"
)),
"d.E"
,
null
)
}
def
"generic map: bad signature"
()
{
when:
def
map
=
new
SignatureParser
(
"<A:Ljava/lang/Object;B"
).
consumeGenericMap
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录