@@ -746,35 +746,50 @@ export class DefaultClient implements Client {
746746}
747747referencesRequestPending = true ;
748748this . client . references . setResultsCallback ( ( referencesResult :refs . ReferencesResult , doResolve :boolean ) => {
749- referencesRequestPending = false ;
750- -- renameRequestsPending ;
751- let workspaceEdit :vscode . WorkspaceEdit = new vscode . WorkspaceEdit ( ) ;
752- let cancelling :boolean = referencesPendingCancellations . length > 0 ;
753- if ( cancelling ) {
754- while ( referencesPendingCancellations . length > 1 ) {
749+ if ( doResolve && referencesResult === null ) {
750+ // The result callback will be called with doResult of true and a null result when the Find All References
751+ // portion of the rename is complete. We complete the promise with an empty edit at this point,
752+ // to cause the progress indicator to be dismissed.
753+ let workspaceEdit :vscode . WorkspaceEdit = new vscode . WorkspaceEdit ( ) ;
754+ resolve ( workspaceEdit ) ;
755+ } else {
756+ referencesRequestPending = false ;
757+ -- renameRequestsPending ;
758+ let workspaceEdit :vscode . WorkspaceEdit = new vscode . WorkspaceEdit ( ) ;
759+ let cancelling :boolean = referencesPendingCancellations . length > 0 ;
760+ if ( cancelling ) {
761+ while ( referencesPendingCancellations . length > 1 ) {
762+ let pendingCancel :ReferencesCancellationState = referencesPendingCancellations [ 0 ] ;
763+ referencesPendingCancellations . pop ( ) ;
764+ pendingCancel . reject ( ) ;
765+ }
755766let pendingCancel :ReferencesCancellationState = referencesPendingCancellations [ 0 ] ;
756767referencesPendingCancellations . pop ( ) ;
757- pendingCancel . reject ( ) ;
758- }
759- let pendingCancel :ReferencesCancellationState = referencesPendingCancellations [ 0 ] ;
760- referencesPendingCancellations . pop ( ) ;
761- pendingCancel . callback ( ) ;
762- } else {
763- if ( renameRequestsPending === 0 ) {
764- renamePending = false ;
768+ pendingCancel . callback ( ) ;
769+ } else {
770+ if ( renameRequestsPending === 0 ) {
771+ renamePending = false ;
772+ }
773+ // If rename UI was canceled, we will get a null result.
774+ // If null, return an empty list to avoid Rename failure dialog.
775+ if ( referencesResult !== null ) {
776+ for ( let reference of referencesResult . referenceInfos ) {
777+ let uri :vscode . Uri = vscode . Uri . file ( reference . file ) ;
778+ let range :vscode . Range = new vscode . Range ( reference . position . line , reference . position . character , reference . position . line , reference . position . character + referencesResult . text . length ) ;
779+ workspaceEdit . replace ( uri , range , newName ) ;
780+ }
781+ }
782+ this . client . references . closeRenameUI ( ) ;
765783}
766- // If rename UI was canceled, we will get a null result.
767- // If null, return an empty list to avoid Rename failure dialog.
768- if ( referencesResult !== null ) {
769- for ( let reference of referencesResult . referenceInfos ) {
770- let uri :vscode . Uri = vscode . Uri . file ( reference . file ) ;
771- let range :vscode . Range = new vscode . Range ( reference . position . line , reference . position . character , reference . position . line , reference . position . character + referencesResult . text . length ) ;
772- workspaceEdit . replace ( uri , range , newName ) ;
784+ if ( doResolve ) {
785+ if ( referencesResult . referenceInfos === null || referencesResult . referenceInfos . length === 0 ) {
786+ vscode . window . showErrorMessage ( localize ( "unable.to.locate.selected.symbol" , "A definition for the selected symbol could not be located." ) ) ;
773787}
788+ resolve ( workspaceEdit ) ;
789+ } else if ( workspaceEdit . size > 0 ) {
790+ vscode . workspace . applyEdit ( workspaceEdit ) ;
774791}
775- this . client . references . closeRenameUI ( ) ;
776792}
777- resolve ( workspaceEdit ) ;
778793} ) ;
779794this . client . references . startRename ( params ) ;
780795} ) ;