From a550cd73e5be2119f51b4cb30ab5f413564ca34e Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Thu, 1 Sep 2016 12:51:00 +0200 Subject: [PATCH] Store directly the editor contributions ctors --- src/vs/editor/browser/codeEditor.ts | 4 +-- src/vs/editor/browser/editorBrowser.ts | 16 ++------- .../editor/browser/editorBrowserExtensions.ts | 33 +++++-------------- .../editor/browser/widget/codeEditorWidget.ts | 9 ++--- src/vs/editor/common/editorCommon.ts | 13 +------- .../editor/common/editorCommonExtensions.ts | 24 ++++---------- .../parts/debug/electron-browser/repl.ts | 4 +-- 7 files changed, 26 insertions(+), 77 deletions(-) diff --git a/src/vs/editor/browser/codeEditor.ts b/src/vs/editor/browser/codeEditor.ts index e2b85a4e19b..9374587ae6c 100644 --- a/src/vs/editor/browser/codeEditor.ts +++ b/src/vs/editor/browser/codeEditor.ts @@ -8,7 +8,7 @@ import {IInstantiationService} from 'vs/platform/instantiation/common/instantiat import {ICommandService} from 'vs/platform/commands/common/commands'; import {IContextKeyService} from 'vs/platform/contextkey/common/contextkey'; import {IEditorOptions} from 'vs/editor/common/editorCommon'; -import {IEditorContributionDescriptor} from 'vs/editor/browser/editorBrowser'; +import {IEditorContributionCtor} from 'vs/editor/browser/editorBrowser'; import {ICodeEditorService} from 'vs/editor/common/services/codeEditorService'; import {CodeEditorWidget} from 'vs/editor/browser/widget/codeEditorWidget'; import {EditorAction, CommonEditorRegistry} from 'vs/editor/common/editorCommonExtensions'; @@ -27,7 +27,7 @@ export class CodeEditor extends CodeEditorWidget { super(domElement, options, instantiationService, codeEditorService, commandService, contextKeyService); } - protected _getContributions(): IEditorContributionDescriptor[] { + protected _getContributions(): IEditorContributionCtor[] { return [].concat(EditorBrowserRegistry.getEditorContributions()).concat(CommonEditorRegistry.getEditorContributions()); } diff --git a/src/vs/editor/browser/editorBrowser.ts b/src/vs/editor/browser/editorBrowser.ts index be1811a72f5..00448c5ba4e 100644 --- a/src/vs/editor/browser/editorBrowser.ts +++ b/src/vs/editor/browser/editorBrowser.ts @@ -8,7 +8,7 @@ import {IEventEmitter} from 'vs/base/common/eventEmitter'; import {IDisposable} from 'vs/base/common/lifecycle'; import {IKeyboardEvent} from 'vs/base/browser/keyboardEvent'; import {IMouseEvent} from 'vs/base/browser/mouseEvent'; -import {IInstantiationService, IConstructorSignature1} from 'vs/platform/instantiation/common/instantiation'; +import {IConstructorSignature1} from 'vs/platform/instantiation/common/instantiation'; import * as editorCommon from 'vs/editor/common/editorCommon'; import {Position} from 'vs/editor/common/core/position'; import {Range} from 'vs/editor/common/core/range'; @@ -385,19 +385,7 @@ export interface IEditorMouseEvent { /** * @internal */ -export type ISimpleEditorContributionCtor = IConstructorSignature1; - -/** - * An editor contribution descriptor that will be used to construct editor contributions - * @internal - */ -export interface IEditorContributionDescriptor { - /** - * Create an instance of the contribution - */ - createInstance(instantiationService:IInstantiationService, editor:ICodeEditor): editorCommon.IEditorContribution; -} - +export type IEditorContributionCtor = IConstructorSignature1; /** * An overview ruler diff --git a/src/vs/editor/browser/editorBrowserExtensions.ts b/src/vs/editor/browser/editorBrowserExtensions.ts index 68e4f566adb..0c404362628 100644 --- a/src/vs/editor/browser/editorBrowserExtensions.ts +++ b/src/vs/editor/browser/editorBrowserExtensions.ts @@ -4,37 +4,20 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import {IInstantiationService, IConstructorSignature1} from 'vs/platform/instantiation/common/instantiation'; import {Registry} from 'vs/platform/platform'; -import {IEditorContribution} from 'vs/editor/common/editorCommon'; -import {ICodeEditor, IEditorContributionDescriptor, ISimpleEditorContributionCtor} from 'vs/editor/browser/editorBrowser'; +import {IEditorContributionCtor} from 'vs/editor/browser/editorBrowser'; -export function editorBrowserContribution(ctor:ISimpleEditorContributionCtor): void { +export function editorBrowserContribution(ctor:IEditorContributionCtor): void { EditorContributionRegistry.INSTANCE.registerEditorBrowserContribution(ctor); } export namespace EditorBrowserRegistry { - // --- Editor Contributions - export function getEditorContributions(): IEditorContributionDescriptor[] { + export function getEditorContributions(): IEditorContributionCtor[] { return EditorContributionRegistry.INSTANCE.getEditorBrowserContributions(); } } -class SimpleEditorContributionDescriptor implements IEditorContributionDescriptor { - private _ctor:ISimpleEditorContributionCtor; - - constructor(ctor:ISimpleEditorContributionCtor) { - this._ctor = ctor; - } - - public createInstance(instantiationService:IInstantiationService, editor:ICodeEditor): IEditorContribution { - // cast added to help the compiler, can remove once IConstructorSignature1 has been removed - return instantiationService.createInstance(> this._ctor, editor); - } -} - -// Editor extension points -var Extensions = { +const Extensions = { EditorContributions: 'editor.contributions' }; @@ -42,17 +25,17 @@ class EditorContributionRegistry { public static INSTANCE = new EditorContributionRegistry(); - private editorContributions: IEditorContributionDescriptor[]; + private editorContributions: IEditorContributionCtor[]; constructor() { this.editorContributions = []; } - public registerEditorBrowserContribution(ctor:ISimpleEditorContributionCtor): void { - this.editorContributions.push(new SimpleEditorContributionDescriptor(ctor)); + public registerEditorBrowserContribution(ctor:IEditorContributionCtor): void { + this.editorContributions.push(ctor); } - public getEditorBrowserContributions(): IEditorContributionDescriptor[] { + public getEditorBrowserContributions(): IEditorContributionCtor[] { return this.editorContributions.slice(0); } } diff --git a/src/vs/editor/browser/widget/codeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditorWidget.ts index 4486cef96f7..8adb5ce1c4d 100644 --- a/src/vs/editor/browser/widget/codeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditorWidget.ts @@ -98,10 +98,11 @@ export abstract class CodeEditorWidget extends CommonCodeEditor implements edito this.contentWidgets = {}; this.overlayWidgets = {}; - let contributionDescriptors = this._getContributions(); - for (let i = 0, len = contributionDescriptors.length; i < len; i++) { + let contributions = this._getContributions(); + for (let i = 0, len = contributions.length; i < len; i++) { + let ctor = contributions[i]; try { - let contribution = contributionDescriptors[i].createInstance(this._instantiationService, this); + let contribution = this._instantiationService.createInstance(ctor, this); this._contributions[contribution.getId()] = contribution; } catch (err) { onUnexpectedError(err); @@ -116,7 +117,7 @@ export abstract class CodeEditorWidget extends CommonCodeEditor implements edito this._codeEditorService.addCodeEditor(this); } - protected abstract _getContributions(): editorBrowser.IEditorContributionDescriptor[]; + protected abstract _getContributions(): editorBrowser.IEditorContributionCtor[]; protected abstract _getActions(): EditorAction[]; protected _createConfiguration(options:editorCommon.ICodeEditorWidgetCreationOptions): CommonEditorConfiguration { diff --git a/src/vs/editor/common/editorCommon.ts b/src/vs/editor/common/editorCommon.ts index 8a7059c663a..22f4fdc01e4 100644 --- a/src/vs/editor/common/editorCommon.ts +++ b/src/vs/editor/common/editorCommon.ts @@ -9,7 +9,7 @@ import {MarkedString} from 'vs/base/common/htmlContent'; import * as types from 'vs/base/common/types'; import URI from 'vs/base/common/uri'; import {TPromise} from 'vs/base/common/winjs.base'; -import {ServicesAccessor, IInstantiationService, IConstructorSignature1, IConstructorSignature2} from 'vs/platform/instantiation/common/instantiation'; +import {ServicesAccessor, IConstructorSignature1, IConstructorSignature2} from 'vs/platform/instantiation/common/instantiation'; import {ILineContext, IMode} from 'vs/editor/common/modes'; import {ViewLineToken} from 'vs/editor/common/core/viewLineToken'; import {ScrollbarVisibility} from 'vs/base/common/scrollable'; @@ -3510,17 +3510,6 @@ export type IEditorActionContributionCtor = IConstructorSignature2; -/** - * An editor contribution descriptor that will be used to construct editor contributions - * @internal - */ -export interface ICommonEditorContributionDescriptor { - /** - * Create an instance of the contribution - */ - createInstance(instantiationService:IInstantiationService, editor:ICommonCodeEditor): IEditorContribution; -} - export interface IEditorAction { id: string; label: string; diff --git a/src/vs/editor/common/editorCommonExtensions.ts b/src/vs/editor/common/editorCommonExtensions.ts index 5b7797108de..8a5b6a08688 100644 --- a/src/vs/editor/common/editorCommonExtensions.ts +++ b/src/vs/editor/common/editorCommonExtensions.ts @@ -7,7 +7,7 @@ import {illegalArgument} from 'vs/base/common/errors'; import URI from 'vs/base/common/uri'; import {TPromise} from 'vs/base/common/winjs.base'; -import {ServicesAccessor, IInstantiationService} from 'vs/platform/instantiation/common/instantiation'; +import {ServicesAccessor} from 'vs/platform/instantiation/common/instantiation'; import {CommandsRegistry} from 'vs/platform/commands/common/commands'; import {KeybindingsRegistry} from 'vs/platform/keybinding/common/keybindingsRegistry'; import {Registry} from 'vs/platform/platform'; @@ -112,7 +112,7 @@ export module CommonEditorRegistry { // --- Editor Contributions - export function getEditorContributions(): editorCommon.ICommonEditorContributionDescriptor[] { + export function getEditorContributions(): editorCommon.ICommonEditorContributionCtor[] { return EditorContributionRegistry.INSTANCE.getEditorContributions(); } @@ -150,20 +150,8 @@ export module CommonEditorRegistry { } } -class SimpleEditorContributionDescriptor implements editorCommon.ICommonEditorContributionDescriptor { - private _ctor:editorCommon.ICommonEditorContributionCtor; - - constructor(ctor:editorCommon.ICommonEditorContributionCtor) { - this._ctor = ctor; - } - - public createInstance(instantiationService: IInstantiationService, editor:editorCommon.ICommonCodeEditor): editorCommon.IEditorContribution { - return instantiationService.createInstance(this._ctor, editor); - } -} - // Editor extension points -var Extensions = { +const Extensions = { EditorCommonContributions: 'editor.commonContributions' }; @@ -171,7 +159,7 @@ class EditorContributionRegistry { public static INSTANCE = new EditorContributionRegistry(); - private editorContributions: editorCommon.ICommonEditorContributionDescriptor[]; + private editorContributions: editorCommon.ICommonEditorContributionCtor[]; private editorActions: EditorAction[]; constructor() { @@ -180,7 +168,7 @@ class EditorContributionRegistry { } public registerEditorContribution(ctor:editorCommon.ICommonEditorContributionCtor): void { - this.editorContributions.push(new SimpleEditorContributionDescriptor(ctor)); + this.editorContributions.push(ctor); } public registerEditorAction(action:EditorAction) { @@ -195,7 +183,7 @@ class EditorContributionRegistry { this.editorActions.push(action); } - public getEditorContributions(): editorCommon.ICommonEditorContributionDescriptor[] { + public getEditorContributions(): editorCommon.ICommonEditorContributionCtor[] { return this.editorContributions.slice(0); } diff --git a/src/vs/workbench/parts/debug/electron-browser/repl.ts b/src/vs/workbench/parts/debug/electron-browser/repl.ts index a74b1f98a25..c861b6cdb19 100644 --- a/src/vs/workbench/parts/debug/electron-browser/repl.ts +++ b/src/vs/workbench/parts/debug/electron-browser/repl.ts @@ -24,7 +24,7 @@ import * as modes from 'vs/editor/common/modes'; import {editorAction, ServicesAccessor, EditorAction, CommonEditorRegistry} from 'vs/editor/common/editorCommonExtensions'; import {IModelService} from 'vs/editor/common/services/modelService'; import {ICodeEditorService} from 'vs/editor/common/services/codeEditorService'; -import {IEditorContributionDescriptor} from 'vs/editor/browser/editorBrowser'; +import {IEditorContributionCtor} from 'vs/editor/browser/editorBrowser'; import {CodeEditorWidget} from 'vs/editor/browser/widget/codeEditorWidget'; import {EditorBrowserRegistry} from 'vs/editor/browser/editorBrowserExtensions'; import {ServiceCollection} from 'vs/platform/instantiation/common/serviceCollection'; @@ -73,7 +73,7 @@ class ReplEditor extends CodeEditorWidget { super(domElement, options, instantiationService, codeEditorService, commandService, contextKeyService); } - protected _getContributions(): IEditorContributionDescriptor[] { + protected _getContributions(): IEditorContributionCtor[] { return [].concat(EditorBrowserRegistry.getEditorContributions()).concat(CommonEditorRegistry.getEditorContributions()); }