未验证 提交 4cd4746f 编写于 作者: S Skylot

fix(gui): save variable name to show in tooltip (#1487)

上级 6448f0e3
......@@ -6,6 +6,7 @@ import java.util.List;
import org.jetbrains.annotations.ApiStatus;
import jadx.api.metadata.annotations.VarNode;
import jadx.core.dex.instructions.args.ArgType;
public class JavaVariable implements JavaNode {
private final JavaMethod mth;
......@@ -43,6 +44,10 @@ public class JavaVariable implements JavaNode {
return varNode.getType() + " " + varNode.getName() + " (r" + varNode.getReg() + "v" + varNode.getSsa() + ")";
}
public ArgType getType() {
return ArgType.tryToResolveClassAlias(mth.getMethodNode().root(), varNode.getType());
}
@Override
public JavaClass getDeclaringClass() {
return mth.getDeclaringClass();
......
......@@ -168,10 +168,11 @@ public class InsnGen {
* Variable definition without type, only var name
*/
private void defVar(ICodeWriter code, CodeVar codeVar) {
String varName = mgen.getNameGen().assignArg(codeVar);
if (code.isMetadataSupported()) {
code.attachDefinition(VarNode.get(mth, codeVar));
}
code.add(mgen.getNameGen().assignArg(codeVar));
code.add(varName);
}
private String lit(LiteralArg arg) {
......
......@@ -86,6 +86,12 @@ public class JField extends JNode {
return UiUtils.typeFormatHtml(field.getFullName(), field.getType());
}
@Override
public String getTooltip() {
String fullType = UiUtils.escapeHtml(field.getType().toString());
return UiUtils.wrapHtml(fullType + ' ' + UiUtils.escapeHtml(field.getName()));
}
@Override
public String makeDescString() {
return UiUtils.typeStr(field.getType()) + " " + field.getName();
......
......@@ -4,6 +4,7 @@ import javax.swing.Icon;
import jadx.api.JavaNode;
import jadx.api.JavaVariable;
import jadx.gui.utils.UiUtils;
public class JVariable extends JNode {
private static final long serialVersionUID = -3002100457834453783L;
......@@ -55,6 +56,18 @@ public class JVariable extends JNode {
return var.getFullName();
}
@Override
public String makeLongStringHtml() {
return UiUtils.typeFormatHtml(var.getName(), var.getType());
}
@Override
public String getTooltip() {
String name = var.getName() + " (r" + var.getReg() + "v" + var.getSsa() + ")";
String fullType = UiUtils.escapeHtml(var.getType().toString());
return UiUtils.wrapHtml(fullType + ' ' + UiUtils.escapeHtml(name));
}
@Override
public boolean canRename() {
return true;
......
......@@ -120,9 +120,15 @@ public class UiUtils {
}
public static String typeFormatHtml(String name, ArgType type) {
return "<html><body><nobr>" + escapeHtml(name)
+ "<span style='color:#888888;'> " + escapeHtml(typeStr(type)) + "</span>"
+ "</nobr></body></html>";
return wrapHtml(escapeHtml(name) + ' ' + fadeHtml(escapeHtml(typeStr(type))));
}
public static String fadeHtml(String htmlStr) {
return "<span style='color:#888888;'>" + htmlStr + "</span>"; // TODO: get color from theme
}
public static String wrapHtml(String htmlStr) {
return "<html><body><nobr>" + htmlStr + "</nobr></body></html>";
}
public static String escapeHtml(String str) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册