提交 c2a4a7a6 编写于 作者: J Jan Peter Stotz 提交者: skylot

fix: "rename to make printable" option was renaming fully printable class names

上级 ff4e3dd9
...@@ -160,6 +160,18 @@ public class NameMapper { ...@@ -160,6 +160,18 @@ public class NameMapper {
return result; return result;
} }
public static String removeNonPrintableCharacters(String name) {
int len = name.length();
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
int codePoint = name.codePointAt(i);
if (isPrintableChar(codePoint)) {
sb.append((char) codePoint);
}
}
return sb.toString();
}
private NameMapper() { private NameMapper() {
} }
} }
...@@ -125,22 +125,27 @@ public class RenameVisitor extends AbstractVisitor { ...@@ -125,22 +125,27 @@ public class RenameVisitor extends AbstractVisitor {
@Nullable @Nullable
private static String fixClsShortName(JadxArgs args, String clsName) { private static String fixClsShortName(JadxArgs args, String clsName) {
char firstChar = clsName.charAt(0);
boolean renameValid = args.isRenameValid(); boolean renameValid = args.isRenameValid();
if (Character.isDigit(firstChar) && renameValid) { if (renameValid) {
return Consts.ANONYMOUS_CLASS_PREFIX + NameMapper.removeInvalidCharsMiddle(clsName); char firstChar = clsName.charAt(0);
} if (Character.isDigit(firstChar)) {
if (firstChar == '$' && renameValid) { return Consts.ANONYMOUS_CLASS_PREFIX + NameMapper.removeInvalidCharsMiddle(clsName);
return 'C' + NameMapper.removeInvalidCharsMiddle(clsName); }
if (firstChar == '$') {
return 'C' + NameMapper.removeInvalidCharsMiddle(clsName);
}
} }
String cleanClsName = args.isRenamePrintable() String cleanClsName = args.isRenamePrintable()
? NameMapper.removeInvalidChars(clsName, "C") ? NameMapper.removeNonPrintableCharacters(clsName)
: clsName; : clsName;
if (cleanClsName.isEmpty()) { if (cleanClsName.isEmpty()) {
return null; return null;
} }
if (renameValid && !NameMapper.isValidIdentifier(cleanClsName)) { if (renameValid) {
return 'C' + cleanClsName; cleanClsName = NameMapper.removeInvalidChars(clsName, "C");
if (!NameMapper.isValidIdentifier(cleanClsName)) {
return 'C' + cleanClsName;
}
} }
return cleanClsName; return cleanClsName;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册