Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2301_76393173
jadx
提交
dbd00d5a
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,体验更适合开发者的 AI 搜索 >>
提交
dbd00d5a
编写于
3月 22, 2020
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor: use instance methods for error and warning notifications
上级
2da772df
变更
15
隐藏空白更改
内联
并排
Showing
15 changed file
with
98 addition
and
94 deletion
+98
-94
jadx-core/src/main/java/jadx/core/ProcessClass.java
jadx-core/src/main/java/jadx/core/ProcessClass.java
+1
-2
jadx-core/src/main/java/jadx/core/codegen/ClassGen.java
jadx-core/src/main/java/jadx/core/codegen/ClassGen.java
+3
-3
jadx-core/src/main/java/jadx/core/codegen/ConditionGen.java
jadx-core/src/main/java/jadx/core/codegen/ConditionGen.java
+1
-2
jadx-core/src/main/java/jadx/core/codegen/RegionGen.java
jadx-core/src/main/java/jadx/core/codegen/RegionGen.java
+1
-2
jadx-core/src/main/java/jadx/core/dex/attributes/nodes/NotificationAttrNode.java
.../jadx/core/dex/attributes/nodes/NotificationAttrNode.java
+40
-0
jadx-core/src/main/java/jadx/core/dex/info/ConstStorage.java
jadx-core/src/main/java/jadx/core/dex/info/ConstStorage.java
+1
-2
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
+2
-2
jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java
+1
-1
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
+3
-33
jadx-core/src/main/java/jadx/core/dex/visitors/DepthTraversal.java
.../src/main/java/jadx/core/dex/visitors/DepthTraversal.java
+4
-12
jadx-core/src/main/java/jadx/core/dex/visitors/ModVisitor.java
...core/src/main/java/jadx/core/dex/visitors/ModVisitor.java
+2
-4
jadx-core/src/main/java/jadx/core/dex/visitors/regions/ProcessTryCatchRegions.java
...adx/core/dex/visitors/regions/ProcessTryCatchRegions.java
+1
-2
jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java
...main/java/jadx/core/dex/visitors/regions/RegionMaker.java
+1
-1
jadx-core/src/main/java/jadx/core/utils/ErrorsCounter.java
jadx-core/src/main/java/jadx/core/utils/ErrorsCounter.java
+33
-27
jadx-core/src/main/java/jadx/core/utils/Utils.java
jadx-core/src/main/java/jadx/core/utils/Utils.java
+4
-1
未找到文件。
jadx-core/src/main/java/jadx/core/ProcessClass.java
浏览文件 @
dbd00d5a
...
...
@@ -7,7 +7,6 @@ import jadx.core.codegen.CodeGen;
import
jadx.core.dex.nodes.ClassNode
;
import
jadx.core.dex.visitors.DepthTraversal
;
import
jadx.core.dex.visitors.IDexTreeVisitor
;
import
jadx.core.utils.ErrorsCounter
;
import
jadx.core.utils.exceptions.JadxRuntimeException
;
import
static
jadx
.
core
.
dex
.
nodes
.
ProcessState
.
LOADED
;
...
...
@@ -43,7 +42,7 @@ public final class ProcessClass {
cls
.
setState
(
PROCESS_COMPLETE
);
}
}
catch
(
Throwable
e
)
{
ErrorsCounter
.
classError
(
cls
,
e
.
getClass
().
getSimpleName
(),
e
);
cls
.
addError
(
"Class process error: "
+
e
.
getClass
().
getSimpleName
(),
e
);
}
}
}
...
...
jadx-core/src/main/java/jadx/core/codegen/ClassGen.java
浏览文件 @
dbd00d5a
...
...
@@ -268,7 +268,7 @@ public class ClassGen {
inClGen
.
addClassCode
(
code
);
imports
.
addAll
(
inClGen
.
getImports
());
}
catch
(
Exception
e
)
{
ErrorsCounter
.
classError
(
innerCls
,
"Inner class code generation error"
,
e
);
innerCls
.
addError
(
"Inner class code generation error"
,
e
);
}
}
...
...
@@ -293,7 +293,7 @@ public class ClassGen {
throw
new
JadxRuntimeException
(
"Method generation error"
,
e
);
}
code
.
newLine
().
add
(
"/*"
);
code
.
newLine
().
addMultiLine
(
ErrorsCounter
.
methodE
rror
(
mth
,
"Method generation error"
,
e
));
code
.
newLine
().
addMultiLine
(
ErrorsCounter
.
e
rror
(
mth
,
"Method generation error"
,
e
));
Utils
.
appendStackTrace
(
code
,
e
);
code
.
newLine
().
add
(
"*/"
);
code
.
setIndent
(
savedIndent
);
...
...
@@ -455,7 +455,7 @@ public class ClassGen {
try
{
insnGen
.
makeInsn
(
insn
,
code
,
InsnGen
.
Flags
.
BODY_ONLY_NOWRAP
);
}
catch
(
Exception
e
)
{
ErrorsCounter
.
classError
(
cls
,
"Failed to generate init code"
,
e
);
cls
.
addError
(
"Failed to generate init code"
,
e
);
}
}
...
...
jadx-core/src/main/java/jadx/core/codegen/ConditionGen.java
浏览文件 @
dbd00d5a
...
...
@@ -16,7 +16,6 @@ import jadx.core.dex.nodes.InsnNode;
import
jadx.core.dex.regions.conditions.Compare
;
import
jadx.core.dex.regions.conditions.IfCondition
;
import
jadx.core.dex.regions.conditions.IfCondition.Mode
;
import
jadx.core.utils.ErrorsCounter
;
import
jadx.core.utils.exceptions.CodegenException
;
import
jadx.core.utils.exceptions.JadxRuntimeException
;
...
...
@@ -123,7 +122,7 @@ public class ConditionGen extends InsnGen {
wrap
(
code
,
firstArg
);
return
;
}
ErrorsCounter
.
methodWarn
(
mth
,
"Unsupported boolean condition "
+
op
.
getSymbol
());
mth
.
addWarn
(
"Unsupported boolean condition "
+
op
.
getSymbol
());
}
addArg
(
code
,
firstArg
,
isArgWrapNeeded
(
firstArg
));
...
...
jadx-core/src/main/java/jadx/core/codegen/RegionGen.java
浏览文件 @
dbd00d5a
...
...
@@ -39,7 +39,6 @@ import jadx.core.dex.regions.loops.LoopRegion;
import
jadx.core.dex.regions.loops.LoopType
;
import
jadx.core.dex.trycatch.ExceptionHandler
;
import
jadx.core.utils.BlockUtils
;
import
jadx.core.utils.ErrorsCounter
;
import
jadx.core.utils.RegionUtils
;
import
jadx.core.utils.exceptions.CodegenException
;
import
jadx.core.utils.exceptions.JadxRuntimeException
;
...
...
@@ -186,7 +185,7 @@ public class RegionGen extends InsnGen {
if
(
header
!=
null
)
{
List
<
InsnNode
>
headerInsns
=
header
.
getInstructions
();
if
(
headerInsns
.
size
()
>
1
)
{
ErrorsCounter
.
methodWarn
(
mth
,
"Found not inlined instructions from loop header"
);
mth
.
addWarn
(
"Found not inlined instructions from loop header"
);
int
last
=
headerInsns
.
size
()
-
1
;
for
(
int
i
=
0
;
i
<
last
;
i
++)
{
InsnNode
insn
=
headerInsns
.
get
(
i
);
...
...
jadx-core/src/main/java/jadx/core/dex/attributes/nodes/NotificationAttrNode.java
0 → 100644
浏览文件 @
dbd00d5a
package
jadx.core.dex.attributes.nodes
;
import
org.jetbrains.annotations.Nullable
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
jadx.core.dex.attributes.AType
;
import
jadx.core.dex.nodes.ICodeNode
;
import
jadx.core.utils.ErrorsCounter
;
public
abstract
class
NotificationAttrNode
extends
LineAttrNode
implements
ICodeNode
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
NotificationAttrNode
.
class
);
public
void
addError
(
String
errStr
,
Throwable
e
)
{
ErrorsCounter
.
error
(
this
,
errStr
,
e
);
}
public
void
addWarn
(
String
warnStr
)
{
ErrorsCounter
.
warning
(
this
,
warnStr
);
}
public
void
addWarnComment
(
String
warn
)
{
addWarnComment
(
warn
,
null
);
}
public
void
addWarnComment
(
String
warn
,
@Nullable
Throwable
exc
)
{
String
commentStr
=
"JADX WARN: "
+
warn
;
addAttr
(
AType
.
COMMENTS
,
commentStr
);
if
(
exc
!=
null
)
{
LOG
.
warn
(
"{} in {}"
,
warn
,
this
,
exc
);
}
else
{
LOG
.
warn
(
"{} in {}"
,
warn
,
this
);
}
}
public
void
addComment
(
String
commentStr
)
{
addAttr
(
AType
.
COMMENTS
,
commentStr
);
LOG
.
info
(
"{} in {}"
,
commentStr
,
this
);
}
}
jadx-core/src/main/java/jadx/core/dex/info/ConstStorage.java
浏览文件 @
dbd00d5a
...
...
@@ -16,7 +16,6 @@ import jadx.core.dex.nodes.ClassNode;
import
jadx.core.dex.nodes.DexNode
;
import
jadx.core.dex.nodes.FieldNode
;
import
jadx.core.dex.nodes.parser.FieldInitAttr
;
import
jadx.core.utils.ErrorsCounter
;
public
class
ConstStorage
{
...
...
@@ -155,7 +154,7 @@ public class ConstStorage {
return
innerClass
.
searchFieldByName
(
fieldName
);
}
}
ErrorsCounter
.
classWarn
(
appResClass
,
"Not found resource field with id: "
+
value
+
", name: "
+
str
.
replace
(
'/'
,
'.'
));
appResClass
.
addWarn
(
"Not found resource field with id: "
+
value
+
", name: "
+
str
.
replace
(
'/'
,
'.'
));
return
null
;
}
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
浏览文件 @
dbd00d5a
...
...
@@ -25,7 +25,7 @@ import jadx.core.Consts;
import
jadx.core.ProcessClass
;
import
jadx.core.dex.attributes.AFlag
;
import
jadx.core.dex.attributes.annotations.Annotation
;
import
jadx.core.dex.attributes.nodes.
Line
AttrNode
;
import
jadx.core.dex.attributes.nodes.
Notification
AttrNode
;
import
jadx.core.dex.attributes.nodes.SourceFileAttr
;
import
jadx.core.dex.info.AccessInfo
;
import
jadx.core.dex.info.AccessInfo.AFType
;
...
...
@@ -45,7 +45,7 @@ import jadx.core.utils.exceptions.JadxRuntimeException;
import
static
jadx
.
core
.
dex
.
nodes
.
ProcessState
.
LOADED
;
import
static
jadx
.
core
.
dex
.
nodes
.
ProcessState
.
NOT_LOADED
;
public
class
ClassNode
extends
Line
AttrNode
implements
ILoadable
,
ICodeNode
{
public
class
ClassNode
extends
Notification
AttrNode
implements
ILoadable
,
ICodeNode
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
ClassNode
.
class
);
private
final
DexNode
dex
;
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java
浏览文件 @
dbd00d5a
...
...
@@ -79,7 +79,7 @@ public class DexNode implements IDexNode {
name
=
"CLASS_"
+
typeIndex
;
}
ClassNode
clsNode
=
new
ClassNode
(
this
,
name
,
classDef
.
getAccessFlags
());
ErrorsCounter
.
classE
rror
(
clsNode
,
"Load error"
,
exc
);
ErrorsCounter
.
e
rror
(
clsNode
,
"Load error"
,
exc
);
addClassNode
(
clsNode
);
}
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
浏览文件 @
dbd00d5a
...
...
@@ -22,8 +22,8 @@ import jadx.core.dex.attributes.AFlag;
import
jadx.core.dex.attributes.AType
;
import
jadx.core.dex.attributes.annotations.Annotation
;
import
jadx.core.dex.attributes.nodes.JumpInfo
;
import
jadx.core.dex.attributes.nodes.LineAttrNode
;
import
jadx.core.dex.attributes.nodes.LoopInfo
;
import
jadx.core.dex.attributes.nodes.NotificationAttrNode
;
import
jadx.core.dex.info.AccessInfo
;
import
jadx.core.dex.info.AccessInfo.AFType
;
import
jadx.core.dex.info.ClassInfo
;
...
...
@@ -42,14 +42,13 @@ import jadx.core.dex.regions.Region;
import
jadx.core.dex.trycatch.ExcHandlerAttr
;
import
jadx.core.dex.trycatch.ExceptionHandler
;
import
jadx.core.dex.trycatch.TryCatchBlock
;
import
jadx.core.utils.ErrorsCounter
;
import
jadx.core.utils.Utils
;
import
jadx.core.utils.exceptions.DecodeException
;
import
jadx.core.utils.exceptions.JadxRuntimeException
;
import
static
jadx
.
core
.
utils
.
Utils
.
lockList
;
public
class
MethodNode
extends
Line
AttrNode
implements
IMethodDetails
,
ILoadable
,
ICodeNode
{
public
class
MethodNode
extends
Notification
AttrNode
implements
IMethodDetails
,
ILoadable
,
ICodeNode
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
MethodNode
.
class
);
private
final
MethodInfo
mthInfo
;
...
...
@@ -203,9 +202,7 @@ public class MethodNode extends LineAttrNode implements IMethodDetails, ILoadabl
return
null
;
}
if
(!
tryFixArgsCounts
(
argsTypes
,
mthArgs
))
{
if
(
LOG
.
isDebugEnabled
())
{
LOG
.
debug
(
"Incorrect method signature, types: ({}), method: {}"
,
Utils
.
listToString
(
argsTypes
),
this
);
}
addComment
(
"Incorrect method signature, types: "
+
Utils
.
listToString
(
argsTypes
));
return
null
;
}
}
...
...
@@ -715,33 +712,6 @@ public class MethodNode extends LineAttrNode implements IMethodDetails, ILoadabl
return
"method"
;
}
public
void
addWarn
(
String
warnStr
)
{
ErrorsCounter
.
methodWarn
(
this
,
warnStr
);
}
public
void
addWarnComment
(
String
warn
)
{
addWarnComment
(
warn
,
null
);
}
public
void
addWarnComment
(
String
warn
,
@Nullable
Throwable
exc
)
{
String
commentStr
=
"JADX WARN: "
+
warn
;
addAttr
(
AType
.
COMMENTS
,
commentStr
);
if
(
exc
!=
null
)
{
LOG
.
warn
(
"{} in {}"
,
warn
,
this
,
exc
);
}
else
{
LOG
.
warn
(
"{} in {}"
,
warn
,
this
);
}
}
public
void
addComment
(
String
commentStr
)
{
addAttr
(
AType
.
COMMENTS
,
commentStr
);
LOG
.
info
(
"{} in {}"
,
commentStr
,
this
);
}
public
void
addError
(
String
errStr
,
Throwable
e
)
{
ErrorsCounter
.
methodError
(
this
,
errStr
,
e
);
}
@Override
public
MethodInfo
getMethodInfo
()
{
return
mthInfo
;
...
...
jadx-core/src/main/java/jadx/core/dex/visitors/DepthTraversal.java
浏览文件 @
dbd00d5a
...
...
@@ -4,8 +4,6 @@ import jadx.core.dex.attributes.AType;
import
jadx.core.dex.nodes.ClassNode
;
import
jadx.core.dex.nodes.MethodNode
;
import
jadx.core.utils.DebugChecks
;
import
jadx.core.utils.ErrorsCounter
;
import
jadx.core.utils.exceptions.JadxOverflowException
;
public
class
DepthTraversal
{
...
...
@@ -15,11 +13,8 @@ public class DepthTraversal {
cls
.
getInnerClasses
().
forEach
(
inCls
->
visit
(
visitor
,
inCls
));
cls
.
getMethods
().
forEach
(
mth
->
visit
(
visitor
,
mth
));
}
}
catch
(
StackOverflowError
e
)
{
ErrorsCounter
.
classError
(
cls
,
"StackOverflow in pass: "
+
visitor
.
getClass
().
getSimpleName
(),
new
JadxOverflowException
(
""
));
}
catch
(
Exception
e
)
{
ErrorsCounter
.
classError
(
cls
,
e
.
getClass
().
getSimpleName
()
+
" in pass: "
+
visitor
.
getClass
().
getSimpleName
(),
e
);
}
catch
(
StackOverflowError
|
Exception
e
)
{
cls
.
addError
(
e
.
getClass
().
getSimpleName
()
+
" in pass: "
+
visitor
.
getClass
().
getSimpleName
(),
e
);
}
}
...
...
@@ -32,11 +27,8 @@ public class DepthTraversal {
if
(
DebugChecks
.
checksEnabled
)
{
DebugChecks
.
runChecksAfterVisitor
(
mth
,
visitor
);
}
}
catch
(
StackOverflowError
e
)
{
ErrorsCounter
.
methodError
(
mth
,
"StackOverflow in pass: "
+
visitor
.
getClass
().
getSimpleName
(),
new
JadxOverflowException
(
""
));
}
catch
(
Exception
e
)
{
ErrorsCounter
.
methodError
(
mth
,
e
.
getClass
().
getSimpleName
()
+
" in pass: "
+
visitor
.
getClass
().
getSimpleName
(),
e
);
}
catch
(
StackOverflowError
|
Exception
e
)
{
mth
.
addError
(
e
.
getClass
().
getSimpleName
()
+
" in pass: "
+
visitor
.
getClass
().
getSimpleName
(),
e
);
}
}
...
...
jadx-core/src/main/java/jadx/core/dex/visitors/ModVisitor.java
浏览文件 @
dbd00d5a
...
...
@@ -46,7 +46,6 @@ import jadx.core.dex.trycatch.ExcHandlerAttr;
import
jadx.core.dex.trycatch.ExceptionHandler
;
import
jadx.core.dex.visitors.regions.variables.ProcessVariables
;
import
jadx.core.dex.visitors.shrink.CodeShrinkVisitor
;
import
jadx.core.utils.ErrorsCounter
;
import
jadx.core.utils.InsnRemover
;
import
jadx.core.utils.InsnUtils
;
import
jadx.core.utils.exceptions.JadxException
;
...
...
@@ -467,9 +466,8 @@ public class ModVisitor extends AbstractVisitor {
elType
=
insnElementType
;
}
if
(!
elType
.
equals
(
insnElementType
)
&&
!
insnArrayType
.
equals
(
ArgType
.
OBJECT
))
{
ErrorsCounter
.
methodWarn
(
mth
,
"Incorrect type for fill-array insn "
+
InsnUtils
.
formatOffset
(
insn
.
getOffset
())
+
", element type: "
+
elType
+
", insn element type: "
+
insnElementType
);
mth
.
addWarn
(
"Incorrect type for fill-array insn "
+
InsnUtils
.
formatOffset
(
insn
.
getOffset
())
+
", element type: "
+
elType
+
", insn element type: "
+
insnElementType
);
}
if
(!
elType
.
isTypeKnown
())
{
LOG
.
warn
(
"Unknown array element type: {} in mth: {}"
,
elType
,
mth
);
...
...
jadx-core/src/main/java/jadx/core/dex/visitors/regions/ProcessTryCatchRegions.java
浏览文件 @
dbd00d5a
...
...
@@ -23,7 +23,6 @@ import jadx.core.dex.trycatch.ExceptionHandler;
import
jadx.core.dex.trycatch.SplitterBlockAttr
;
import
jadx.core.dex.trycatch.TryCatchBlock
;
import
jadx.core.utils.BlockUtils
;
import
jadx.core.utils.ErrorsCounter
;
import
jadx.core.utils.RegionUtils
;
/**
...
...
@@ -105,7 +104,7 @@ public class ProcessTryCatchRegions extends AbstractRegionVisitor {
if
(
region
.
getSubBlocks
().
contains
(
dominator
))
{
TryCatchBlock
tb
=
tryBlocksMap
.
get
(
dominator
);
if
(!
wrapBlocks
(
region
,
tb
,
dominator
))
{
ErrorsCounter
.
methodWarn
(
mth
,
"Can't wrap try/catch for region: "
+
region
);
mth
.
addWarn
(
"Can't wrap try/catch for region: "
+
region
);
}
tryBlocksMap
.
remove
(
dominator
);
return
true
;
...
...
jadx-core/src/main/java/jadx/core/dex/visitors/regions/RegionMaker.java
浏览文件 @
dbd00d5a
...
...
@@ -574,7 +574,7 @@ public class RegionMaker {
BlockNode
body
=
getNextBlock
(
block
);
if
(
body
==
null
)
{
ErrorsCounter
.
methodWarn
(
mth
,
"Unexpected end of synchronized block"
);
mth
.
addWarn
(
"Unexpected end of synchronized block"
);
return
null
;
}
BlockNode
exit
=
null
;
...
...
jadx-core/src/main/java/jadx/core/utils/ErrorsCounter.java
浏览文件 @
dbd00d5a
...
...
@@ -14,7 +14,6 @@ import jadx.core.dex.attributes.AFlag;
import
jadx.core.dex.attributes.AType
;
import
jadx.core.dex.attributes.IAttributeNode
;
import
jadx.core.dex.attributes.nodes.JadxError
;
import
jadx.core.dex.nodes.ClassNode
;
import
jadx.core.dex.nodes.IDexNode
;
import
jadx.core.dex.nodes.MethodNode
;
import
jadx.core.utils.exceptions.JadxOverflowException
;
...
...
@@ -28,12 +27,16 @@ public class ErrorsCounter {
private
final
Set
<
IAttributeNode
>
warnNodes
=
new
HashSet
<>();
private
int
warnsCount
;
public
int
getErrorCount
(
)
{
return
errorsCount
;
public
static
<
N
extends
IDexNode
&
IAttributeNode
>
String
error
(
N
node
,
String
warnMsg
,
Throwable
th
)
{
return
node
.
root
().
getErrorsCounter
().
addError
(
node
,
warnMsg
,
th
)
;
}
public
int
getWarnsCount
()
{
return
warnsCount
;
public
static
<
N
extends
IDexNode
&
IAttributeNode
>
String
warning
(
N
node
,
String
warnMsg
)
{
return
node
.
root
().
getErrorsCounter
().
addWarning
(
node
,
warnMsg
);
}
public
static
String
formatMsg
(
IDexNode
node
,
String
msg
)
{
return
msg
+
" in "
+
node
.
typeName
()
+
": "
+
node
+
", dex: "
+
node
.
dex
().
getDexFile
().
getName
();
}
private
synchronized
<
N
extends
IDexNode
&
IAttributeNode
>
String
addError
(
N
node
,
String
error
,
@Nullable
Throwable
e
)
{
...
...
@@ -47,10 +50,17 @@ public class ErrorsCounter {
}
if
(
e
==
null
)
{
LOG
.
error
(
msg
);
}
else
if
(
e
instanceof
StackOverflowError
)
{
LOG
.
error
(
msg
);
}
else
if
(
e
instanceof
JadxOverflowException
)
{
// don't print full stack trace
e
=
new
JadxOverflowException
(
e
.
getMessage
());
LOG
.
error
(
"{}, details: {}"
,
msg
,
e
.
getMessage
());
String
details
=
e
.
getMessage
();
e
=
new
JadxOverflowException
(
details
);
if
(
details
==
null
||
details
.
isEmpty
())
{
LOG
.
error
(
"{}"
,
msg
);
}
else
{
LOG
.
error
(
"{}, details: {}"
,
msg
,
details
);
}
}
else
{
LOG
.
error
(
msg
,
e
);
}
...
...
@@ -74,26 +84,6 @@ public class ErrorsCounter {
return
msg
;
}
public
static
String
classError
(
ClassNode
cls
,
String
errorMsg
,
Throwable
e
)
{
return
cls
.
dex
().
root
().
getErrorsCounter
().
addError
(
cls
,
errorMsg
,
e
);
}
public
static
String
classWarn
(
ClassNode
cls
,
String
warnMsg
)
{
return
cls
.
dex
().
root
().
getErrorsCounter
().
addWarning
(
cls
,
warnMsg
);
}
public
static
String
methodError
(
MethodNode
mth
,
String
errorMsg
,
Throwable
e
)
{
return
mth
.
root
().
getErrorsCounter
().
addError
(
mth
,
errorMsg
,
e
);
}
public
static
String
methodWarn
(
MethodNode
mth
,
String
warnMsg
)
{
return
mth
.
root
().
getErrorsCounter
().
addWarning
(
mth
,
warnMsg
);
}
public
static
String
formatMsg
(
IDexNode
node
,
String
msg
)
{
return
msg
+
" in "
+
node
.
typeName
()
+
": "
+
node
+
", dex: "
+
node
.
dex
().
getDexFile
().
getName
();
}
public
void
printReport
()
{
if
(
getErrorCount
()
>
0
)
{
LOG
.
error
(
"{} errors occurred in following nodes:"
,
getErrorCount
());
...
...
@@ -111,4 +101,20 @@ public class ErrorsCounter {
LOG
.
warn
(
"{} warnings in {} nodes"
,
getWarnsCount
(),
warnNodes
.
size
());
}
}
public
int
getErrorCount
()
{
return
errorsCount
;
}
public
int
getWarnsCount
()
{
return
warnsCount
;
}
public
Set
<
IAttributeNode
>
getErrorNodes
()
{
return
errorNodes
;
}
public
Set
<
IAttributeNode
>
getWarnNodes
()
{
return
warnNodes
;
}
}
jadx-core/src/main/java/jadx/core/utils/Utils.java
浏览文件 @
dbd00d5a
...
...
@@ -158,14 +158,17 @@ public class Utils {
private
static
void
filter
(
Throwable
th
)
{
StackTraceElement
[]
stackTrace
=
th
.
getStackTrace
();
int
length
=
stackTrace
.
length
;
StackTraceElement
prevElement
=
null
;
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
StackTraceElement
stackTraceElement
=
stackTrace
[
i
];
String
clsName
=
stackTraceElement
.
getClassName
();
if
(
clsName
.
equals
(
STACKTRACE_STOP_CLS_NAME
)
||
clsName
.
startsWith
(
JADX_API_PACKAGE
))
{
||
clsName
.
startsWith
(
JADX_API_PACKAGE
)
||
Objects
.
equals
(
prevElement
,
stackTraceElement
))
{
th
.
setStackTrace
(
Arrays
.
copyOfRange
(
stackTrace
,
0
,
i
));
return
;
}
prevElement
=
stackTraceElement
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录