Skip to content

Commit 47b332e

Browse files
committed
remove support for @optional service dependencies, microsoft#119440 (comment)
1 parent 68957a6 commit 47b332e

File tree

3 files changed

+4
-50
lines changed

3 files changed

+4
-50
lines changed

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

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ export interface IConstructorSignature8<A1, A2, A3, A4, A5, A6, A7, A8, T> {
6262

6363
export interface ServicesAccessor {
6464
get<T>(id: ServiceIdentifier<T>): T;
65-
get<T>(id: ServiceIdentifier<T>, isOptional: typeof optional): T | undefined;
6665
}
6766

6867
export const IInstantiationService = createDecorator<IInstantiationService>('instantiationService');
@@ -158,17 +157,3 @@ export function createDecorator<T>(serviceId: string): ServiceIdentifier<T> {
158157
export function refineServiceDecorator<T1, T extends T1>(serviceIdentifier: ServiceIdentifier<T1>): ServiceIdentifier<T> {
159158
return <ServiceIdentifier<T>>serviceIdentifier;
160159
}
161-
162-
/**
163-
* Mark a service dependency as optional.
164-
* @deprecated Avoid, see https://github.com/microsoft/vscode/issues/119440
165-
*/
166-
export function optional<T>(serviceIdentifier: ServiceIdentifier<T>) {
167-
168-
return function (target: Function, key: string, index: number) {
169-
if (arguments.length !== 3) {
170-
throw new Error('@optional-decorator can only be used to decorate a parameter');
171-
}
172-
storeServiceDependency(serviceIdentifier, target, index, true);
173-
};
174-
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { IdleValue } from 'vs/base/common/async';
77
import { illegalState } from 'vs/base/common/errors';
88
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
99
import { Graph } from 'vs/platform/instantiation/common/graph';
10-
import { IInstantiationService, optional, ServiceIdentifier, ServicesAccessor, _util } from 'vs/platform/instantiation/common/instantiation';
10+
import { IInstantiationService, ServiceIdentifier, ServicesAccessor, _util } from 'vs/platform/instantiation/common/instantiation';
1111
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
1212

1313
// TRACING
@@ -45,14 +45,14 @@ export class InstantiationService implements IInstantiationService {
4545
let _done = false;
4646
try {
4747
const accessor: ServicesAccessor = {
48-
get: <T>(id: ServiceIdentifier<T>, isOptional?: typeof optional) => {
48+
get: <T>(id: ServiceIdentifier<T>) => {
4949

5050
if (_done) {
5151
throw illegalState('service accessor is only valid during the invocation of its target method');
5252
}
5353

5454
const result = this._getOrCreateServiceInstance(id, _trace);
55-
if (!result && isOptional !== optional) {
55+
if (!result) {
5656
throw new Error(`[invokeFunction] unknown service '${id}'`);
5757
}
5858
return result;

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

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import * as assert from 'assert';
77
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
8-
import { createDecorator, IInstantiationService, optional, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
8+
import { createDecorator, IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
99
import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService';
1010
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
1111

@@ -85,18 +85,7 @@ class TargetWithStaticParam {
8585
}
8686
}
8787

88-
class TargetNotOptional {
89-
constructor(@IService1 service1: IService1, @IService2 service2: IService2) {
9088

91-
}
92-
}
93-
class TargetOptional {
94-
constructor(@IService1 service1: IService1, @optional(IService2) service2: IService2) {
95-
assert.ok(service1);
96-
assert.strictEqual(service1.c, 1);
97-
assert.ok(service2 === undefined);
98-
}
99-
}
10089

10190
class DependentServiceTarget {
10291
constructor(@IDependentService d: IDependentService) {
@@ -181,13 +170,6 @@ suite('Instantiation Service', () => {
181170
let service = new InstantiationService(collection);
182171
service.createInstance(Service1Consumer);
183172

184-
// no IService2
185-
assert.throws(() => service.createInstance(Target2Dep));
186-
service.invokeFunction(function (a) {
187-
assert.ok(a.get(IService1));
188-
assert.ok(!a.get(IService2, optional));
189-
});
190-
191173
collection.set(IService2, new Service2());
192174

193175
service.createInstance(Target2Dep);
@@ -197,18 +179,6 @@ suite('Instantiation Service', () => {
197179
});
198180
});
199181

200-
test('@Param - optional', function () {
201-
let collection = new ServiceCollection([IService1, new Service1()]);
202-
let service = new InstantiationService(collection, true);
203-
204-
service.createInstance(TargetOptional);
205-
assert.throws(() => service.createInstance(TargetNotOptional));
206-
207-
service = new InstantiationService(collection, false);
208-
service.createInstance(TargetOptional);
209-
service.createInstance(TargetNotOptional);
210-
});
211-
212182
// we made this a warning
213183
// test('@Param - too many args', function () {
214184
// let service = instantiationService.create(Object.create(null));
@@ -320,7 +290,6 @@ suite('Instantiation Service', () => {
320290
function test(accessor: ServicesAccessor) {
321291
assert.ok(accessor.get(IService1) instanceof Service1);
322292
assert.throws(() => accessor.get(IService2));
323-
assert.strictEqual(accessor.get(IService2, optional), undefined);
324293
return true;
325294
}
326295
assert.strictEqual(service.invokeFunction(test), true);

0 commit comments

Comments
 (0)