提交 93b38d72 编写于 作者: J Johannes Rieken

cache and re-use editor input object, #96402

上级 0d9a8737
......@@ -87,7 +87,7 @@ Registry.as<IEditorInputFactoryRegistry>(EditorInputExtensions.EditorInputFactor
if (!data || !URI.isUri(resource) || typeof name !== 'string' || typeof viewType !== 'string') {
return undefined;
}
return instantiationService.createInstance(NotebookEditorInput, resource, name, viewType);
return NotebookEditorInput.getOrCreate(instantiationService, resource, name, viewType);
}
}
);
......@@ -190,7 +190,7 @@ export class NotebookContribution implements IWorkbenchContribution {
const info = id === undefined ? infos[0] : (infos.find(info => info.id === id) || infos[0]);
// cell-uri -> open (container) notebook
const name = basename(data.notebook);
const input = this.instantiationService.createInstance(NotebookEditorInput, data.notebook, name, info.id);
const input = NotebookEditorInput.getOrCreate(this.instantiationService, data.notebook, name, info.id);
this._resourceMapping.set(resource, input);
return { override: this.editorService.openEditor(input, new NotebookEditorOptions({ ...options, forceReload: true, cellOptions: { resource, options } }), group) };
}
......@@ -203,7 +203,7 @@ export class NotebookContribution implements IWorkbenchContribution {
return undefined;
}
const input = this.instantiationService.createInstance(NotebookEditorInput, resource, originalInput.getName(), info.id);
const input = NotebookEditorInput.getOrCreate(this.instantiationService, resource, originalInput.getName(), info.id);
this._resourceMapping.set(resource, input);
return { override: this.editorService.openEditor(input, options, group) };
......
......@@ -12,6 +12,7 @@ import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/no
import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
import { isEqual } from 'vs/base/common/resources';
import { IWorkingCopyService, IWorkingCopy, WorkingCopyCapabilities, IWorkingCopyBackup } from 'vs/workbench/services/workingCopy/common/workingCopyService';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
export class NotebookEditorModel extends EditorModel {
private _dirty = false;
......@@ -91,6 +92,25 @@ export class NotebookEditorModel extends EditorModel {
}
export class NotebookEditorInput extends EditorInput {
private static readonly _instances = new Map<string, NotebookEditorInput>();
static getOrCreate(instantiationService: IInstantiationService, resource: URI, name: string, viewType: string | undefined) {
const key = name + viewType;
let input = NotebookEditorInput._instances.get(key);
if (!input) {
input = instantiationService.createInstance(class extends NotebookEditorInput {
dispose() {
NotebookEditorInput._instances.delete(key);
super.dispose();
}
}, resource, name, viewType);
NotebookEditorInput._instances.set(key, input);
}
return input;
}
static readonly ID: string = 'workbench.input.notebook';
private promise: Promise<NotebookEditorModel> | null = null;
private textModel: NotebookEditorModel | null = null;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册