11
11
using Microsoft . CodeAnalysis . Options ;
12
12
using Microsoft . CodeAnalysis . PooledObjects ;
13
13
using Microsoft . CodeAnalysis . Shared . Extensions ;
14
+ using Microsoft . CodeAnalysis . Text ;
14
15
using LSP = Roslyn . LanguageServer . Protocol ;
15
16
16
17
namespace Microsoft . CodeAnalysis . LanguageServer . Handler
@@ -33,26 +34,32 @@ public FindImplementationsHandler(IGlobalOptionService globalOptions)
33
34
34
35
public LSP . TextDocumentIdentifier GetTextDocumentIdentifier ( LSP . TextDocumentPositionParams request ) => request . TextDocument ;
35
36
36
- public async Task < LSP . Location [ ] > HandleRequestAsync ( LSP . TextDocumentPositionParams request , RequestContext context , CancellationToken cancellationToken )
37
+ public Task < LSP . Location [ ] > HandleRequestAsync ( LSP . TextDocumentPositionParams request , RequestContext context , CancellationToken cancellationToken )
37
38
{
38
39
var document = context . GetRequiredDocument ( ) ;
39
- var clientCapabilities = context . GetRequiredClientCapabilities ( ) ;
40
+ var supportsVisualStudioExtensions = context . GetRequiredClientCapabilities ( ) . HasVisualStudioLspCapability ( ) ;
41
+ var linePosition = ProtocolConversions . PositionToLinePosition ( request . Position ) ;
42
+ var classificationOptions = _globalOptions . GetClassificationOptionsProvider ( ) ;
43
+
44
+ return FindImplementationsAsync ( document , linePosition , classificationOptions , supportsVisualStudioExtensions , cancellationToken ) ;
45
+ }
40
46
47
+ internal static async Task < LSP . Location [ ] > FindImplementationsAsync ( Document document , LinePosition linePosition , OptionsProvider < ClassificationOptions > classificationOptions , bool supportsVisualStudioExtensions , CancellationToken cancellationToken )
48
+ {
41
49
var locations = ArrayBuilder < LSP . Location > . GetInstance ( ) ;
42
50
43
51
var findUsagesService = document . GetRequiredLanguageService < IFindUsagesLSPService > ( ) ;
44
- var position = await document . GetPositionFromLinePositionAsync ( ProtocolConversions . PositionToLinePosition ( request . Position ) , cancellationToken ) . ConfigureAwait ( false ) ;
52
+ var position = await document . GetPositionFromLinePositionAsync ( linePosition , cancellationToken ) . ConfigureAwait ( false ) ;
45
53
46
54
var findUsagesContext = new SimpleFindUsagesContext ( ) ;
47
- var classificationOptions = _globalOptions . GetClassificationOptionsProvider ( ) ;
48
55
await findUsagesService . FindImplementationsAsync ( findUsagesContext , document , position , classificationOptions , cancellationToken ) . ConfigureAwait ( false ) ;
49
56
50
57
foreach ( var definition in findUsagesContext . GetDefinitions ( ) )
51
58
{
52
59
var text = definition . GetClassifiedText ( ) ;
53
60
foreach ( var sourceSpan in definition . SourceSpans )
54
61
{
55
- if ( clientCapabilities . HasVisualStudioLspCapability ( ) == true )
62
+ if ( supportsVisualStudioExtensions )
56
63
{
57
64
locations . AddIfNotNull ( await ProtocolConversions . DocumentSpanToLocationWithTextAsync ( sourceSpan , text , cancellationToken ) . ConfigureAwait ( false ) ) ;
58
65
}
0 commit comments