Store directly the editor contributions ctors

This commit is contained in:
Alex Dima
2016-09-01 15:13:14 +02:00
parent ac263d2129
commit a550cd73e5
7 changed files with 26 additions and 77 deletions
+2 -2
View File
@@ -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());
}
+2 -14
View File
@@ -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<ICodeEditor, editorCommon.IEditorContribution>;
/**
* 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<ICodeEditor, editorCommon.IEditorContribution>;
/**
* An overview ruler
@@ -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(<IConstructorSignature1<ICodeEditor, IEditorContribution>> 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);
}
}
@@ -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 {
+1 -12
View File
@@ -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<IEditorAction
*/
export type ICommonEditorContributionCtor = IConstructorSignature1<ICommonCodeEditor, IEditorContribution>;
/**
* 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;
+6 -18
View File
@@ -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);
}
@@ -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());
}