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