From 1bb53329b52223504795e1a9c854cec958a52325 Mon Sep 17 00:00:00 2001 From: Skylot Date: Tue, 26 Mar 2019 19:11:14 +0300 Subject: [PATCH] fix: use alias as a base for class rename if file system is case sensitive (#474) --- .../jadx/core/dex/visitors/RenameVisitor.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/RenameVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/RenameVisitor.java index 9595d72fa..5551dc958 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/RenameVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/RenameVisitor.java @@ -50,19 +50,23 @@ public class RenameVisitor extends AbstractVisitor { } private void checkClasses(RootNode root, boolean caseSensitive) { - Set clsNames = new HashSet<>(); - for (ClassNode cls : root.getClasses(true)) { + List classes = root.getClasses(true); + for (ClassNode cls : classes) { checkClassName(cls); checkFields(cls); checkMethods(cls); - if (!caseSensitive) { - ClassInfo classInfo = cls.getClassInfo(); - String clsFileName = classInfo.getAlias().getFullPath(); - if (!clsNames.add(clsFileName.toLowerCase())) { + } + if (!caseSensitive) { + Set clsFullPaths = new HashSet<>(classes.size()); + for (ClassNode cls : classes) { + ClassInfo clsInfo = cls.getClassInfo(); + ClassInfo aliasClsInfo = clsInfo.getAlias(); + if (!clsFullPaths.add(aliasClsInfo.getFullPath().toLowerCase())) { String newShortName = deobfuscator.getClsAlias(cls); - String newFullName = classInfo.makeFullClsName(newShortName, true); - classInfo.rename(cls.root(), newFullName); - clsNames.add(classInfo.getAlias().getFullPath().toLowerCase()); + String newFullName = aliasClsInfo.makeFullClsName(newShortName, true); + + clsInfo.rename(root, newFullName); + clsFullPaths.add(clsInfo.getAlias().getFullPath().toLowerCase()); } } }