feat: add the option to always use source file name as class name alias (PR #2287)

This commit is contained in:
pubiqq
2024-09-24 00:47:08 +03:00
committed by GitHub
parent 7abbc81886
commit b5e3dcf70f
20 changed files with 248 additions and 73 deletions
@@ -35,7 +35,7 @@ import jadx.core.utils.files.FileUtils;
public class DiskCodeCache implements ICodeCache {
private static final Logger LOG = LoggerFactory.getLogger(DiskCodeCache.class);
private static final int DATA_FORMAT_VERSION = 14;
private static final int DATA_FORMAT_VERSION = 15;
private final Path baseDir;
private final Path srcDir;
@@ -32,6 +32,7 @@ import jadx.api.JadxArgs;
import jadx.api.args.GeneratedRenamesMappingFileMode;
import jadx.api.args.IntegerFormat;
import jadx.api.args.ResourceNameSource;
import jadx.api.args.UseSourceNameAsClassNameAlias;
import jadx.api.args.UserRenamesMappingsMode;
import jadx.cli.JadxCLIArgs;
import jadx.cli.LogHelper;
@@ -53,7 +54,7 @@ public class JadxSettings extends JadxCLIArgs {
private static final Path USER_HOME = Paths.get(System.getProperty("user.home"));
private static final int RECENT_PROJECTS_COUNT = 30;
private static final int CURRENT_SETTINGS_VERSION = 21;
private static final int CURRENT_SETTINGS_VERSION = 22;
private static final Font DEFAULT_FONT = new RSyntaxTextArea().getFont();
@@ -400,8 +401,17 @@ public class JadxSettings extends JadxCLIArgs {
this.generatedRenamesMappingFileMode = mode;
}
public void setUseSourceNameAsClassNameAlias(UseSourceNameAsClassNameAlias useSourceNameAsClassNameAlias) {
this.useSourceNameAsClassNameAlias = useSourceNameAsClassNameAlias;
}
/**
* @deprecated Use {@link #setUseSourceNameAsClassNameAlias(UseSourceNameAsClassNameAlias)} instead.
*/
@Deprecated
public void setDeobfuscationUseSourceNameAsAlias(boolean deobfuscationUseSourceNameAsAlias) {
this.deobfuscationUseSourceNameAsAlias = deobfuscationUseSourceNameAsAlias;
final var useSourceName = UseSourceNameAsClassNameAlias.create(deobfuscationUseSourceNameAsAlias);
setUseSourceNameAsClassNameAlias(useSourceName);
}
public void setUseKotlinMethodsForVarNames(JadxArgs.UseKotlinMethodsForVarNames useKotlinMethodsForVarNames) {
@@ -829,6 +839,10 @@ public class JadxSettings extends JadxCLIArgs {
jadxUpdateChannel = JadxUpdateChannel.STABLE;
fromVersion++;
}
if (fromVersion == 21) {
migrateUseSourceNameAsClassNameAlias();
fromVersion++;
}
if (fromVersion != CURRENT_SETTINGS_VERSION) {
LOG.warn("Incorrect settings upgrade. Expected version: {}, got: {}", CURRENT_SETTINGS_VERSION, fromVersion);
}
@@ -836,6 +850,14 @@ public class JadxSettings extends JadxCLIArgs {
sync();
}
@SuppressWarnings("deprecation")
private void migrateUseSourceNameAsClassNameAlias() {
final var deobfuscationUseSourceNameAsAlias = this.deobfuscationUseSourceNameAsAlias;
if (deobfuscationUseSourceNameAsAlias != null) {
useSourceNameAsClassNameAlias = UseSourceNameAsClassNameAlias.create(deobfuscationUseSourceNameAsAlias);
}
}
@Override
protected JadxCLIArgs newInstance() {
return new JadxSettings();
@@ -54,6 +54,7 @@ import jadx.api.JadxDecompiler;
import jadx.api.args.GeneratedRenamesMappingFileMode;
import jadx.api.args.IntegerFormat;
import jadx.api.args.ResourceNameSource;
import jadx.api.args.UseSourceNameAsClassNameAlias;
import jadx.api.plugins.events.JadxEvents;
import jadx.api.plugins.gui.ISettingsGroup;
import jadx.gui.settings.JadxSettings;
@@ -292,10 +293,10 @@ public class JadxSettingsWindow extends JDialog {
needReload();
});
JCheckBox deobfSourceAlias = new JCheckBox();
deobfSourceAlias.setSelected(settings.isDeobfuscationUseSourceNameAsAlias());
deobfSourceAlias.addItemListener(e -> {
settings.setDeobfuscationUseSourceNameAsAlias(e.getStateChange() == ItemEvent.SELECTED);
JComboBox<UseSourceNameAsClassNameAlias> useSourceNameAsClassNameAlias = new JComboBox<>(UseSourceNameAsClassNameAlias.values());
useSourceNameAsClassNameAlias.setSelectedItem(settings.getUseSourceNameAsClassNameAlias());
useSourceNameAsClassNameAlias.addActionListener(e -> {
settings.setUseSourceNameAsClassNameAlias((UseSourceNameAsClassNameAlias) useSourceNameAsClassNameAlias.getSelectedItem());
needReload();
});
@@ -303,7 +304,7 @@ public class JadxSettingsWindow extends JDialog {
group.addRow(NLS.str("preferences.rename_case"), renameCaseSensitive);
group.addRow(NLS.str("preferences.rename_valid"), renameValid);
group.addRow(NLS.str("preferences.rename_printable"), renamePrintable);
group.addRow(NLS.str("preferences.deobfuscation_source_alias"), deobfSourceAlias);
group.addRow(NLS.str("preferences.rename_use_source_name_as_class_name_alias"), useSourceNameAsClassNameAlias);
return group;
}
@@ -232,7 +232,6 @@ preferences.deobfuscation_on=Deobfuskierung aktivieren
preferences.generated_renames_mapping_file_mode=Umgang mit Map-Dateien
preferences.deobfuscation_min_len=Minimale Namenlänge
preferences.deobfuscation_max_len=Maximale Namenlänge
preferences.deobfuscation_source_alias=Quelldateiname als Klassennamen-Alias verwenden
#preferences.deobfuscation_res_name_source=Better resources name source
preferences.deobfuscation_whitelist=Pakete und Klassen von Deobfuskierung ausschließen
preferences.deobfuscation_whitelist.editDialog=Whitelist für Deobfuskierung
@@ -248,6 +247,7 @@ preferences.rename=Umbenennen
preferences.rename_case=System unterscheidet zwischen Groß/Kleinschreibung
preferences.rename_valid=Ist eine gültige Kennung
preferences.rename_printable=Ist druckbar
preferences.rename_use_source_name_as_class_name_alias=Quelldateiname als Klassennamen-Alias verwenden
preferences.search_group_title=Ressourcen durchsuchen
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=Dateierweiterungen (z.B. .xml|.html), * bedeutet alle
@@ -232,7 +232,6 @@ preferences.deobfuscation_on=Enable deobfuscation
preferences.generated_renames_mapping_file_mode=Map file handle mode
preferences.deobfuscation_min_len=Minimum name length
preferences.deobfuscation_max_len=Maximum name length
preferences.deobfuscation_source_alias=Use source file name as class name alias
preferences.deobfuscation_res_name_source=Better resources name source
preferences.deobfuscation_whitelist=Exclude packages and classes from deobfuscation
preferences.deobfuscation_whitelist.editDialog=Whitelist for deobfuscation
@@ -248,6 +247,7 @@ preferences.rename=Rename identifiers
preferences.rename_case=To fix case sensitivity issues
preferences.rename_valid=To make them valid
preferences.rename_printable=To make printable
preferences.rename_use_source_name_as_class_name_alias=Use source file name as class name alias
preferences.search_group_title=Search
preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=Resource files extensions ('xml|html', * for all)
@@ -232,7 +232,6 @@ preferences.deobfuscation_on=Activar desobfuscación
#preferences.generated_renames_mapping_file_mode=Map file handle mode
preferences.deobfuscation_min_len=Longitud mínima del nombre
preferences.deobfuscation_max_len=Longitud máxima del nombre
preferences.deobfuscation_source_alias=Usar el nombre del source como alias para la clase
#preferences.deobfuscation_res_name_source=Better resources name source
#preferences.deobfuscation_whitelist=Exclude packages and classes from deobfuscation
#preferences.deobfuscation_whitelist.editDialog=Whitelist for deobfuscation
@@ -248,6 +247,7 @@ preferences.reset_title=Reestablecer preferencias
#preferences.rename_case=
#preferences.rename_valid=
#preferences.rename_printable=
preferences.rename_use_source_name_as_class_name_alias=Usar el nombre del source como alias para la clase
#preferences.search_group_title=Search
#preferences.search_results_per_page=Results per page (0 - no limit)
#preferences.res_file_ext=Resource files extensions ('xml|html', * for all)
@@ -232,7 +232,6 @@ preferences.deobfuscation_on=Aktifkan deobfikasi
preferences.generated_renames_mapping_file_mode=Mode penanganan file pemetaan
preferences.deobfuscation_min_len=Panjang nama minimum
preferences.deobfuscation_max_len=Panjang nama maksimum
preferences.deobfuscation_source_alias=Gunakan nama berkas sumber sebagai alias nama kelas
preferences.deobfuscation_res_name_source=Sumber nama sumber daya yang lebih baik
#preferences.deobfuscation_whitelist=Exclude packages and classes from deobfuscation
#preferences.deobfuscation_whitelist.editDialog=Whitelist for deobfuscation
@@ -248,6 +247,7 @@ preferences.rename=Ganti nama identitas
preferences.rename_case=Untuk memperbaiki masalah sensitivitas huruf besar-kecil
preferences.rename_valid=Untuk membuatnya valid
preferences.rename_printable=Untuk membuatnya dapat dicetak
preferences.rename_use_source_name_as_class_name_alias=Gunakan nama berkas sumber sebagai alias nama kelas
preferences.search_group_title=Pencarian
preferences.search_results_per_page=Hasil per halaman (0 - tanpa batas)
preferences.res_file_ext=Ekstensi berkas sumber daya ('xml|html', * untuk semua)
@@ -232,7 +232,6 @@ preferences.deobfuscation_on=난독 해제 활성화
preferences.generated_renames_mapping_file_mode=맵 파일 처리 모드
preferences.deobfuscation_min_len=최소 이름 길이
preferences.deobfuscation_max_len=최대 이름 길이
preferences.deobfuscation_source_alias=소스 파일 이름을 클래스 이름 별칭으로 사용
preferences.deobfuscation_res_name_source=더 나은 리소스 이름 소스
#preferences.deobfuscation_whitelist=Exclude packages and classes from deobfuscation
#preferences.deobfuscation_whitelist.editDialog=Whitelist for deobfuscation
@@ -248,6 +247,7 @@ preferences.rename=이름 바꾸기
preferences.rename_case=시스템 대소문자 구분
preferences.rename_valid=유효한 식별자로 바꾸기
preferences.rename_printable=출력 가능하게 바꾸기
preferences.rename_use_source_name_as_class_name_alias=소스 파일 이름을 클래스 이름 별칭으로 사용
preferences.search_group_title=리소스 검색
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=파일 확장자 (예: .xml|.html) (* 은 전체를 의미)
@@ -232,7 +232,6 @@ preferences.deobfuscation_on=Ativar desofuscação
#preferences.generated_renames_mapping_file_mode=Map file handle mode
preferences.deobfuscation_min_len=Tamanho mínimo do nome
preferences.deobfuscation_max_len=Tamanho máximo do nome
preferences.deobfuscation_source_alias=Utilizar nome do arquivo como apelido da classe
preferences.deobfuscation_res_name_source=Melhora nome da fonte dos recursos
#preferences.deobfuscation_whitelist=Exclude packages and classes from deobfuscation
#preferences.deobfuscation_whitelist.editDialog=Whitelist for deobfuscation
@@ -248,6 +247,7 @@ preferences.rename=Renomear identificadores
preferences.rename_case=Corrigir problemas de capitalização (case sensitivity)
preferences.rename_valid=Deixá-las válidas
preferences.rename_printable=Deixá-las imprimíveis (printable)
preferences.rename_use_source_name_as_class_name_alias=Utilizar nome do arquivo como apelido da classe
preferences.search_group_title=Buscar recursos
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=Extensões de arquivos (ex: .xml|.html), * significa todas
@@ -232,7 +232,6 @@ preferences.deobfuscation_on=Включить деобфускацию
preferences.generated_renames_mapping_file_mode=Режим обработки маппингов
preferences.deobfuscation_min_len=Минимальная длина имени
preferences.deobfuscation_max_len=Максимальная длина имени
preferences.deobfuscation_source_alias=Иcпользовать атрибут SOURCE
preferences.deobfuscation_res_name_source=Расшифровка имен ресурсов
preferences.deobfuscation_whitelist=Исключить пакеты и классы из деобфускации
preferences.deobfuscation_whitelist.editDialog=Белый список деобфускации
@@ -248,6 +247,7 @@ preferences.rename=Переименовать идентификаторы
preferences.rename_case=И исправить проблемы именования
preferences.rename_valid=И сделать их верными
preferences.rename_printable=И сделать их доступными для печати
preferences.rename_use_source_name_as_class_name_alias=Иcпользовать атрибут SOURCE
preferences.search_group_title=Поиск
preferences.search_results_per_page=Результатов на страницу (0 - без лимита)
preferences.res_file_ext=Расширения файлов ресурсов ('xml|html', * для всех)
@@ -232,7 +232,6 @@ preferences.deobfuscation_on=启用反混淆
preferences.generated_renames_mapping_file_mode=映射文件句柄模式
preferences.deobfuscation_min_len=最小命名长度
preferences.deobfuscation_max_len=最大命名长度
preferences.deobfuscation_source_alias=使用资源名作为类的别名
preferences.deobfuscation_res_name_source=更好的资源名称来源
preferences.deobfuscation_whitelist=从反混淆中排除包和类
preferences.deobfuscation_whitelist.editDialog=反混淆白名单
@@ -248,6 +247,7 @@ preferences.rename=重命名标识符
preferences.rename_case=标识符要能够区分大小写
preferences.rename_valid=标识符应该符合标准规范
preferences.rename_printable=标识符必须要能正常显示
preferences.rename_use_source_name_as_class_name_alias=使用资源名作为类的别名
preferences.search_group_title=搜索资源
preferences.search_results_per_page=每页结果数(0 - 无限制)
preferences.res_file_ext=文件扩展名(e.g. .xml|.html),* 表示所有
@@ -232,7 +232,6 @@ preferences.deobfuscation_on=啟用去模糊化
preferences.generated_renames_mapping_file_mode=Map 檔案處理模式
preferences.deobfuscation_min_len=最小名稱長度
preferences.deobfuscation_max_len=最大名稱長度
preferences.deobfuscation_source_alias=將原始檔案名稱作為類別別名
preferences.deobfuscation_res_name_source=較佳的資源名稱來源
#preferences.deobfuscation_whitelist=Exclude packages and classes from deobfuscation
#preferences.deobfuscation_whitelist.editDialog=Whitelist for deobfuscation
@@ -248,6 +247,7 @@ preferences.rename=重新命名識別碼
preferences.rename_case=以修復區分大小寫問題
preferences.rename_valid=以使其有效
preferences.rename_printable=以使其可列印
preferences.rename_use_source_name_as_class_name_alias=將原始檔案名稱作為類別別名
preferences.search_group_title=搜尋資源
preferences.search_results_per_page=每頁的搜尋結果數 (0 - 無限制)
preferences.res_file_ext=副檔名 (e.g. .xml|.html), * 表示全部