66import AbstractSupport from './abstractProvider' ;
77import * as protocol from '../omnisharp/protocol' ;
88import * as serverUtils from '../omnisharp/utils' ;
9- import { createRequest , toLocation } from '../omnisharp/typeConversion' ;
9+ import { createRequest , toLocation , toLocationFromUri } from '../omnisharp/typeConversion' ;
1010import { ReferenceProvider , Location , TextDocument , CancellationToken , Position } from 'vscode' ;
11+ import { OmniSharpServer } from '../omnisharp/server' ;
12+ import { LanguageMiddlewareFeature } from '../omnisharp/LanguageMiddlewareFeature' ;
13+ import SourceGeneratedDocumentProvider from './sourceGeneratedDocumentProvider' ;
1114
1215export default class OmnisharpReferenceProvider extends AbstractSupport implements ReferenceProvider {
1316
17+ public constructor ( server : OmniSharpServer , languageMiddlewareFeature : LanguageMiddlewareFeature , private generatedDocumentProvider : SourceGeneratedDocumentProvider ) {
18+ super ( server , languageMiddlewareFeature ) ;
19+ }
20+
1421 public async provideReferences ( document : TextDocument , position : Position , options : { includeDeclaration : boolean ; } , token : CancellationToken ) : Promise < Location [ ] > {
1522
1623 let req = createRequest < protocol . FindUsagesRequest > ( document , position ) ;
@@ -20,8 +27,8 @@ export default class OmnisharpReferenceProvider extends AbstractSupport implemen
2027 try {
2128 let res = await serverUtils . findUsages ( this . _server , req , token ) ;
2229 if ( res && Array . isArray ( res . QuickFixes ) ) {
23- const references = res . QuickFixes . map ( toLocation ) ;
24-
30+ const references = res . QuickFixes . map ( l => this . mapToLocationWithGeneratedInfoPopulation ( l ) ) ;
31+
2532 // Allow language middlewares to re-map its edits if necessary.
2633 const result = await this . _languageMiddlewareFeature . remap ( "remapLocations" , references , token ) ;
2734 return result ;
@@ -31,4 +38,13 @@ export default class OmnisharpReferenceProvider extends AbstractSupport implemen
3138 return [ ] ;
3239 }
3340 }
41+
42+ private mapToLocationWithGeneratedInfoPopulation ( symbolLocation : protocol . SymbolLocation ) : Location {
43+ if ( symbolLocation . GeneratedFileInfo ) {
44+ const uri = this . generatedDocumentProvider . addSourceGeneratedFileWithoutInitialContent ( symbolLocation . GeneratedFileInfo , symbolLocation . FileName ) ;
45+ return toLocationFromUri ( uri , symbolLocation ) ;
46+ }
47+
48+ return toLocation ( symbolLocation ) ;
49+ }
3450}
0 commit comments