Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
colcode
jadx
提交
87794d25
J
jadx
项目概览
colcode
/
jadx
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
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,发现更多精彩内容 >>
提交
87794d25
编写于
4月 19, 2013
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix bug for args in methods with generics
上级
c4f21199
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
38 addition
and
6 deletion
+38
-6
src/main/java/jadx/codegen/MethodGen.java
src/main/java/jadx/codegen/MethodGen.java
+1
-1
src/main/java/jadx/dex/instructions/args/ArgType.java
src/main/java/jadx/dex/instructions/args/ArgType.java
+4
-0
src/main/java/jadx/dex/nodes/MethodNode.java
src/main/java/jadx/dex/nodes/MethodNode.java
+8
-5
src/main/java/jadx/utils/Utils.java
src/main/java/jadx/utils/Utils.java
+2
-0
src/samples/java/jadx/samples/TestGenerics.java
src/samples/java/jadx/samples/TestGenerics.java
+23
-0
未找到文件。
src/main/java/jadx/codegen/MethodGen.java
浏览文件 @
87794d25
...
...
@@ -263,7 +263,7 @@ public class MethodGen {
}
private
void
makeFallbackMethod
(
CodeWriter
code
,
MethodNode
mth
)
{
if
(
!
mth
.
getAccessFlags
().
isStatic
()
)
{
if
(
mth
.
getThisArg
()
!=
null
)
{
code
.
startLine
(
getFallbackMethodGen
(
mth
).
makeArgName
(
mth
.
getThisArg
())).
add
(
" = this;"
);
}
makeFallbackInsns
(
code
,
mth
,
mth
.
getInstructions
(),
true
);
...
...
src/main/java/jadx/dex/instructions/args/ArgType.java
浏览文件 @
87794d25
...
...
@@ -5,6 +5,7 @@ import jadx.utils.Utils;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -421,6 +422,9 @@ public abstract class ArgType {
}
private
static
List
<
ArgType
>
parseSignatureListInner
(
String
str
,
boolean
parsePrimitives
)
{
if
(
str
.
isEmpty
())
{
return
Collections
.
emptyList
();
}
if
(
str
.
equals
(
"*"
))
{
return
Arrays
.
asList
(
UNKNOWN
);
}
...
...
src/main/java/jadx/dex/nodes/MethodNode.java
浏览文件 @
87794d25
...
...
@@ -154,29 +154,32 @@ public class MethodNode extends AttrNode implements ILoadable {
LOG
.
warn
(
"Signature parse error: {}"
,
returnType
);
return
false
;
}
if
(
mthInfo
.
getArgumentsTypes
().
isEmpty
())
{
argsList
=
Collections
.
emptyList
();
return
true
;
}
List
<
ArgType
>
argsTypes
=
ArgType
.
parseSignatureList
(
argsTypesStr
);
if
(
argsTypes
==
null
)
return
false
;
if
(
argsTypes
.
size
()
!=
mthInfo
.
getArgumentsTypes
().
size
())
{
if
(
argsTypes
.
isEmpty
())
{
return
false
;
}
if
(!
mthInfo
.
isConstructor
())
{
LOG
.
warn
(
"Wrong signature parse result: "
+
sign
+
" -> "
+
argsTypes
+
", not generic version: "
+
mthInfo
.
getArgumentsTypes
());
return
false
;
}
else
if
(
getParentClass
().
getAccessFlags
().
isEnum
())
{
// TODO:
argsTypes
.
add
(
0
,
mthInfo
.
getArgumentsTypes
().
get
(
1
));
argsTypes
.
add
(
0
,
mthInfo
.
getArgumentsTypes
().
get
(
0
));
argsTypes
.
add
(
1
,
mthInfo
.
getArgumentsTypes
().
get
(
1
));
}
else
{
// add synthetic arg for outer class
argsTypes
.
add
(
0
,
mthInfo
.
getArgumentsTypes
().
get
(
0
));
}
if
(
argsTypes
.
size
()
!=
mthInfo
.
getArgumentsTypes
().
size
())
{
return
false
;
}
}
initArguments
(
argsTypes
);
return
true
;
}
...
...
src/main/java/jadx/utils/Utils.java
浏览文件 @
87794d25
...
...
@@ -49,6 +49,8 @@ public class Utils {
case
'>'
:
case
','
:
case
' '
:
case
'?'
:
case
'*'
:
break
;
default
:
...
...
src/samples/java/jadx/samples/TestGenerics.java
浏览文件 @
87794d25
package
jadx.samples
;
import
java.util.ArrayList
;
import
java.util.Enumeration
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -141,6 +142,28 @@ public class TestGenerics extends AbstractTest {
}
}
private
class
TestConstructor
implements
Enumeration
<
String
>
{
private
final
TestGenerics
a
;
TestConstructor
(
TestGenerics
a
)
{
this
.
a
=
a
;
}
@Override
public
boolean
hasMoreElements
()
{
return
false
;
}
@Override
public
String
nextElement
()
{
return
null
;
}
}
public
Enumeration
<
String
>
testThis
()
{
return
new
TestConstructor
(
this
);
}
private
List
<
String
>
test1
(
Map
<
String
,
String
>
map
)
{
List
<
String
>
list
=
new
ArrayList
<
String
>();
String
str
=
map
.
get
(
"key"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录