11using  System . Collections . Generic ; 
22using  System . ComponentModel . Composition ; 
3- using  System . IO ; 
43using  System . Threading . Tasks ; 
4+ using  GitHub . InlineReviews . Services ; 
55using  GitHub . Services ; 
66using  GitHub . VisualStudio ; 
77using  Microsoft . Internal . VisualStudio . PlatformUI ; 
@@ -20,46 +20,34 @@ public static class PullRequestFilterPackageGuids
2020    public  class  PullRequestFilterProvider  :  HierarchyTreeFilterProvider 
2121    { 
2222        private  readonly  IVsHierarchyItemCollectionProvider  hierarchyCollectionProvider ; 
23-         private  readonly  IGitHubServiceProvider  githubServiceProvider ; 
23+         readonly  IGitHubServiceProvider  githubServiceProvider ; 
24+         readonly  IPullRequestFilterService  pullRequestFilterService ; 
2425
2526        [ ImportingConstructor ] 
26-         public  PullRequestFilterProvider ( IVsHierarchyItemCollectionProvider  hierarchyCollectionProvider ,  IGitHubServiceProvider  githubServiceProvider ) 
27+         public  PullRequestFilterProvider ( IVsHierarchyItemCollectionProvider  hierarchyCollectionProvider ,  IGitHubServiceProvider  githubServiceProvider ,   IPullRequestFilterService   pullRequestFilterService ) 
2728        { 
2829            this . hierarchyCollectionProvider  =  hierarchyCollectionProvider ; 
2930            this . githubServiceProvider  =  githubServiceProvider ; 
31+             this . pullRequestFilterService  =  pullRequestFilterService ; 
3032        } 
3133
3234        protected  override  HierarchyTreeFilter  CreateFilter ( ) 
3335        { 
34-             return  new  PullRequestFilter ( hierarchyCollectionProvider ,  githubServiceProvider ) ; 
36+             return  new  PullRequestFilter ( hierarchyCollectionProvider ,  githubServiceProvider ,   pullRequestFilterService ) ; 
3537        } 
3638
3739        private  sealed  class  PullRequestFilter  :  HierarchyTreeFilter 
3840        { 
3941            private  readonly  IVsHierarchyItemCollectionProvider  hierarchyCollectionProvider ; 
40-             private   readonly  IGitHubServiceProvider  githubServiceProvider ; 
41-             private   IPullRequestSessionManager   sessionManager ; 
42+             readonly  IGitHubServiceProvider  githubServiceProvider ; 
43+             readonly   IPullRequestFilterService   pullRequestFilterService ; 
4244            private  HashSet < string >  pullRequestSessionFiles ; 
4345
44-             public  PullRequestFilter ( IVsHierarchyItemCollectionProvider  hierarchyCollectionProvider ,  IGitHubServiceProvider  githubServiceProvider ) 
46+             public  PullRequestFilter ( IVsHierarchyItemCollectionProvider  hierarchyCollectionProvider ,  IGitHubServiceProvider  githubServiceProvider ,   IPullRequestFilterService   pullRequestFilterService ) 
4547            { 
4648                this . hierarchyCollectionProvider  =  hierarchyCollectionProvider ; 
4749                this . githubServiceProvider  =  githubServiceProvider ; 
48-             } 
49- 
50-             IPullRequestSessionManager  SessionManager 
51-             { 
52-                 get 
53-                 { 
54-                     // Lazily load the pull request session manager to prevent all of our assemblies 
55-                     // being loaded on VS startup. 
56-                     if  ( sessionManager  ==  null ) 
57-                     { 
58-                         sessionManager  =  githubServiceProvider . GetService < IPullRequestSessionManager > ( ) ; 
59-                     } 
60- 
61-                     return  sessionManager ; 
62-                 } 
50+                 this . pullRequestFilterService  =  pullRequestFilterService ; 
6351            } 
6452
6553            // Gets the items to be included from this filter provider. 
@@ -75,25 +63,12 @@ protected override async Task<IReadOnlyObservableSet> GetIncludedItemsAsync(IEnu
7563                string  _ ; 
7664                vsSolution . GetSolutionInfo ( out  solutionDirectory ,  out  _ ,  out  _ ) ; 
7765
78-                 this . pullRequestSessionFiles  =  new  HashSet < string > ( ) ; 
79-                 if  ( SessionManager . CurrentSession  !=  null ) 
80-                 { 
81-                     var  requestSessionFiles  =  await  SessionManager . CurrentSession . GetAllFiles ( ) ; 
82-                     requestSessionFiles . ForEach ( file =>  this . pullRequestSessionFiles . Add ( BuildAbsolutePath ( solutionDirectory ,  file . RelativePath ) ) ) ; 
83-                 } 
84- 
85-                 return  await  hierarchyCollectionProvider . GetFilteredHierarchyItemsAsync ( sourceItems ,  ShouldIncludeInFilter ,  CancellationToken ) ; 
86-             } 
66+                 pullRequestSessionFiles  =  await  pullRequestFilterService . GetPullRequestSessionFiles ( solutionDirectory ) ; 
8767
88-             // Returns true if filters hierarchy item name for given filter; otherwise, false</returns> 
89-             private  bool  ShouldIncludeInFilter ( IVsHierarchyItem  hierarchyItem ) 
90-             { 
91-                 return  hierarchyItem ? . CanonicalName  !=  null  &&  pullRequestSessionFiles . Contains ( hierarchyItem . CanonicalName . ToUpperInvariant ( ) ) ; 
92-             } 
93- 
94-             private  static string  BuildAbsolutePath ( string  solutionDirectory ,  string  fileRelativePath ) 
95-             { 
96-                 return  Path . Combine ( solutionDirectory ,  fileRelativePath . Replace ( "/" ,  @"\" ) ) . ToUpperInvariant ( ) ; 
68+                 return 
69+                     await  hierarchyCollectionProvider . GetFilteredHierarchyItemsAsync ( sourceItems , 
70+                         hierarchyItem =>  PullRequestFilterService . ShouldIncludeInFilter ( pullRequestSessionFiles ,  hierarchyItem ) , 
71+                         CancellationToken ) ; 
9772            } 
9873        } 
9974    } 
0 commit comments