fix(gui): support filtering files with multiple extensions in file dialog (PR #2185)
* fix(gui): support filtering files with multiple extensions in file dialog * lint
This commit is contained in:
@@ -13,7 +13,6 @@ import javax.swing.JDialog;
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
|
||||
import jadx.api.plugins.utils.CommonFileUtils;
|
||||
import jadx.core.utils.Utils;
|
||||
@@ -44,7 +43,7 @@ class CustomFileChooser extends JFileChooser {
|
||||
List<String> fileExtList = data.getFileExtList();
|
||||
if (Utils.notEmpty(fileExtList)) {
|
||||
String description = NLS.str("file_dialog.supported_files") + ": (" + Utils.listToString(fileExtList) + ')';
|
||||
setFileFilter(new FileNameExtensionFilter(description, fileExtList.toArray(new String[0])));
|
||||
setFileFilter(new FileNameMultiExtensionFilter(description, fileExtList.toArray(new String[0])));
|
||||
}
|
||||
if (data.getSelectedFile() != null) {
|
||||
setSelectedFile(data.getSelectedFile().toFile());
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package jadx.gui.ui.filedialog;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.swing.filechooser.FileFilter;
|
||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
|
||||
/**
|
||||
* Custom file filter for filtering files with multiple extensions.
|
||||
* It overcomes the limitation of {@link FileNameExtensionFilter},
|
||||
* which treats only the last file extension split by dots as the
|
||||
* file extension, and does not support multiple extensions such as
|
||||
* {@code .jadx.kts}.
|
||||
*/
|
||||
class FileNameMultiExtensionFilter extends FileFilter {
|
||||
private final FileNameExtensionFilter delegate;
|
||||
private final String[] extensions;
|
||||
|
||||
public FileNameMultiExtensionFilter(String description, String... extensions) {
|
||||
this.delegate = new FileNameExtensionFilter(description, extensions[0]);
|
||||
this.extensions = extensions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(File file) {
|
||||
if (file.isDirectory()) {
|
||||
return true;
|
||||
}
|
||||
String fileName = file.getName();
|
||||
for (String extension : extensions) {
|
||||
if (fileName.endsWith(extension)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return delegate.getDescription();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user