Skip to content

Commit 2d6f48e

Browse files
authored
Adopt thenRegisterOrDispose helper (microsoft#261287)
Adopt thenRegisterOrDispose helper Fixes microsoft#261211
1 parent 72a28df commit 2d6f48e

4 files changed

Lines changed: 13 additions & 27 deletions

File tree

src/vs/base/common/lifecycle.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -824,12 +824,13 @@ export function thenIfNotDisposed<T>(promise: Promise<T>, then: (result: T) => v
824824
* disposable or register it to the {@link DisposableStore}, depending on whether the store is
825825
* disposed or not.
826826
*/
827-
export function thenRegisterOrDispose<T extends IDisposable>(promise: Promise<T>, store: DisposableStore): void {
828-
promise.then(ref => {
827+
export function thenRegisterOrDispose<T extends IDisposable>(promise: Promise<T>, store: DisposableStore): Promise<T> {
828+
return promise.then(disposable => {
829829
if (store.isDisposed) {
830-
ref.dispose();
830+
disposable.dispose();
831831
} else {
832-
store.add(ref);
832+
store.add(disposable);
833833
}
834+
return disposable;
834835
});
835836
}

src/vs/platform/files/node/watcher/nodejs/nodejsWatcherLib.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { watch, promises } from 'fs';
77
import { RunOnceWorker, ThrottledWorker } from '../../../../../base/common/async.js';
88
import { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js';
99
import { isEqual, isEqualOrParent } from '../../../../../base/common/extpath.js';
10-
import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../../../base/common/lifecycle.js';
10+
import { Disposable, DisposableStore, IDisposable, thenRegisterOrDispose, toDisposable } from '../../../../../base/common/lifecycle.js';
1111
import { normalizeNFC } from '../../../../../base/common/normalization.js';
1212
import { basename, dirname, join } from '../../../../../base/common/path.js';
1313
import { isLinux, isMacintosh } from '../../../../../base/common/platform.js';
@@ -160,12 +160,7 @@ export class NodeJSFileWatcherLibrary extends Disposable {
160160
}
161161

162162
if (error) {
163-
const watchDisposable = await this.doWatch(isDirectory);
164-
if (!disposables.isDisposed) {
165-
disposables.add(watchDisposable);
166-
} else {
167-
watchDisposable.dispose();
168-
}
163+
await thenRegisterOrDispose(this.doWatch(isDirectory), disposables);
169164
} else if (change) {
170165
if (typeof change.cId === 'number' || typeof this.request.correlationId === 'number') {
171166
// Re-emit this change with the correlation id of the request

src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import { streamToBuffer } from '../../../../../base/common/buffer.js';
77
import { CancellationToken } from '../../../../../base/common/cancellation.js';
88
import { StringSHA1 } from '../../../../../base/common/hash.js';
9-
import { DisposableStore, IReference } from '../../../../../base/common/lifecycle.js';
9+
import { DisposableStore, IReference, thenRegisterOrDispose } from '../../../../../base/common/lifecycle.js';
1010
import { ResourceMap, ResourceSet } from '../../../../../base/common/map.js';
1111
import { Schemas } from '../../../../../base/common/network.js';
1212
import { ITransaction, IObservable, observableValue, autorun, transaction, ObservablePromise } from '../../../../../base/common/observable.js';
@@ -974,12 +974,7 @@ export class ChatEditingModifiedNotebookEntry extends AbstractChatEditingModifie
974974
this.cellTextModelMap.set(cell.uri, model);
975975
return model;
976976
} else {
977-
const textEditorModel = await this.textModelService.createModelReference(cell.uri);
978-
if (this._store.isDisposed) {
979-
textEditorModel.dispose();
980-
} else {
981-
this._register(textEditorModel);
982-
}
977+
const textEditorModel = await thenRegisterOrDispose(this.textModelService.createModelReference(cell.uri), this._store);
983978
const model = textEditorModel.object.textEditorModel;
984979
this.cellTextModelMap.set(cell.uri, model);
985980
return model;

src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTimeline.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import { equals as arraysEqual, binarySearch2 } from '../../../../../base/common/arrays.js';
99
import { findLast } from '../../../../../base/common/arraysFind.js';
1010
import { Iterable } from '../../../../../base/common/iterator.js';
11-
import { DisposableStore } from '../../../../../base/common/lifecycle.js';
11+
import { DisposableStore, thenRegisterOrDispose } from '../../../../../base/common/lifecycle.js';
1212
import { ResourceMap } from '../../../../../base/common/map.js';
1313
import { equals as objectsEqual } from '../../../../../base/common/objects.js';
1414
import { derived, derivedOpts, IObservable, ITransaction, ObservablePromise, observableValue, transaction } from '../../../../../base/common/observable.js';
@@ -416,14 +416,9 @@ export class ChatEditingTimeline {
416416
}
417417
const store = new DisposableStore();
418418
reader.store.add(store);
419-
const referencesPromise = Promise.all([firstSnapshotUri, lastSnapshotUri].map(u => this._textModelService.createModelReference(u))).then(refs => {
420-
if (store.isDisposed) {
421-
refs.forEach(ref => ref.dispose());
422-
} else {
423-
refs.forEach(ref => store.add(ref));
424-
}
425-
return refs;
426-
});
419+
const referencesPromise = Promise.all([firstSnapshotUri, lastSnapshotUri].map(u => {
420+
return thenRegisterOrDispose(this._textModelService.createModelReference(u), store);
421+
}));
427422
return new ObservablePromise(referencesPromise);
428423
});
429424
const diff = derived((reader): ObservablePromise<IEditSessionEntryDiff> | undefined => {

0 commit comments

Comments
 (0)