Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
keyescgm
jadx
提交
2bdde6a5
J
jadx
项目概览
keyescgm
/
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,发现更多精彩内容 >>
未验证
提交
2bdde6a5
编写于
1月 28, 2021
作者:
L
LBJ-the-GOAT
提交者:
GitHub
1月 27, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(gui): fix variable usage & caret position after rename (#1099) (PR #1103)
Co-authored-by: tobias <tobias.hotmail.com>
上级
c61cb80a
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
69 addition
and
35 deletion
+69
-35
jadx-core/src/main/java/jadx/api/JadxDecompiler.java
jadx-core/src/main/java/jadx/api/JadxDecompiler.java
+1
-1
jadx-core/src/main/java/jadx/api/JavaVariable.java
jadx-core/src/main/java/jadx/api/JavaVariable.java
+4
-1
jadx-core/src/main/java/jadx/core/codegen/InsnGen.java
jadx-core/src/main/java/jadx/core/codegen/InsnGen.java
+0
-2
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
+3
-15
jadx-core/src/main/java/jadx/core/dex/nodes/VariableNode.java
...-core/src/main/java/jadx/core/dex/nodes/VariableNode.java
+0
-13
jadx-gui/src/main/java/jadx/gui/ui/codearea/CodePanel.java
jadx-gui/src/main/java/jadx/gui/ui/codearea/CodePanel.java
+61
-3
未找到文件。
jadx-core/src/main/java/jadx/api/JadxDecompiler.java
浏览文件 @
2bdde6a5
...
...
@@ -448,7 +448,7 @@ public final class JadxDecompiler implements Closeable {
}
if
(
obj
instanceof
VariableNode
)
{
VariableNode
varNode
=
(
VariableNode
)
obj
;
return
new
JavaVariable
(
getJavaClassByNode
(
varNode
.
getClassNode
()),
varNode
);
return
new
JavaVariable
(
getJavaClassByNode
(
varNode
.
getClassNode
()
.
getTopParentClass
()
),
varNode
);
}
throw
new
JadxRuntimeException
(
"Unexpected node type: "
+
obj
);
}
...
...
jadx-core/src/main/java/jadx/api/JavaVariable.java
浏览文件 @
2bdde6a5
...
...
@@ -55,6 +55,9 @@ public class JavaVariable implements JavaNode {
@Override
public
boolean
equals
(
Object
obj
)
{
return
node
.
equals
(
obj
);
if
(
obj
instanceof
JavaVariable
)
{
return
node
.
equals
(((
JavaVariable
)
obj
).
getVariableNode
());
}
return
false
;
}
}
jadx-core/src/main/java/jadx/core/codegen/InsnGen.java
浏览文件 @
2bdde6a5
...
...
@@ -92,7 +92,6 @@ public class InsnGen {
if
(
codeVar
!=
null
)
{
VariableNode
node
=
mth
.
getVariable
(
codeVar
.
getIndex
());
if
(
node
!=
null
)
{
node
.
useVar
(
code
,
codeVar
);
code
.
attachAnnotation
(
node
);
}
}
...
...
@@ -653,7 +652,6 @@ public class InsnGen {
if
(
insn
.
isSuper
())
{
code
.
add
(
"super"
);
}
else
if
(
insn
.
isThis
())
{
code
.
attachAnnotation
(
mth
.
getParentClass
());
code
.
add
(
"this"
);
}
else
{
code
.
add
(
"new "
);
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
浏览文件 @
2bdde6a5
...
...
@@ -110,15 +110,6 @@ public class MethodNode extends NotificationAttrNode implements IMethodDetails,
return
null
;
}
public
VariableNode
getVariable
(
int
index
,
VarKind
varType
)
{
for
(
VariableNode
variable
:
variables
)
{
if
(
variable
.
getVarKind
()
==
varType
&&
variable
.
getIndex
()
==
index
)
{
return
variable
;
}
}
return
null
;
}
public
VariableNode
declareVar
(
VisibleVar
var
,
NameGen
nameGen
,
VarKind
varKind
)
{
if
(
var
instanceof
CodeVar
)
{
if
(((
CodeVar
)
var
).
isThis
())
{
...
...
@@ -127,14 +118,11 @@ public class MethodNode extends NotificationAttrNode implements IMethodDetails,
}
VariableNode
varNode
;
int
index
=
var
.
getIndex
();
if
(
index
==
-
1
)
{
if
(
index
>
-
1
)
{
varNode
=
getVariable
(
var
.
getIndex
());
}
else
{
index
=
variables
.
size
();
var
.
setIndex
(
index
);
varNode
=
null
;
}
else
{
varNode
=
getVariable
(
var
.
getIndex
());
}
if
(
varNode
==
null
)
{
String
name
=
mthInfo
.
getVariableName
(
VariableNode
.
makeVarIndex
(
index
,
varKind
));
if
(
name
!=
null
)
{
var
.
setName
(
name
);
// set name with user renamed previously.
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/VariableNode.java
浏览文件 @
2bdde6a5
package
jadx.core.dex.nodes
;
import
jadx.core.codegen.CodeWriter
;
import
jadx.core.dex.attributes.nodes.LineAttrNode
;
import
jadx.core.dex.instructions.args.ArgType
;
import
jadx.core.dex.instructions.args.CodeVar
;
import
jadx.core.utils.exceptions.JadxRuntimeException
;
public
class
VariableNode
extends
LineAttrNode
{
...
...
@@ -56,17 +54,6 @@ public class VariableNode extends LineAttrNode {
return
index
;
}
public
void
addUsage
(
int
line
,
int
offset
,
int
codeOffset
)
{
}
public
void
useVar
(
CodeWriter
code
,
CodeVar
codeVar
)
{
if
(!
codeVar
.
isThis
())
{
// TODO: add usage
// IdentifierVisitor.VariableNode node = codeVar.getVariableNode();
// node.addUsage(code.getLine(), code.getOffset(), code.bufLength());
// code.attachAnnotation(node);
}
}
public
String
getRenameKey
()
{
return
mth
.
getMethodInfo
().
getRawFullId
()
+
VAR_SEPARATOR
+
makeVarIndex
(
index
,
varKind
);
}
...
...
jadx-gui/src/main/java/jadx/gui/ui/codearea/CodePanel.java
浏览文件 @
2bdde6a5
...
...
@@ -12,6 +12,9 @@ import javax.swing.JPopupMenu.Separator;
import
javax.swing.border.EmptyBorder
;
import
javax.swing.event.PopupMenuEvent
;
import
javax.swing.event.PopupMenuListener
;
import
javax.swing.text.BadLocationException
;
import
org.fife.ui.rsyntaxtextarea.Token
;
import
jadx.api.ICodeInfo
;
import
jadx.core.utils.StringUtils
;
...
...
@@ -146,12 +149,67 @@ public class CodePanel extends JPanel {
}
public
void
refresh
()
{
JViewport
viewport
=
getCodeScrollPane
().
getViewport
();
Point
viewPosition
=
viewport
.
getViewPosition
();
int
line
;
int
lineCount
;
int
tokenIndex
;
int
pos
=
codeArea
.
getCaretPosition
();
try
{
// after rename the change of document is undetectable, so
// use Token offset to calculate the new caret position.
line
=
codeArea
.
getLineOfOffset
(
pos
);
Token
token
=
codeArea
.
getTokenListForLine
(
line
);
tokenIndex
=
getTokenIndexByOffset
(
token
,
pos
);
}
catch
(
BadLocationException
e
)
{
e
.
printStackTrace
();
tokenIndex
=
0
;
line
=
codeArea
.
getLineCount
()
-
1
;
}
lineCount
=
codeArea
.
getLineCount
();
codeArea
.
refresh
();
initLineNumbers
();
int
lineDiff
=
codeArea
.
getLineCount
()
-
lineCount
;
if
(
lineDiff
>
0
)
{
lineDiff
--;
}
else
if
(
lineDiff
<
0
)
{
lineDiff
++;
}
Token
token
=
codeArea
.
getTokenListForLine
(
line
+
lineDiff
);
int
newPos
=
getOffsetOfTokenByIndex
(
tokenIndex
,
token
);
SwingUtilities
.
invokeLater
(()
->
{
viewport
.
setViewPosition
(
viewPosition
);
if
(
newPos
!=
-
1
)
{
codeArea
.
scrollToPos
(
newPos
);
}
else
{
codeArea
.
scrollToLine
(
codeArea
.
getLineCount
()
-
1
);
}
});
}
private
int
getTokenIndexByOffset
(
Token
token
,
int
offset
)
{
if
(
token
!=
null
)
{
int
index
=
1
;
while
(
token
.
getEndOffset
()
<
offset
)
{
token
=
token
.
getNextToken
();
if
(
token
==
null
)
{
index
=
0
;
break
;
}
index
++;
}
return
index
;
}
return
-
1
;
}
private
int
getOffsetOfTokenByIndex
(
int
index
,
Token
token
)
{
if
(
token
!=
null
)
{
for
(
int
i
=
0
;
i
<
index
;
i
++)
{
token
=
token
.
getNextToken
();
if
(
token
==
null
)
{
return
-
1
;
}
}
return
token
.
getOffset
();
}
return
-
1
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录