Skip to content

Commit e7ab5a4

Browse files
committed
Use FirstOrDefault to eliminate runtime error
Add member to create individual filters and member to concatenate individual filter for dialogs filter.
1 parent 285fd79 commit e7ab5a4

File tree

1 file changed

+32
-12
lines changed

1 file changed

+32
-12
lines changed

Rubberduck.Core/UI/CodeExplorer/Commands/ImportCommand.cs

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,19 @@ private IDictionary<ComponentType, List<IRequiredBinaryFilesFromFileNameExtracto
147147
}
148148

149149
private int _cachedFilterIndex = 1;
150+
151+
private string IndividualFilter(string filterDescription, string fileExtension)
152+
{
153+
return fileExtension != null
154+
? $"{filterDescription} ({fileExtension})|{fileExtension}"
155+
: null;
156+
}
157+
158+
private string CompositeFilter(string separator, params string[] filters)
159+
{
160+
return string.Join(separator, filters.Where(filter => !string.IsNullOrEmpty(filter)));
161+
}
162+
150163
protected virtual ICollection<string> FilesToImport(object parameter)
151164
{
152165
using (var dialog = _dialogFactory.CreateOpenFileDialog())
@@ -159,14 +172,21 @@ protected virtual ICollection<string> FilesToImport(object parameter)
159172
dialog.ShowHelp = false;
160173
dialog.Title = DialogsTitle;
161174
dialog.FilterIndex = _cachedFilterIndex;
162-
dialog.Filter =
163-
$"{RubberduckUI.ImportCommand_OpenDialog_Filter_VBFiles} ({FilterExtension})|{FilterExtension}|" +
164-
$"{Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_NonDocumentModules} ({AllNonDocumentModulesExtension})|{AllNonDocumentModulesExtension}|" +
165-
$"{Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_StandardModules} ({StandardModuleExtension})|{StandardModuleExtension}|" +
166-
$"{Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_ClassModules} ({ClassModuleExtension})|{ClassModuleExtension}|" +
167-
$"{Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_FormModules} ({FormModuleExtension})|{FormModuleExtension}|" +
168-
$"{Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_DocumentModules} ({DocumentModuleExtension})|{DocumentModuleExtension}|" +
169-
$"{RubberduckUI.ImportCommand_OpenDialog_Filter_AllFiles}, (*.*)|*.*";
175+
var vbFilesFilter = IndividualFilter(RubberduckUI.ImportCommand_OpenDialog_Filter_VBFiles, FilterExtension);
176+
var nonDocumentModulesFilter = IndividualFilter(Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_NonDocumentModules, AllNonDocumentModulesExtension);
177+
var standardModulesFilter = IndividualFilter(Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_StandardModules, StandardModuleExtension);
178+
var classModulesFilter = IndividualFilter(Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_ClassModules, ClassModuleExtension);
179+
var formModulesFilter = IndividualFilter(Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_FormModules, FormModuleExtension);
180+
var documentModulesFilter = IndividualFilter(Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_DocumentModules, DocumentModuleExtension);
181+
var allFilesFilter = IndividualFilter(RubberduckUI.ImportCommand_OpenDialog_Filter_AllFiles, "*.*");
182+
dialog.Filter = CompositeFilter("|",
183+
vbFilesFilter,
184+
nonDocumentModulesFilter,
185+
standardModulesFilter,
186+
classModulesFilter,
187+
formModulesFilter,
188+
documentModulesFilter,
189+
allFilesFilter);
170190

171191
if (dialog.ShowDialog() != DialogResult.OK)
172192
{
@@ -575,13 +595,13 @@ protected override void OnExecute(object parameter)
575595
ImportableExtensions.Where(ext => !ext.EndsWith("doccls"))
576596
.Select(ext => $"*{ext}"));
577597

578-
private string StandardModuleExtension => "*" + ImportableExtensions.Where(ext => ext.EndsWith("bas")).First();
598+
private string StandardModuleExtension => "*" + ImportableExtensions.Where(ext => ext.EndsWith("bas")).FirstOrDefault();
579599

580-
private string ClassModuleExtension => "*" + ImportableExtensions.Where(ext => ext.EndsWith(".cls")).First();
600+
private string ClassModuleExtension => "*" + ImportableExtensions.Where(ext => ext.EndsWith(".cls")).FirstOrDefault();
581601

582-
private string FormModuleExtension => "*" + ImportableExtensions.Where(ext => ext.EndsWith("frm")).First();
602+
private string FormModuleExtension => "*" + ImportableExtensions.Where(ext => ext.EndsWith("frm")).FirstOrDefault();
583603

584-
private string DocumentModuleExtension => "*" + ImportableExtensions.Where(ext => ext.EndsWith("doccls")).First();
604+
private string DocumentModuleExtension => "*" + ImportableExtensions.Where(ext => ext.EndsWith("doccls")).FirstOrDefault();
585605

586606
protected IDictionary<string, ICollection<ComponentType>> ComponentTypesForExtension { get; }
587607
}

0 commit comments

Comments
 (0)