mirror of
https://github.com/microsoft/vscode.git
synced 2026-08-26 19:36:52 +01:00
Add DisposableMap helper (#163006)
Adds `DisposableMap` to help manage the lifecycle of maps of disposable values. This is useful for a few reasons: - `DisposableMap` is itself disposable, so you can use it with `_register` or add it to a `DisposableStore` - The implementation of `set` on `DisposableMap` prevents leaking values on override - The `delete` implementation also makes sure it disposes of the deleted values
This commit is contained in:
@@ -8,7 +8,7 @@ import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { createStringDataTransferItem, VSDataTransfer } from 'vs/base/common/dataTransfer';
|
||||
import { CancellationError } from 'vs/base/common/errors';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { combinedDisposable, Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
|
||||
import { combinedDisposable, Disposable, DisposableMap, toDisposable } from 'vs/base/common/lifecycle';
|
||||
import { revive } from 'vs/base/common/marshalling';
|
||||
import { mixin } from 'vs/base/common/objects';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
@@ -38,7 +38,7 @@ import { ExtHostContext, ExtHostLanguageFeaturesShape, ICallHierarchyItemDto, IC
|
||||
export class MainThreadLanguageFeatures extends Disposable implements MainThreadLanguageFeaturesShape {
|
||||
|
||||
private readonly _proxy: ExtHostLanguageFeaturesShape;
|
||||
private readonly _registrations = new Map<number, IDisposable>();
|
||||
private readonly _registrations = this._register(new DisposableMap<number>());
|
||||
|
||||
constructor(
|
||||
extHostContext: IExtHostContext,
|
||||
@@ -80,21 +80,8 @@ export class MainThreadLanguageFeatures extends Disposable implements MainThread
|
||||
}
|
||||
}
|
||||
|
||||
override dispose(): void {
|
||||
for (const registration of this._registrations.values()) {
|
||||
registration.dispose();
|
||||
}
|
||||
this._registrations.clear();
|
||||
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
$unregister(handle: number): void {
|
||||
const registration = this._registrations.get(handle);
|
||||
if (registration) {
|
||||
registration.dispose();
|
||||
this._registrations.delete(handle);
|
||||
}
|
||||
this._registrations.deleteAndDispose(handle);
|
||||
}
|
||||
|
||||
//#region --- revive functions
|
||||
|
||||
Reference in New Issue
Block a user