fix(deobf): rename classes as anonymous only if they are a number (PR #1354)

This commit is contained in:
Yotam
2022-01-23 23:16:05 +02:00
committed by GitHub
parent 0c9e3227d0
commit f674a29a64
@@ -5,6 +5,7 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import org.jetbrains.annotations.Nullable;
@@ -25,6 +26,7 @@ import jadx.core.dex.nodes.RootNode;
import jadx.core.dex.visitors.AbstractVisitor;
public class RenameVisitor extends AbstractVisitor {
private static final Pattern ANONYMOUS_CLASS_PATTERN = Pattern.compile("^\\d+$");
@Override
public void init(RootNode root) {
@@ -130,11 +132,12 @@ public class RenameVisitor extends AbstractVisitor {
private static String fixClsShortName(JadxArgs args, String clsName) {
boolean renameValid = args.isRenameValid();
if (renameValid) {
char firstChar = clsName.charAt(0);
if (Character.isDigit(firstChar)) {
if (ANONYMOUS_CLASS_PATTERN.matcher(clsName).matches()) {
return Consts.ANONYMOUS_CLASS_PREFIX + NameMapper.removeInvalidCharsMiddle(clsName);
}
if (firstChar == '$') {
char firstChar = clsName.charAt(0);
if (firstChar == '$' || Character.isDigit(firstChar)) {
return 'C' + NameMapper.removeInvalidCharsMiddle(clsName);
}
}