From f87bf3f14da340e3bebff4de76dcea37c23c2bde Mon Sep 17 00:00:00 2001 From: Skylot Date: Sun, 5 Apr 2015 15:51:50 +0300 Subject: [PATCH] core: fix class renaming by source file info --- .../java/jadx/core/deobf/Deobfuscator.java | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index 207b6c72..16ce67f7 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -211,28 +211,36 @@ public class Deobfuscator { } private String makeClsAlias(ClassNode cls) { - SourceFileAttr sourceFileAttr = cls.get(AType.SOURCE_FILE); - if (sourceFileAttr != null) { - String name = sourceFileAttr.getFileName(); - if (name.endsWith(".java")) { - name = name.substring(0, name.length() - ".java".length()); - } - if (NameMapper.isValidIdentifier(name) - && !NameMapper.isReserved(name)) { - // TODO: check if no class with this name exists or already renamed - cls.remove(AType.SOURCE_FILE); - return name; - } - } ClassInfo classInfo = cls.getClassInfo(); - String clsName = classInfo.getShortName(); - String alias = String.format("C%04d%s", clsIndex++, makeName(clsName)); - + String alias = getAliasFromSourceFile(cls); + if (alias == null) { + String clsName = classInfo.getShortName(); + alias = String.format("C%04d%s", clsIndex++, makeName(clsName)); + } PackageNode pkg = getPackageNode(classInfo.getPackage(), true); clsMap.put(classInfo, new DeobfClsInfo(this, cls, pkg, alias)); return alias; } + @Nullable + private String getAliasFromSourceFile(ClassNode cls) { + SourceFileAttr sourceFileAttr = cls.get(AType.SOURCE_FILE); + if (sourceFileAttr == null) { + return null; + } + String name = sourceFileAttr.getFileName(); + if (name.endsWith(".java")) { + name = name.substring(0, name.length() - ".java".length()); + } + if (NameMapper.isValidIdentifier(name) + && !NameMapper.isReserved(name)) { + // TODO: check if no class with this name exists or already renamed + cls.remove(AType.SOURCE_FILE); + return name; + } + return null; + } + @Nullable public String getFieldAlias(FieldNode field) { FieldInfo fieldInfo = field.getFieldInfo(); -- GitLab