Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ql04210214
jadx
提交
2478fc3a
J
jadx
项目概览
ql04210214
/
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,发现更多精彩内容 >>
提交
2478fc3a
编写于
9月 02, 2014
作者:
A
Anton Dyachenko
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
core: fix instance initializer producing (don't generate super() call)
上级
5a68d3be
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
136 addition
and
4 deletion
+136
-4
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
+1
-4
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
+25
-0
jadx-core/src/main/java/jadx/core/dex/visitors/ModVisitor.java
...core/src/main/java/jadx/core/dex/visitors/ModVisitor.java
+6
-0
jadx-samples/src/main/java/jadx/samples/TestInitializers.java
...-samples/src/main/java/jadx/samples/TestInitializers.java
+104
-0
未找到文件。
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
浏览文件 @
2478fc3a
...
...
@@ -377,10 +377,7 @@ public class ClassNode extends LineAttrNode implements ILoadable {
public
MethodNode
getDefaultConstructor
()
{
for
(
MethodNode
mth
:
methods
)
{
if
(
mth
.
getAccessFlags
().
isConstructor
()
&&
mth
.
getMethodInfo
().
isConstructor
()
&&
(
mth
.
getMethodInfo
().
getArgsCount
()
==
0
||
(
mth
.
getArguments
(
false
)
!=
null
&&
mth
.
getArguments
(
false
).
isEmpty
())))
{
if
(
mth
.
isDefaultConstructor
())
{
return
mth
;
}
}
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
浏览文件 @
2478fc3a
...
...
@@ -461,6 +461,31 @@ public class MethodNode extends LineAttrNode implements ILoadable {
}
return
false
;
}
public
boolean
isDefaultConstructor
()
{
boolean
result
=
false
;
if
(
accFlags
.
isConstructor
()
&&
mthInfo
.
isConstructor
())
{
int
defaultArgCount
=
0
;
/** workaround for non-static inner class constructor, that has
* synthetic argument */
if
((
parentClass
!=
null
)
&&
parentClass
.
getClassInfo
().
isInner
())
{
if
(!
parentClass
.
getAccessFlags
().
isStatic
())
{
ClassNode
outerCls
=
parentClass
.
getParentClass
();
if
((
argsList
!=
null
)
&&
(
argsList
.
size
()
>=
1
))
{
if
(
argsList
.
get
(
0
).
getType
().
equals
(
outerCls
.
getClassInfo
().
getType
()))
{
defaultArgCount
=
1
;
}
}
}
}
result
=
(
argsList
==
null
)
||
(
argsList
.
size
()
==
defaultArgCount
);
}
return
result
;
}
public
int
getRegsCount
()
{
return
regsCount
;
...
...
jadx-core/src/main/java/jadx/core/dex/visitors/ModVisitor.java
浏览文件 @
2478fc3a
...
...
@@ -76,6 +76,12 @@ public class ModVisitor extends AbstractVisitor {
remove
=
true
;
}
}
// remove super() call in instance initializer
if
(
parentClass
.
isAnonymous
()
&&
mth
.
isDefaultConstructor
()
&&
co
.
isSuper
())
{
remove
=
true
;
}
if
(
remove
)
{
remover
.
add
(
insn
);
}
else
{
...
...
jadx-samples/src/main/java/jadx/samples/TestInitializers.java
0 → 100644
浏览文件 @
2478fc3a
package
jadx.samples
;
public
class
TestInitializers
extends
AbstractTest
{
private
static
String
a
;
private
static
int
counter
;
private
A
c_a
;
public
static
class
A
{
public
static
String
a
;
static
{
a
=
"a1"
;
}
public
boolean
z
()
{
return
true
;
}
}
public
class
B
{
private
int
b
;
private
int
bbb
;
public
B
()
{
if
(
c_a
.
z
())
{
b
=
-
1
;
}
else
{
b
=
1
;
}
}
public
B
(
int
_b
)
{
b
=
_b
;
}
public
void
setB
(
int
_b
)
{
b
=
_b
;
}
public
int
getB
()
{
return
b
;
}
public
int
getBBB
()
{
return
bbb
;
}
{
bbb
=
123
;
}
}
static
{
a
=
"a0"
;
counter
=
0
;
}
{
c_a
=
new
A
();
}
@Override
public
boolean
testRun
()
throws
Exception
{
assertTrue
(
counter
==
0
);
assertTrue
(
a
.
equals
(
"a0"
));
assertTrue
(
A
.
a
.
equals
(
"a1"
));
B
b1
=
new
B
()
{
{
TestInitializers
.
counter
++;
setB
(
TestInitializers
.
counter
);
}
};
assertTrue
(
b1
.
getB
()
==
1
);
B
b2
=
new
B
()
{
@SuppressWarnings
(
"unused"
)
private
int
bb
;
public
int
getB
()
{
return
super
.
getB
();
}
{
bb
=
100
;
}
};
assertTrue
(
b2
.
getB
()
==
-
1
);
assertTrue
((
new
B
()).
getB
()
==
-
1
);
assertTrue
(
counter
==
1
);
B
b3
=
new
B
(
3
);
assertTrue
((
b3
.
getB
()
==
3
)
&&
(
b3
.
getBBB
()
==
123
));
return
true
;
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
new
TestInitializers
().
testRun
();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录