ILanguageSelection should not be IDisposable (#119968)

This commit is contained in:
Alex Dima 2021-04-01 18:02:39 +02:00
parent abff1971b9
commit 4cd94d0299
No known key found for this signature in database
GPG Key ID: 6E58D7B045760DA0
5 changed files with 16 additions and 15 deletions

View File

@ -4,7 +4,6 @@
*--------------------------------------------------------------------------------------------*/
import { Event } from 'vs/base/common/event';
import { IDisposable } from 'vs/base/common/lifecycle';
import { URI } from 'vs/base/common/uri';
import { IMode, LanguageId, LanguageIdentifier } from 'vs/editor/common/modes';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
@ -22,7 +21,7 @@ export interface ILanguageExtensionPoint {
configuration?: URI;
}
export interface ILanguageSelection extends IDisposable {
export interface ILanguageSelection {
readonly languageIdentifier: LanguageIdentifier;
readonly onDidChange: Event<LanguageIdentifier>;
}

View File

@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { Emitter, Event } from 'vs/base/common/event';
import { Disposable } from 'vs/base/common/lifecycle';
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
import { URI } from 'vs/base/common/uri';
import { IMode, LanguageId, LanguageIdentifier } from 'vs/editor/common/modes';
import { FrankensteinMode } from 'vs/editor/common/modes/abstractMode';
@ -13,20 +13,28 @@ import { LanguagesRegistry } from 'vs/editor/common/services/languagesRegistry';
import { ILanguageSelection, IModeService } from 'vs/editor/common/services/modeService';
import { firstOrDefault } from 'vs/base/common/arrays';
class LanguageSelection extends Disposable implements ILanguageSelection {
class LanguageSelection implements ILanguageSelection {
public languageIdentifier: LanguageIdentifier;
private readonly _selector: () => LanguageIdentifier;
private readonly _onDidChange: Emitter<LanguageIdentifier> = this._register(new Emitter<LanguageIdentifier>());
public readonly onDidChange: Event<LanguageIdentifier> = this._onDidChange.event;
private readonly _onDidChange: Emitter<LanguageIdentifier>;
public readonly onDidChange: Event<LanguageIdentifier>;
constructor(onLanguagesMaybeChanged: Event<void>, selector: () => LanguageIdentifier) {
super();
this._selector = selector;
this.languageIdentifier = this._selector();
this._register(onLanguagesMaybeChanged(() => this._evaluate()));
let listener: IDisposable;
this._onDidChange = new Emitter<LanguageIdentifier>({
onFirstListenerAdd: () => {
listener = onLanguagesMaybeChanged(() => this._evaluate());
},
onLastListenerRemove: () => {
listener.dispose();
}
});
this.onDidChange = this._onDidChange.event;
}
private _evaluate(): void {

View File

@ -78,10 +78,6 @@ class ModelData implements IDisposable {
this._languageSelectionListener.dispose();
this._languageSelectionListener = null;
}
if (this._languageSelection) {
this._languageSelection.dispose();
this._languageSelection = null;
}
}
public dispose(): void {

View File

@ -28,5 +28,4 @@ export class MockMode extends Disposable implements IMode {
export class StaticLanguageSelector implements ILanguageSelection {
readonly onDidChange: Event<LanguageIdentifier> = Event.None;
constructor(public readonly languageIdentifier: LanguageIdentifier) { }
public dispose(): void { }
}

View File

@ -104,7 +104,6 @@ class PerfModelContentProvider implements ITextModelContentProvider {
this._model.setMode(e);
}
}));
this._modelDisposables.push(langId);
this._modelDisposables.push(this._extensionService.onDidChangeExtensionsStatus(this._updateModel, this));
writeTransientState(this._model, { wordWrapOverride: 'off' }, this._editorService);