fix: workaround for duplicated variables names index increment (#2868)

This commit is contained in:
Skylot
2026-05-09 20:51:02 +01:00
parent 62fa2735dc
commit 2fe95da570
@@ -3,6 +3,8 @@ package jadx.core.codegen;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import jadx.core.deobf.NameMapper; import jadx.core.deobf.NameMapper;
import jadx.core.dex.attributes.nodes.LoopLabelAttr; import jadx.core.dex.attributes.nodes.LoopLabelAttr;
@@ -84,15 +86,32 @@ public class NameGen {
return name; return name;
} }
private static final Pattern ENDS_WITH_NUMBER = Pattern.compile(".*(\\d+)$");
private String getUniqueVarName(String name) { private String getUniqueVarName(String name) {
String r = name; if (!varNames.contains(name)) {
int i = 2; varNames.add(name);
while (varNames.contains(r)) { return name;
r = name + i; }
i++; // code duplication reuse same variable in different places
// parse variable name and increment index
String base;
int i;
Matcher matcher = ENDS_WITH_NUMBER.matcher(name);
if (matcher.matches()) {
base = name.substring(0, matcher.start(1));
i = 1 + Integer.parseInt(matcher.group(1));
} else {
base = name;
i = 2;
}
while (true) {
String newName = base + i++;
if (!varNames.contains(newName)) {
varNames.add(newName);
return newName;
}
} }
varNames.add(r);
return r;
} }
private String makeArgName(CodeVar var) { private String makeArgName(CodeVar var) {