@@ -71,7 +71,7 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
7171 this . extensionsManager = this . _register ( instantiationService . createInstance ( ExtensionsManager ) ) ;
7272 this . extensionsManager . whenInitialized ( ) . then ( ( ) => {
7373 if ( ! isDisposed ) {
74- this . _register ( this . extensionsManager . onDidChangeExtensions ( ( { added, removed } ) => this . _onDidChangeExtensions ( added , removed ) ) ) ;
74+ this . _register ( this . extensionsManager . onDidChangeExtensions ( ( { added, removed, isProfileSwitch } ) => this . _onDidChangeExtensions ( added , removed , isProfileSwitch ) ) ) ;
7575 uninstallDisposable . dispose ( ) ;
7676 }
7777 } ) ;
@@ -618,12 +618,14 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
618618 }
619619 }
620620
621- private _onDidChangeExtensions ( added : ReadonlyArray < IExtension > , removed : ReadonlyArray < IExtension > ) : void {
621+ private _onDidChangeExtensions ( added : ReadonlyArray < IExtension > , removed : ReadonlyArray < IExtension > , isProfileSwitch : boolean ) : void {
622622 const disabledExtensions = added . filter ( e => ! this . isEnabledEnablementState ( this . getEnablementState ( e ) ) ) ;
623623 if ( disabledExtensions . length ) {
624624 this . _onEnablementChanged . fire ( disabledExtensions ) ;
625625 }
626- removed . forEach ( ( { identifier } ) => this . _reset ( identifier ) ) ;
626+ if ( ! isProfileSwitch ) {
627+ removed . forEach ( ( { identifier } ) => this . _reset ( identifier ) ) ;
628+ }
627629 }
628630
629631 public async updateExtensionsEnablementsWhenWorkspaceTrustChanges ( ) : Promise < void > {
@@ -660,7 +662,7 @@ class ExtensionsManager extends Disposable {
660662 private _extensions : IExtension [ ] = [ ] ;
661663 get extensions ( ) : readonly IExtension [ ] { return this . _extensions ; }
662664
663- private _onDidChangeExtensions = this . _register ( new Emitter < { added : readonly IExtension [ ] ; removed : readonly IExtension [ ] } > ( ) ) ;
665+ private _onDidChangeExtensions = this . _register ( new Emitter < { added : readonly IExtension [ ] ; removed : readonly IExtension [ ] ; readonly isProfileSwitch : boolean } > ( ) ) ;
664666 readonly onDidChangeExtensions = this . _onDidChangeExtensions . event ;
665667
666668 private readonly initializePromise ;
@@ -686,32 +688,33 @@ class ExtensionsManager extends Disposable {
686688 if ( this . disposed ) {
687689 return ;
688690 }
689- this . _onDidChangeExtensions . fire ( { added : this . extensions , removed : [ ] } ) ;
691+ this . _onDidChangeExtensions . fire ( { added : this . extensions , removed : [ ] , isProfileSwitch : false } ) ;
690692 } catch ( error ) {
691693 this . logService . error ( error ) ;
692694 }
693- this . _register ( this . extensionManagementService . onDidInstallExtensions ( e => this . onDidInstallExtensions ( e . reduce < IExtension [ ] > ( ( result , { local, operation } ) => { if ( local && operation !== InstallOperation . Migrate ) { result . push ( local ) ; } return result ; } , [ ] ) ) ) ) ;
694- this . _register ( Event . filter ( this . extensionManagementService . onDidUninstallExtension , ( e => ! e . error ) ) ( e => this . onDidUninstallExtensions ( [ e . identifier ] , e . server ) ) ) ;
695- this . _register ( this . extensionManagementService . onDidChangeProfile ( ( { added, removed, server } ) => { this . onDidInstallExtensions ( added ) ; this . onDidUninstallExtensions ( removed . map ( ( { identifier } ) => identifier ) , server ) ; } ) ) ;
695+ this . _register ( this . extensionManagementService . onDidInstallExtensions ( e =>
696+ this . updateExtensions ( e . reduce < IExtension [ ] > ( ( result , { local, operation } ) => {
697+ if ( local && operation !== InstallOperation . Migrate ) { result . push ( local ) ; } return result ;
698+ } , [ ] ) , [ ] , undefined , false ) ) ) ;
699+ this . _register ( Event . filter ( this . extensionManagementService . onDidUninstallExtension , ( e => ! e . error ) ) ( e => this . updateExtensions ( [ ] , [ e . identifier ] , e . server , false ) ) ) ;
700+ this . _register ( this . extensionManagementService . onDidChangeProfile ( ( { added, removed, server } ) => {
701+ this . updateExtensions ( added , removed . map ( ( { identifier } ) => identifier ) , server , true ) ;
702+ } ) ) ;
696703 }
697704
698- private onDidInstallExtensions ( extensions : IExtension [ ] ) : void {
699- if ( extensions . length ) {
700- this . _extensions . push ( ...extensions ) ;
701- this . _onDidChangeExtensions . fire ( { added : extensions , removed : [ ] } ) ;
705+ private updateExtensions ( added : IExtension [ ] , identifiers : IExtensionIdentifier [ ] , server : IExtensionManagementServer | undefined , isProfileSwitch : boolean ) : void {
706+ if ( added . length ) {
707+ this . _extensions . push ( ...added ) ;
702708 }
703- }
704-
705- private onDidUninstallExtensions ( identifiers : IExtensionIdentifier [ ] , server : IExtensionManagementServer ) : void {
706709 const removed : IExtension [ ] = [ ] ;
707710 for ( const identifier of identifiers ) {
708711 const index = this . _extensions . findIndex ( e => areSameExtensions ( e . identifier , identifier ) && this . extensionManagementServerService . getExtensionManagementServer ( e ) === server ) ;
709712 if ( index !== - 1 ) {
710713 removed . push ( ...this . _extensions . splice ( index , 1 ) ) ;
711714 }
712715 }
713- if ( removed . length ) {
714- this . _onDidChangeExtensions . fire ( { added : [ ] , removed } ) ;
716+ if ( added . length || removed . length ) {
717+ this . _onDidChangeExtensions . fire ( { added, removed, isProfileSwitch } ) ;
715718 }
716719 }
717720}
0 commit comments