diff --git a/jadx-core/src/main/java/jadx/api/JavaVariable.java b/jadx-core/src/main/java/jadx/api/JavaVariable.java index d2b5ef3f7..7537905e3 100644 --- a/jadx-core/src/main/java/jadx/api/JavaVariable.java +++ b/jadx-core/src/main/java/jadx/api/JavaVariable.java @@ -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(); diff --git a/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java b/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java index e8fd8f9b0..bd5fd704a 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java @@ -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) { diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/JField.java b/jadx-gui/src/main/java/jadx/gui/treemodel/JField.java index edd816f08..676786c5c 100644 --- a/jadx-gui/src/main/java/jadx/gui/treemodel/JField.java +++ b/jadx-gui/src/main/java/jadx/gui/treemodel/JField.java @@ -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(); diff --git a/jadx-gui/src/main/java/jadx/gui/treemodel/JVariable.java b/jadx-gui/src/main/java/jadx/gui/treemodel/JVariable.java index 9a8e932be..4911d4f52 100644 --- a/jadx-gui/src/main/java/jadx/gui/treemodel/JVariable.java +++ b/jadx-gui/src/main/java/jadx/gui/treemodel/JVariable.java @@ -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; diff --git a/jadx-gui/src/main/java/jadx/gui/utils/UiUtils.java b/jadx-gui/src/main/java/jadx/gui/utils/UiUtils.java index 854fe2fa6..4e03c8cb3 100644 --- a/jadx-gui/src/main/java/jadx/gui/utils/UiUtils.java +++ b/jadx-gui/src/main/java/jadx/gui/utils/UiUtils.java @@ -120,9 +120,15 @@ public class UiUtils { } public static String typeFormatHtml(String name, ArgType type) { - return "