diff --git a/src/vs/workbench/contrib/snippets/browser/snippetsService.ts b/src/vs/workbench/contrib/snippets/browser/snippetsService.ts index 9f93d41b480c6e5555c65562128260607488c6dc..32e0cbbe86246d1775b83602d9b002a9cf7aa84e 100644 --- a/src/vs/workbench/contrib/snippets/browser/snippetsService.ts +++ b/src/vs/workbench/contrib/snippets/browser/snippetsService.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import { combinedDisposable, dispose, IDisposable, DisposableStore } from 'vs/base/common/lifecycle'; +import { combinedDisposable, IDisposable, DisposableStore } from 'vs/base/common/lifecycle'; import { values } from 'vs/base/common/map'; import * as resources from 'vs/base/common/resources'; import { endsWith, isFalsyOrWhitespace } from 'vs/base/common/strings'; @@ -129,7 +129,7 @@ class SnippetsService implements ISnippetsService { readonly _serviceBrand: any; - private readonly _disposables: IDisposable[] = []; + private readonly _disposables = new DisposableStore(); private readonly _pendingWork: Promise[] = []; private readonly _files = new Map(); @@ -151,7 +151,7 @@ class SnippetsService implements ISnippetsService { } dispose(): void { - dispose(this._disposables); + this._disposables.dispose(); } private _joinSnippets(): Promise { @@ -256,20 +256,18 @@ class SnippetsService implements ISnippetsService { private _initWorkspaceSnippets(): void { // workspace stuff - let disposables: IDisposable[] = []; + let disposables = new DisposableStore(); let updateWorkspaceSnippets = () => { - disposables = dispose(disposables); + disposables.clear(); this._pendingWork.push(this._initWorkspaceFolderSnippets(this._contextService.getWorkspace(), disposables)); }; - this._disposables.push({ - dispose() { dispose(disposables); } - }); - this._disposables.push(this._contextService.onDidChangeWorkspaceFolders(updateWorkspaceSnippets)); - this._disposables.push(this._contextService.onDidChangeWorkbenchState(updateWorkspaceSnippets)); + this._disposables.add(disposables); + this._disposables.add(this._contextService.onDidChangeWorkspaceFolders(updateWorkspaceSnippets)); + this._disposables.add(this._contextService.onDidChangeWorkbenchState(updateWorkspaceSnippets)); updateWorkspaceSnippets(); } - private _initWorkspaceFolderSnippets(workspace: IWorkspace, bucket: IDisposable[]): Promise { + private _initWorkspaceFolderSnippets(workspace: IWorkspace, bucket: DisposableStore): Promise { let promises = workspace.folders.map(folder => { const snippetFolder = folder.toResource('.vscode'); return this._fileService.exists(snippetFolder).then(value => { @@ -277,7 +275,7 @@ class SnippetsService implements ISnippetsService { this._initFolderSnippets(SnippetSource.Workspace, snippetFolder, bucket); } else { // watch - bucket.push(this._fileService.onFileChanges(e => { + bucket.add(this._fileService.onFileChanges(e => { if (e.contains(snippetFolder, FileChangeType.ADDED)) { this._initFolderSnippets(SnippetSource.Workspace, snippetFolder, bucket); } @@ -293,7 +291,7 @@ class SnippetsService implements ISnippetsService { return this._fileService.createFolder(userSnippetsFolder).then(() => this._initFolderSnippets(SnippetSource.User, userSnippetsFolder, this._disposables)); } - private _initFolderSnippets(source: SnippetSource, folder: URI, bucket: IDisposable[]): Promise { + private _initFolderSnippets(source: SnippetSource, folder: URI, bucket: DisposableStore): Promise { const disposables = new DisposableStore(); const addFolderSnippets = (type?: FileChangeType) => { disposables.clear(); @@ -310,8 +308,8 @@ class SnippetsService implements ISnippetsService { }); }; - bucket.push(watch(this._fileService, folder, addFolderSnippets)); - bucket.push(disposables); + bucket.add(watch(this._fileService, folder, addFolderSnippets)); + bucket.add(disposables); return addFolderSnippets(); }