Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2301_76393173
jadx
提交
36cfc9d1
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,发现更多精彩内容 >>
提交
36cfc9d1
编写于
11月 12, 2013
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
core tests: add inner classes in internal tests
上级
b2f189b5
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
60 addition
and
19 deletion
+60
-19
jadx-core/src/test/java/jadx/api/InternalJadxTest.java
jadx-core/src/test/java/jadx/api/InternalJadxTest.java
+28
-19
jadx-core/src/test/java/jadx/tests/internal/TestInnerClass.java
...ore/src/test/java/jadx/tests/internal/TestInnerClass.java
+32
-0
未找到文件。
jadx-core/src/test/java/jadx/api/InternalJadxTest.java
浏览文件 @
36cfc9d1
...
...
@@ -11,7 +11,9 @@ import java.io.File;
import
java.io.FileInputStream
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.net.URISyntaxException
;
import
java.net.URL
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.jar.JarEntry
;
import
java.util.jar.JarOutputStream
;
...
...
@@ -74,33 +76,39 @@ public abstract class InternalJadxTest {
}
public
File
getJarForClass
(
Class
<?>
cls
)
throws
IOException
{
File
classFile
=
getClassFile
(
cls
);
String
shortClsFileName
=
cls
.
getName
().
replace
(
'.'
,
'/'
)
+
".class"
;
String
path
=
cls
.
getPackage
().
getName
().
replace
(
'.'
,
'/'
);
List
<
File
>
list
=
getClassFilesWithInners
(
cls
)
;
File
temp
=
File
.
createTempFile
(
"jadx-tmp-"
,
System
.
nanoTime
()
+
".jar"
);
JarOutputStream
jo
=
new
JarOutputStream
(
new
FileOutputStream
(
temp
));
add
(
classFile
,
shortClsFileName
,
jo
);
for
(
File
file
:
list
)
{
add
(
file
,
path
+
"/"
+
file
.
getName
(),
jo
);
}
jo
.
close
();
temp
.
deleteOnExit
();
return
temp
;
}
private
File
getClassFile
(
Class
<?>
cls
)
{
String
path
=
cutPackage
(
cls
)
+
".class"
;
URL
resource
=
cls
.
getResource
(
path
);
if
(
resource
==
null
)
{
fail
(
"Class file not found: "
+
path
);
}
if
(!
"file"
.
equalsIgnoreCase
(
resource
.
getProtocol
()))
{
fail
(
"Class is not stored in a file."
);
private
List
<
File
>
getClassFilesWithInners
(
Class
<?>
cls
)
{
List
<
File
>
list
=
new
ArrayList
<
File
>();
String
pkgName
=
cls
.
getPackage
().
getName
();
URL
pkgResource
=
ClassLoader
.
getSystemClassLoader
().
getResource
(
pkgName
.
replace
(
'.'
,
'/'
));
if
(
pkgResource
!=
null
)
{
try
{
String
clsName
=
cls
.
getName
();
File
directory
=
new
File
(
pkgResource
.
toURI
());
String
[]
files
=
directory
.
list
();
for
(
String
file
:
files
)
{
String
fullName
=
pkgName
+
"."
+
file
;
if
(
fullName
.
startsWith
(
clsName
))
{
list
.
add
(
new
File
(
directory
,
file
));
}
}
}
catch
(
URISyntaxException
e
)
{
fail
(
e
.
getMessage
());
}
}
return
new
File
(
resource
.
getPath
());
}
private
String
cutPackage
(
Class
<?>
cls
)
{
String
longName
=
cls
.
getName
();
String
pkg
=
cls
.
getPackage
().
getName
();
return
longName
.
substring
(
pkg
.
length
()
+
1
,
longName
.
length
());
return
list
;
}
private
void
add
(
File
source
,
String
entryName
,
JarOutputStream
target
)
throws
IOException
{
...
...
@@ -114,8 +122,9 @@ public abstract class InternalJadxTest {
byte
[]
buffer
=
new
byte
[
1024
];
while
(
true
)
{
int
count
=
in
.
read
(
buffer
);
if
(
count
==
-
1
)
if
(
count
==
-
1
)
{
break
;
}
target
.
write
(
buffer
,
0
,
count
);
}
target
.
closeEntry
();
...
...
jadx-core/src/test/java/jadx/tests/internal/TestInnerClass.java
0 → 100644
浏览文件 @
36cfc9d1
package
jadx.tests.internal
;
import
jadx.api.InternalJadxTest
;
import
jadx.core.dex.nodes.ClassNode
;
import
org.junit.Test
;
import
static
org
.
hamcrest
.
CoreMatchers
.
containsString
;
import
static
org
.
junit
.
Assert
.
assertThat
;
public
class
TestInnerClass
extends
InternalJadxTest
{
public
static
class
TestCls
{
public
class
Inner
{
public
class
Inner2
{
}
}
}
@Test
public
void
test
()
{
ClassNode
cls
=
getClassNode
(
TestCls
.
class
);
String
code
=
cls
.
getCode
().
toString
();
System
.
out
.
println
(
code
);
assertThat
(
code
,
containsString
(
"Inner"
));
assertThat
(
code
,
containsString
(
"Inner2"
));
// assertThat(code, not(containsString("this$0")));
// assertThat(code, not(containsString("super()")));
// assertThat(code, not(containsString("/* synthetic */")));
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录