@@ -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