Skip to content

Commit 620e8b7

Browse files
committed
Merge pull request #5443 from Microsoft/joh/inst
InstantiationService debt
2 parents 7fda4ca + abbdb52 commit 620e8b7

21 files changed

+468
-480
lines changed

src/vs/editor/common/commonCodeEditor.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import * as objects from 'vs/base/common/objects';
1313
import * as timer from 'vs/base/common/timer';
1414
import {TPromise} from 'vs/base/common/winjs.base';
1515
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
16+
import ServiceCollection from 'vs/platform/instantiation/common/serviceCollection';
1617
import {IKeybindingContextKey, IKeybindingScopeLocation, IKeybindingService} from 'vs/platform/keybinding/common/keybindingService';
1718
import {ITelemetryService} from 'vs/platform/telemetry/common/telemetry';
1819
import {CommonEditorConfiguration} from 'vs/editor/common/config/commonEditorConfig';
@@ -114,9 +115,7 @@ export abstract class CommonCodeEditor extends EventEmitter implements IActionPr
114115
this.forcedWidgetFocusCount = 0;
115116

116117
this._telemetryService = telemetryService;
117-
this._instantiationService = instantiationService.createChild({
118-
keybindingService: this._keybindingService
119-
});
118+
this._instantiationService = instantiationService.createChild(new ServiceCollection([IKeybindingService, this._keybindingService]));
120119

121120
this._attachModel(null);
122121

src/vs/editor/common/worker/editorWorkerServer.ts

+33-30
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,27 @@ import Severity from 'vs/base/common/severity';
1212
import {TPromise} from 'vs/base/common/winjs.base';
1313
import {WorkerServer} from 'vs/base/common/worker/workerServer';
1414
import {EventService} from 'vs/platform/event/common/eventService';
15+
import {IEventService} from 'vs/platform/event/common/event';
1516
import {AbstractExtensionService, ActivatedExtension} from 'vs/platform/extensions/common/abstractExtensionService';
16-
import {IExtensionDescription} from 'vs/platform/extensions/common/extensions';
17-
import {createInstantiationService} from 'vs/platform/instantiation/common/instantiationService';
17+
import {IExtensionDescription, IExtensionService} from 'vs/platform/extensions/common/extensions';
18+
import ServiceCollection from 'vs/platform/instantiation/common/serviceCollection';
19+
import {InstantiationService} from 'vs/platform/instantiation/common/instantiationService';
1820
import {SecondaryMarkerService} from 'vs/platform/markers/common/markerService';
21+
import {IMarkerService} from 'vs/platform/markers/common/markers';
1922
import {BaseRequestService} from 'vs/platform/request/common/baseRequestService';
23+
import {IRequestService} from 'vs/platform/request/common/request';
2024
import {RemoteTelemetryService} from 'vs/platform/telemetry/common/remoteTelemetryService';
25+
import {ITelemetryService} from 'vs/platform/telemetry/common/telemetry';
2126
import {WorkerThreadService} from 'vs/platform/thread/common/workerThreadService';
27+
import {IThreadService} from 'vs/platform/thread/common/thread';
2228
import {BaseWorkspaceContextService} from 'vs/platform/workspace/common/baseWorkspaceContextService';
23-
import {IWorkspace} from 'vs/platform/workspace/common/workspace';
29+
import {IWorkspaceContextService, IWorkspace} from 'vs/platform/workspace/common/workspace';
2430
import {ModeServiceImpl, ModeServiceWorkerHelper} from 'vs/editor/common/services/modeServiceImpl';
31+
import {IModeService} from 'vs/editor/common/services/modeService';
2532
import {ModelServiceWorkerHelper} from 'vs/editor/common/services/modelServiceImpl';
2633
import {ResourceService} from 'vs/editor/common/services/resourceServiceImpl';
34+
import {IResourceService} from 'vs/editor/common/services/resourceService';
35+
2736

2837
export interface IInitData {
2938
contextService: {
@@ -86,35 +95,29 @@ export class EditorWorkerServer {
8695

8796
public initialize(mainThread:WorkerServer, complete:ICallback, error:ICallback, progress:ICallback, initData:IInitData):void {
8897

89-
var extensionService = new WorkerExtensionService();
90-
91-
var contextService = new BaseWorkspaceContextService(initData.contextService.workspace, initData.contextService.configuration, initData.contextService.options);
98+
const services = new ServiceCollection();
9299

100+
const extensionService = new WorkerExtensionService();
101+
const contextService = new BaseWorkspaceContextService(initData.contextService.workspace, initData.contextService.configuration, initData.contextService.options);
93102
this.threadService = new WorkerThreadService(mainThread.getRemoteCom());
94-
this.threadService.setInstantiationService(createInstantiationService({ threadService: this.threadService }));
95-
96-
var telemetryServiceInstance = new RemoteTelemetryService('workerTelemetry', this.threadService);
97-
98-
var resourceService = new ResourceService();
99-
var markerService = new SecondaryMarkerService(this.threadService);
100-
101-
var modeService = new ModeServiceImpl(this.threadService, extensionService);
102-
103-
var requestService = new BaseRequestService(contextService, telemetryServiceInstance);
104-
105-
var _services : any = {
106-
threadService: this.threadService,
107-
extensionService: extensionService,
108-
modeService: modeService,
109-
contextService: contextService,
110-
eventService: new EventService(),
111-
resourceService: resourceService,
112-
markerService: markerService,
113-
telemetryService: telemetryServiceInstance,
114-
requestService: requestService
115-
};
116-
117-
var instantiationService = createInstantiationService(_services);
103+
this.threadService.setInstantiationService(new InstantiationService(new ServiceCollection([IThreadService, this.threadService])));
104+
const telemetryServiceInstance = new RemoteTelemetryService('workerTelemetry', this.threadService);
105+
const resourceService = new ResourceService();
106+
const markerService = new SecondaryMarkerService(this.threadService);
107+
const modeService = new ModeServiceImpl(this.threadService, extensionService);
108+
const requestService = new BaseRequestService(contextService, telemetryServiceInstance);
109+
110+
services.set(IExtensionService, extensionService);
111+
services.set(IThreadService, this.threadService);
112+
services.set(IModeService, modeService);
113+
services.set(IWorkspaceContextService, contextService);
114+
services.set(IEventService, new EventService());
115+
services.set(IResourceService, resourceService);
116+
services.set(IMarkerService, markerService);
117+
services.set(ITelemetryService, telemetryServiceInstance);
118+
services.set(IRequestService, requestService);
119+
120+
const instantiationService = new InstantiationService(services);
118121
this.threadService.setInstantiationService(instantiationService);
119122

120123
// Instantiate thread actors

src/vs/editor/contrib/referenceSearch/browser/referenceSearchWidget.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {DefaultController, LegacyRenderer} from 'vs/base/parts/tree/browser/tree
2626
import {Tree} from 'vs/base/parts/tree/browser/treeImpl';
2727
import {IEditorService} from 'vs/platform/editor/common/editor';
2828
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
29+
import ServiceCollection from 'vs/platform/instantiation/common/serviceCollection';
2930
import {IKeybindingService} from 'vs/platform/keybinding/common/keybindingService';
3031
import {IWorkspaceContextService} from 'vs/platform/workspace/common/workspace';
3132
import {DefaultConfig} from 'vs/editor/common/config/defaultConfig';
@@ -34,7 +35,7 @@ import * as editorCommon from 'vs/editor/common/editorCommon';
3435
import {Model} from 'vs/editor/common/model/model';
3536
import {ICodeEditor, IMouseTarget} from 'vs/editor/browser/editorBrowser';
3637
import {EmbeddedCodeEditorWidget} from 'vs/editor/browser/widget/embeddedCodeEditorWidget';
37-
import {PeekViewWidget} from 'vs/editor/contrib/zoneWidget/browser/peekViewWidget';
38+
import {PeekViewWidget, IPeekViewService} from 'vs/editor/contrib/zoneWidget/browser/peekViewWidget';
3839
import {EventType, FileReferences, OneReference, ReferencesModel} from './referenceSearchModel';
3940

4041
class DecorationsManager implements IDisposable {
@@ -398,7 +399,7 @@ export class ReferenceWidget extends PeekViewWidget {
398399
super(editor, keybindingService, ReferenceWidget.INNER_EDITOR_CONTEXT_KEY, { frameColor: '#007ACC', showFrame: false, showArrow: true });
399400
this.editorService = editorService;
400401
this.contextService = contextService;
401-
this.instantiationService = instantiationService.createChild({ peekViewService: this });
402+
this.instantiationService = instantiationService.createChild(new ServiceCollection([IPeekViewService, this]));
402403

403404
this.callOnModel = [];
404405

src/vs/platform/instantiation/common/instantiation.ts

+11-30
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,22 @@
55
'use strict';
66

77
import {TPromise} from 'vs/base/common/winjs.base';
8+
import ServiceCollection from './serviceCollection';
89
import * as descriptors from './descriptors';
910

10-
// ----------------------- internal util -----------------------
11+
// ------ internal util
1112

1213
export namespace _util {
1314

1415
export const DI_TARGET = '$di$target';
1516
export const DI_DEPENDENCIES = '$di$dependencies';
16-
export const DI_PROVIDES = '$di$provides_service';
1717

18-
export function getServiceId(id: ServiceIdentifier<any>): string {
19-
return id[DI_PROVIDES];
20-
}
21-
22-
export function getServiceDependencies(ctor: any): { serviceId: string, index: number }[] {
23-
return ctor[DI_DEPENDENCIES];
18+
export function getServiceDependencies(ctor: any): { id: ServiceIdentifier<any>, index: number }[] {
19+
return ctor[DI_DEPENDENCIES] || [];
2420
}
2521
}
2622

27-
// ----------------------- interfaces -----------------------
28-
23+
// --- interfaces ------
2924

3025
export interface IConstructorSignature0<T> {
3126
new (...services: { serviceId: ServiceIdentifier<any>; }[]): T;
@@ -103,7 +98,6 @@ export interface IFunctionSignature8<A1, A2, A3, A4, A5, A6, A7, A8, R> {
10398
(accessor: ServicesAccessor, first: A1, second: A2, third: A3, forth: A4, fifth: A5, sixth: A6, seventh: A7, eigth: A8): R;
10499
}
105100

106-
107101
export var IInstantiationService = createDecorator<IInstantiationService>('instantiationService');
108102

109103
export interface IInstantiationService {
@@ -175,12 +169,7 @@ export interface IInstantiationService {
175169
* Creates a child of this service which inherts all current services
176170
* and adds/overwrites the given services
177171
*/
178-
createChild(services: any): IInstantiationService;
179-
180-
/**
181-
* Registers a new service to this instantation service.
182-
*/
183-
registerService(name: string, service: any): void;
172+
createChild(services: ServiceCollection): IInstantiationService;
184173

185174
/**
186175
* Adds a service or a descriptor to the collection of services and
@@ -204,29 +193,21 @@ export interface ServiceIdentifier<T> {
204193
*/
205194
export function createDecorator<T>(serviceId: string): { (...args: any[]): void; type: T; } {
206195

207-
let ret = function(target: any, key: string, index: number): any {
196+
let id = function(target: any, key: string, index: number): any {
208197

209198
if (arguments.length !== 3) {
210199
throw new Error('@IServiceName-decorator can only be used to decorate a parameter');
211200
}
212201

213202
if (target[_util.DI_TARGET] === target) {
214-
target[_util.DI_DEPENDENCIES].push({ serviceId, index });
203+
target[_util.DI_DEPENDENCIES].push({ id, index });
215204
} else {
216-
target[_util.DI_DEPENDENCIES] = [{ serviceId, index }];
205+
target[_util.DI_DEPENDENCIES] = [{ id, index }];
217206
target[_util.DI_TARGET] = target;
218207
}
219208
};
220209

221-
ret[_util.DI_PROVIDES] = serviceId;
222-
// ret['type'] = undefined;
223-
return <any>ret;
224-
}
210+
id.toString = () => serviceId;
225211

226-
/**
227-
* A service context which can be used to retrieve services
228-
* given a valid service identifer is being presented
229-
*/
230-
export interface Context {
231-
get<T>(id: ServiceIdentifier<T>): T;
212+
return <any>id;
232213
}

0 commit comments

Comments
 (0)