Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2301_76393173
jadx
提交
4454e013
J
jadx
项目概览
2301_76393173
/
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(gitcode.net)2024年7月9日维护升级公告
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
4454e013
编写于
9月 04, 2013
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
gui: add internal tests
上级
1e7546f4
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
105 addition
and
31 deletion
+105
-31
build.gradle
build.gradle
+1
-0
jadx-core/src/main/java/jadx/api/Decompiler.java
jadx-core/src/main/java/jadx/api/Decompiler.java
+4
-4
jadx-core/src/main/java/jadx/api/JavaField.java
jadx-core/src/main/java/jadx/api/JavaField.java
+1
-1
jadx-core/src/main/java/jadx/api/JavaMethod.java
jadx-core/src/main/java/jadx/api/JavaMethod.java
+1
-1
jadx-gui/src/main/java/jadx/gui/treemodel/JRoot.java
jadx-gui/src/main/java/jadx/gui/treemodel/JRoot.java
+39
-25
jadx-gui/src/test/java/jadx/api/Factory.java
jadx-gui/src/test/java/jadx/api/Factory.java
+16
-0
jadx-gui/src/test/java/jadx/gui/treemodel/JRootTest.java
jadx-gui/src/test/java/jadx/gui/treemodel/JRootTest.java
+43
-0
未找到文件。
build.gradle
浏览文件 @
4454e013
...
...
@@ -25,6 +25,7 @@ subprojects {
dependencies
{
compile
'org.slf4j:slf4j-api:1.7.5'
testCompile
'junit:junit:4.11'
testCompile
"org.mockito:mockito-core:1.9.5"
}
repositories
{
...
...
jadx-core/src/main/java/jadx/api/Decompiler.java
浏览文件 @
4454e013
...
...
@@ -101,6 +101,10 @@ public final class Decompiler {
return
Collections
.
unmodifiableList
(
packages
);
}
public
int
getErrorsCount
()
{
return
errorsCount
;
}
public
ThreadPoolExecutor
saveAll
(
File
dir
)
{
int
threadsCount
=
args
.
getThreadsCount
();
LOG
.
debug
(
"processing threads count: {}"
,
threadsCount
);
...
...
@@ -157,8 +161,4 @@ public final class Decompiler {
LOG
.
error
(
"Process class error"
,
e
);
}
}
public
int
getErrorsCount
()
{
return
errorsCount
;
}
}
jadx-core/src/main/java/jadx/api/JavaField.java
浏览文件 @
4454e013
...
...
@@ -4,7 +4,7 @@ import jadx.core.dex.info.AccessInfo;
import
jadx.core.dex.instructions.args.ArgType
;
import
jadx.core.dex.nodes.FieldNode
;
public
class
JavaField
{
public
final
class
JavaField
{
private
final
FieldNode
field
;
...
...
jadx-core/src/main/java/jadx/api/JavaMethod.java
浏览文件 @
4454e013
...
...
@@ -7,7 +7,7 @@ import jadx.core.dex.nodes.MethodNode;
import
java.util.List
;
public
class
JavaMethod
{
public
final
class
JavaMethod
{
private
final
MethodNode
mth
;
public
JavaMethod
(
MethodNode
m
)
{
...
...
jadx-gui/src/main/java/jadx/gui/treemodel/JRoot.java
浏览文件 @
4454e013
...
...
@@ -39,11 +39,23 @@ public class JRoot extends DefaultMutableTreeNode implements JNode {
}
}
else
{
// build packages hierarchy
Map
<
String
,
JPackage
>
pkgMap
=
new
HashMap
<
String
,
JPackage
>();
for
(
JavaPackage
pkg
:
wrapper
.
getPackages
())
{
addPackage
(
pkgMap
,
new
JPackage
(
pkg
));
List
<
JPackage
>
rootPkgs
=
getHierarchyPackages
(
wrapper
.
getPackages
());
for
(
JPackage
jPackage
:
rootPkgs
)
{
jPackage
.
updateChilds
();
add
(
jPackage
);
}
// merge packages without classes
}
}
List
<
JPackage
>
getHierarchyPackages
(
List
<
JavaPackage
>
packages
)
{
Map
<
String
,
JPackage
>
pkgMap
=
new
HashMap
<
String
,
JPackage
>();
for
(
JavaPackage
pkg
:
packages
)
{
addPackage
(
pkgMap
,
new
JPackage
(
pkg
));
}
// merge packages without classes
boolean
repeat
;
do
{
repeat
=
false
;
for
(
JPackage
pkg
:
pkgMap
.
values
())
{
if
(
pkg
.
getInnerPackages
().
size
()
==
1
&&
pkg
.
getClasses
().
isEmpty
())
{
JPackage
innerPkg
=
pkg
.
getInnerPackages
().
get
(
0
);
...
...
@@ -53,32 +65,34 @@ public class JRoot extends DefaultMutableTreeNode implements JNode {
pkg
.
setName
(
pkg
.
getName
()
+
"."
+
innerPkg
.
getName
());
innerPkg
.
getInnerPackages
().
clear
();
innerPkg
.
getClasses
().
clear
();
repeat
=
true
;
pkgMap
.
remove
(
innerPkg
.
getName
());
break
;
}
}
// remove empty packages
for
(
Iterator
<
Map
.
Entry
<
String
,
JPackage
>>
it
=
pkgMap
.
entrySet
().
iterator
();
it
.
hasNext
();
)
{
JPackage
pkg
=
it
.
next
().
getValue
();
if
(
pkg
.
getInnerPackages
().
isEmpty
()
&&
pkg
.
getClasses
().
isEmpty
())
{
it
.
remove
();
}
}
// find root packages
Set
<
JPackage
>
inners
=
new
HashSet
<
JPackage
>();
for
(
JPackage
pkg
:
pkgMap
.
values
())
{
inners
.
addAll
(
pkg
.
getInnerPackages
());
}
List
<
JPackage
>
rootPkgs
=
new
ArrayList
<
JPackage
>();
for
(
JPackage
pkg
:
pkgMap
.
values
())
{
if
(!
inners
.
contains
(
pkg
))
{
rootPkgs
.
add
(
pkg
);
}
}
while
(
repeat
);
// remove empty packages
for
(
Iterator
<
Map
.
Entry
<
String
,
JPackage
>>
it
=
pkgMap
.
entrySet
().
iterator
();
it
.
hasNext
();
)
{
JPackage
pkg
=
it
.
next
().
getValue
();
if
(
pkg
.
getInnerPackages
().
isEmpty
()
&&
pkg
.
getClasses
().
isEmpty
())
{
it
.
remove
();
}
Collections
.
sort
(
rootPkgs
);
for
(
JPackage
jPackage
:
rootPkgs
)
{
jPackage
.
updateChilds
();
add
(
jPackage
);
}
// find root packages
Set
<
JPackage
>
inners
=
new
HashSet
<
JPackage
>();
for
(
JPackage
pkg
:
pkgMap
.
values
())
{
inners
.
addAll
(
pkg
.
getInnerPackages
());
}
List
<
JPackage
>
rootPkgs
=
new
ArrayList
<
JPackage
>();
for
(
JPackage
pkg
:
pkgMap
.
values
())
{
if
(!
inners
.
contains
(
pkg
))
{
rootPkgs
.
add
(
pkg
);
}
}
Collections
.
sort
(
rootPkgs
);
return
rootPkgs
;
}
private
void
addPackage
(
Map
<
String
,
JPackage
>
pkgs
,
JPackage
pkg
)
{
...
...
jadx-gui/src/test/java/jadx/api/Factory.java
0 → 100644
浏览文件 @
4454e013
package
jadx.api
;
import
jadx.core.dex.nodes.ClassNode
;
import
java.util.List
;
public
class
Factory
{
public
static
JavaPackage
newPackage
(
String
name
,
List
<
JavaClass
>
classes
)
{
return
new
JavaPackage
(
name
,
classes
);
}
public
static
JavaClass
newClass
(
Decompiler
decompiler
,
ClassNode
classNode
)
{
return
new
JavaClass
(
decompiler
,
classNode
);
}
}
jadx-gui/src/test/java/jadx/gui/treemodel/JRootTest.java
0 → 100644
浏览文件 @
4454e013
package
jadx.gui.treemodel
;
import
jadx.api.Decompiler
;
import
jadx.api.Factory
;
import
jadx.api.IJadxArgs
;
import
jadx.api.JavaClass
;
import
jadx.api.JavaPackage
;
import
jadx.core.dex.nodes.ClassNode
;
import
jadx.gui.JadxWrapper
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
org.junit.Test
;
import
static
junit
.
framework
.
Assert
.
assertEquals
;
import
static
org
.
mockito
.
Mockito
.
mock
;
public
class
JRootTest
{
@Test
public
void
testHierarchyPackages
()
{
String
pkgName
=
"a.b.c.d.e"
;
JadxWrapper
wrapper
=
mock
(
JadxWrapper
.
class
);
JRoot
root
=
new
JRoot
(
wrapper
);
JavaClass
cls
=
Factory
.
newClass
(
new
Decompiler
(
mock
(
IJadxArgs
.
class
)),
mock
(
ClassNode
.
class
));
JavaPackage
pkg
=
Factory
.
newPackage
(
pkgName
,
Arrays
.
asList
(
cls
));
List
<
JavaPackage
>
packages
=
new
ArrayList
<
JavaPackage
>();
packages
.
add
(
pkg
);
List
<
JPackage
>
out
=
root
.
getHierarchyPackages
(
packages
);
assertEquals
(
out
.
size
(),
1
);
JPackage
jpkg
=
out
.
get
(
0
);
assertEquals
(
jpkg
.
getName
(),
pkgName
);
assertEquals
(
jpkg
.
getClasses
().
size
(),
1
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录