1
1
using System . Collections . Generic ;
2
2
using System . ComponentModel . Composition ;
3
- using System . IO ;
4
3
using System . Threading . Tasks ;
4
+ using GitHub . InlineReviews . Services ;
5
5
using GitHub . Services ;
6
6
using GitHub . VisualStudio ;
7
7
using Microsoft . Internal . VisualStudio . PlatformUI ;
@@ -20,46 +20,34 @@ public static class PullRequestFilterPackageGuids
20
20
public class PullRequestFilterProvider : HierarchyTreeFilterProvider
21
21
{
22
22
private readonly IVsHierarchyItemCollectionProvider hierarchyCollectionProvider ;
23
- private readonly IGitHubServiceProvider githubServiceProvider ;
23
+ readonly IGitHubServiceProvider githubServiceProvider ;
24
+ readonly IPullRequestFilterService pullRequestFilterService ;
24
25
25
26
[ ImportingConstructor ]
26
- public PullRequestFilterProvider ( IVsHierarchyItemCollectionProvider hierarchyCollectionProvider , IGitHubServiceProvider githubServiceProvider )
27
+ public PullRequestFilterProvider ( IVsHierarchyItemCollectionProvider hierarchyCollectionProvider , IGitHubServiceProvider githubServiceProvider , IPullRequestFilterService pullRequestFilterService )
27
28
{
28
29
this . hierarchyCollectionProvider = hierarchyCollectionProvider ;
29
30
this . githubServiceProvider = githubServiceProvider ;
31
+ this . pullRequestFilterService = pullRequestFilterService ;
30
32
}
31
33
32
34
protected override HierarchyTreeFilter CreateFilter ( )
33
35
{
34
- return new PullRequestFilter ( hierarchyCollectionProvider , githubServiceProvider ) ;
36
+ return new PullRequestFilter ( hierarchyCollectionProvider , githubServiceProvider , pullRequestFilterService ) ;
35
37
}
36
38
37
39
private sealed class PullRequestFilter : HierarchyTreeFilter
38
40
{
39
41
private readonly IVsHierarchyItemCollectionProvider hierarchyCollectionProvider ;
40
- private readonly IGitHubServiceProvider githubServiceProvider ;
41
- private IPullRequestSessionManager sessionManager ;
42
+ readonly IGitHubServiceProvider githubServiceProvider ;
43
+ readonly IPullRequestFilterService pullRequestFilterService ;
42
44
private HashSet < string > pullRequestSessionFiles ;
43
45
44
- public PullRequestFilter ( IVsHierarchyItemCollectionProvider hierarchyCollectionProvider , IGitHubServiceProvider githubServiceProvider )
46
+ public PullRequestFilter ( IVsHierarchyItemCollectionProvider hierarchyCollectionProvider , IGitHubServiceProvider githubServiceProvider , IPullRequestFilterService pullRequestFilterService )
45
47
{
46
48
this . hierarchyCollectionProvider = hierarchyCollectionProvider ;
47
49
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 ;
63
51
}
64
52
65
53
// Gets the items to be included from this filter provider.
@@ -75,25 +63,12 @@ protected override async Task<IReadOnlyObservableSet> GetIncludedItemsAsync(IEnu
75
63
string _ ;
76
64
vsSolution . GetSolutionInfo ( out solutionDirectory , out _ , out _ ) ;
77
65
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 ) ;
87
67
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 ) ;
97
72
}
98
73
}
99
74
}
0 commit comments