fix(gui): validate extensions list in file dialog (PR #2515)

* fix(gui): fixed export file without extensions (close #2514)

* don't add null extensions

---------

Co-authored-by: Skylot <118523+skylot@users.noreply.github.com>
This commit is contained in:
Yaroslav
2025-05-25 22:23:36 +03:00
committed by GitHub
parent abd64007e2
commit fc0f1f9a1c
3 changed files with 13 additions and 4 deletions
@@ -8,6 +8,7 @@ import java.io.File;
import java.nio.file.Path;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
@@ -15,6 +16,7 @@ import javax.swing.JOptionPane;
import javax.swing.UIManager;
import jadx.api.plugins.utils.CommonFileUtils;
import jadx.core.utils.StringUtils;
import jadx.core.utils.Utils;
import jadx.core.utils.files.FileUtils;
import jadx.gui.ui.MainWindow;
@@ -42,8 +44,13 @@ class CustomFileChooser extends JFileChooser {
setAcceptAllFileFilterUsed(true);
List<String> fileExtList = data.getFileExtList();
if (Utils.notEmpty(fileExtList)) {
String description = NLS.str("file_dialog.supported_files") + ": (" + Utils.listToString(fileExtList) + ')';
setFileFilter(new FileNameMultiExtensionFilter(description, fileExtList.toArray(new String[0])));
List<String> validFileExtList = fileExtList.stream()
.filter(StringUtils::notBlank)
.collect(Collectors.toList());
if (Utils.notEmpty(validFileExtList)) {
String description = NLS.str("file_dialog.supported_files") + ": (" + Utils.listToString(validFileExtList) + ')';
setFileFilter(new FileNameMultiExtensionFilter(description, validFileExtList.toArray(new String[0])));
}
}
if (data.getSelectedFile() != null) {
setSelectedFile(data.getSelectedFile().toFile());
@@ -23,7 +23,7 @@ public class FileDialogWrapper {
private boolean isOpen;
private String title;
private List<String> fileExtList;
private List<String> fileExtList = new ArrayList<>();
private int selectionMode = JFileChooser.FILES_AND_DIRECTORIES;
private @Nullable Path currentDir;
private @Nullable Path selectedFile;
@@ -67,7 +67,9 @@ public class JResourcePopupMenu extends JPopupMenu {
String extension = CommonFileUtils.getFileExtension(resource.getName());
FileDialogWrapper fileDialog = new FileDialogWrapper(mainWindow, FileOpenMode.EXPORT_NODE);
fileDialog.setFileExtList(Collections.singletonList(extension));
if (extension != null) {
fileDialog.setFileExtList(Collections.singletonList(extension));
}
Path currentDir = fileDialog.getCurrentDir();
if (currentDir != null) {
fileDialog.setSelectedFile(currentDir.resolve(resource.getName()));