Have MainThreadDocumentsAndEditors follow the lifecycle of the extension host

This commit is contained in:
Alex Dima
2017-08-16 11:17:57 +02:00
parent f646343204
commit c956a19fab
7 changed files with 90 additions and 32 deletions

View File

@@ -11,12 +11,20 @@ import { delta } from 'vs/base/common/arrays';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { ICodeEditorService } from 'vs/editor/common/services/codeEditorService';
import Event, { Emitter } from 'vs/base/common/event';
import { ExtHostContext, ExtHostDocumentsAndEditorsShape, IModelAddedData, ITextEditorAddData, IDocumentsAndEditorsDelta } from '../node/extHost.protocol';
import { ExtHostContext, ExtHostDocumentsAndEditorsShape, IModelAddedData, ITextEditorAddData, IDocumentsAndEditorsDelta, IExtHostContext, MainContext } from '../node/extHost.protocol';
import { MainThreadTextEditor } from './mainThreadEditor';
import { IThreadService } from 'vs/workbench/services/thread/common/threadService';
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
import { Position as EditorPosition, IEditor } from 'vs/platform/editor/common/editor';
import { extHostCustomer } from "vs/workbench/api/electron-browser/extHostCustomers";
import { MainThreadDocuments } from "vs/workbench/api/electron-browser/mainThreadDocuments";
import { MainThreadEditors } from "vs/workbench/api/electron-browser/mainThreadEditors";
import { IModeService } from "vs/editor/common/services/modeService";
import { IFileService } from "vs/platform/files/common/files";
import { ITextModelService } from "vs/editor/common/services/resolverService";
import { IUntitledEditorService } from "vs/workbench/services/untitled/common/untitledEditorService";
import { IEditorGroupService } from "vs/workbench/services/group/common/groupService";
import { ITelemetryService } from "vs/platform/telemetry/common/telemetry";
namespace cmp {
export function compareModels(a: IModel, b: IModel): number {
@@ -205,6 +213,7 @@ class MainThreadDocumentAndEditorStateComputer {
}
}
@extHostCustomer
export class MainThreadDocumentsAndEditors {
private _toDispose: IDisposable[];
@@ -223,17 +232,36 @@ export class MainThreadDocumentsAndEditors {
readonly onDocumentRemove: Event<string[]> = this._onDocumentRemove.event;
constructor(
extHostContext: IExtHostContext,
@IModelService private _modelService: IModelService,
@ITextFileService private _textFileService: ITextFileService,
@IWorkbenchEditorService private _workbenchEditorService: IWorkbenchEditorService,
@IThreadService threadService: IThreadService,
@ICodeEditorService codeEditorService: ICodeEditorService,
@IModeService modeService: IModeService,
@IFileService fileService: IFileService,
@ITextModelService textModelResolverService: ITextModelService,
@IUntitledEditorService untitledEditorService: IUntitledEditorService,
@IEditorGroupService editorGroupService: IEditorGroupService,
@ITelemetryService telemetryService: ITelemetryService
) {
this._proxy = threadService.get(ExtHostContext.ExtHostDocumentsAndEditors);
this._proxy = extHostContext.get(ExtHostContext.ExtHostDocumentsAndEditors);
this._stateComputer = new MainThreadDocumentAndEditorStateComputer(_modelService, codeEditorService, _workbenchEditorService);
const mainThreadDocuments = new MainThreadDocuments(this, extHostContext, this._modelService, modeService, this._textFileService, fileService, textModelResolverService, untitledEditorService);
extHostContext.set(MainContext.MainThreadDocuments, mainThreadDocuments);
const mainThreadEditors = new MainThreadEditors(this, extHostContext, codeEditorService, this._workbenchEditorService, editorGroupService, telemetryService);
extHostContext.set(MainContext.MainThreadEditors, mainThreadEditors);
this._toDispose = [
mainThreadDocuments,
mainThreadEditors,
this._stateComputer,
this._stateComputer.onDidChangeState(this._onDelta, this)
this._stateComputer.onDidChangeState(this._onDelta, this),
this._onTextEditorAdd,
this._onTextEditorRemove,
this._onDocumentAdd,
this._onDocumentRemove,
];
}