提交 a2a48e3b 编写于 作者: A Alex Dima

Simplify IExtensionService

上级 3d311aee
...@@ -274,10 +274,6 @@ export class SimplePluginService extends AbstractPluginService<ActivatedPlugin> ...@@ -274,10 +274,6 @@ export class SimplePluginService extends AbstractPluginService<ActivatedPlugin>
} }
} }
public deactivate(pluginId:string): void {
// nothing to do
}
protected _createFailedPlugin(): ActivatedPlugin { protected _createFailedPlugin(): ActivatedPlugin {
throw new Error('unexpected'); throw new Error('unexpected');
} }
......
...@@ -67,10 +67,6 @@ class WorkerPluginService extends AbstractPluginService<ActivatedPlugin> { ...@@ -67,10 +67,6 @@ class WorkerPluginService extends AbstractPluginService<ActivatedPlugin> {
} }
} }
public deactivate(pluginId:string): void {
// nothing to do
}
protected _createFailedPlugin(): ActivatedPlugin { protected _createFailedPlugin(): ActivatedPlugin {
throw new Error('unexpected'); throw new Error('unexpected');
} }
......
...@@ -120,11 +120,6 @@ class MockPluginService extends AbstractPluginService<ActivatedPlugin> { ...@@ -120,11 +120,6 @@ class MockPluginService extends AbstractPluginService<ActivatedPlugin> {
} }
} }
public deactivate(pluginId: string): void {
// nothing to do
}
protected _createFailedPlugin(): any { protected _createFailedPlugin(): any {
throw new Error('not implemented'); throw new Error('not implemented');
} }
......
...@@ -8,7 +8,7 @@ import * as nls from 'vs/nls'; ...@@ -8,7 +8,7 @@ import * as nls from 'vs/nls';
import {IDisposable} from 'vs/base/common/lifecycle'; import {IDisposable} from 'vs/base/common/lifecycle';
import Severity from 'vs/base/common/severity'; import Severity from 'vs/base/common/severity';
import {TPromise} from 'vs/base/common/winjs.base'; import {TPromise} from 'vs/base/common/winjs.base';
import {IActivationEventListener, IMessage, IPluginDescription, IExtensionService, IPluginStatus} from 'vs/platform/extensions/common/plugins'; import {IMessage, IPluginDescription, IExtensionService, IPluginStatus} from 'vs/platform/extensions/common/plugins';
import {PluginsRegistry} from 'vs/platform/extensions/common/pluginsRegistry'; import {PluginsRegistry} from 'vs/platform/extensions/common/pluginsRegistry';
const hasOwnProperty = Object.hasOwnProperty; const hasOwnProperty = Object.hasOwnProperty;
...@@ -65,7 +65,6 @@ export abstract class AbstractPluginService<T extends ActivatedPlugin> implement ...@@ -65,7 +65,6 @@ export abstract class AbstractPluginService<T extends ActivatedPlugin> implement
this.activatedPlugins = {}; this.activatedPlugins = {};
} }
public abstract deactivate(pluginId: string): void;
protected abstract _showMessage(severity: Severity, message: string): void; protected abstract _showMessage(severity: Severity, message: string): void;
protected showMessage(severity: Severity, source: string, message: string): void { protected showMessage(severity: Severity, source: string, message: string): void {
...@@ -79,10 +78,6 @@ export abstract class AbstractPluginService<T extends ActivatedPlugin> implement ...@@ -79,10 +78,6 @@ export abstract class AbstractPluginService<T extends ActivatedPlugin> implement
this._onReadyC(true); this._onReadyC(true);
} }
public registerOneTimeActivationEventListener(activationEvent: string, listener: IActivationEventListener): void {
PluginsRegistry.registerOneTimeActivationEventListener(activationEvent, listener);
}
public onReady(): TPromise<boolean> { public onReady(): TPromise<boolean> {
return this._onReady; return this._onReady;
} }
...@@ -104,7 +99,7 @@ export abstract class AbstractPluginService<T extends ActivatedPlugin> implement ...@@ -104,7 +99,7 @@ export abstract class AbstractPluginService<T extends ActivatedPlugin> implement
}); });
} }
public activateAndGet(pluginId: string): TPromise<void> { public activateById(pluginId: string): TPromise<void> {
return this._onReady.then(() => { return this._onReady.then(() => {
let desc = PluginsRegistry.getPluginDescription(pluginId); let desc = PluginsRegistry.getPluginDescription(pluginId);
if (!desc) { if (!desc) {
......
...@@ -200,10 +200,6 @@ export class MainProcessPluginService extends AbstractPluginService<ActivatedPlu ...@@ -200,10 +200,6 @@ export class MainProcessPluginService extends AbstractPluginService<ActivatedPlu
return this._pluginsStatus; return this._pluginsStatus;
} }
public deactivate(pluginId: string): void {
this._proxy.deactivate(pluginId);
}
// -- overwriting AbstractPluginService // -- overwriting AbstractPluginService
protected _actualActivatePlugin(pluginDescription: IPluginDescription): TPromise<ActivatedPlugin> { protected _actualActivatePlugin(pluginDescription: IPluginDescription): TPromise<ActivatedPlugin> {
......
...@@ -47,27 +47,19 @@ export interface IPluginStatus { ...@@ -47,27 +47,19 @@ export interface IPluginStatus {
export interface IExtensionService { export interface IExtensionService {
serviceId: ServiceIdentifier<any>; serviceId: ServiceIdentifier<any>;
activateByEvent(activationEvent: string): TPromise<void>;
activateAndGet(pluginId: string): TPromise<void>;
isActivated(pluginId: string): boolean;
/** /**
* This method should be called only on shutdown! * Send an activation event and activate interested extensions.
* More work is needed for this to be called any time!
*/ */
deactivate(pluginId: string): void; activateByEvent(activationEvent: string): TPromise<void>;
/** /**
* To be used only by the platform once on startup. * Block on this signal any interactions with extensions.
*/ */
registrationDone(errors?: IMessage[]): void; onReady(): TPromise<boolean>;
registerOneTimeActivationEventListener(activationEvent: string, listener: IActivationEventListener): void;
/** /**
* Block on this signal any interactions with extensions. * Get information about extensions status.
*/ */
onReady(): TPromise<boolean>;
getPluginsStatus(): { [id: string]: IPluginStatus }; getPluginsStatus(): { [id: string]: IPluginStatus };
} }
......
...@@ -435,7 +435,7 @@ class Extension<T> implements vscode.Extension<T> { ...@@ -435,7 +435,7 @@ class Extension<T> implements vscode.Extension<T> {
} }
activate(): Thenable<T> { activate(): Thenable<T> {
return this._extensionService.activateAndGet(this.id).then(() => this.exports); return this._extensionService.activateById(this.id).then(() => this.exports);
} }
} }
......
...@@ -93,13 +93,16 @@ interface ITestRunner { ...@@ -93,13 +93,16 @@ interface ITestRunner {
export class PluginHostMain { export class PluginHostMain {
private _isTerminating: boolean; private _isTerminating: boolean;
private _contextService: IWorkspaceContextService;
private _extensionService: PluginHostPluginService;
constructor( constructor(
@IWorkspaceContextService private contextService: IWorkspaceContextService, @IWorkspaceContextService contextService: IWorkspaceContextService,
@IExtensionService private extensionService: IExtensionService, @IExtensionService extensionService: IExtensionService
@IInstantiationService instantiationService: IInstantiationService
) { ) {
this._isTerminating = false; this._isTerminating = false;
this._contextService = contextService;
this._extensionService = <PluginHostPluginService>extensionService;
} }
public start(): TPromise<void> { public start(): TPromise<void> {
...@@ -116,10 +119,10 @@ export class PluginHostMain { ...@@ -116,10 +119,10 @@ export class PluginHostMain {
try { try {
let allExtensions = PluginsRegistry.getAllPluginDescriptions(); let allExtensions = PluginsRegistry.getAllPluginDescriptions();
let allExtensionsIds = allExtensions.map(ext => ext.id); let allExtensionsIds = allExtensions.map(ext => ext.id);
let activatedExtensions = allExtensionsIds.filter(id => this.extensionService.isActivated(id)); let activatedExtensions = allExtensionsIds.filter(id => this._extensionService.isActivated(id));
activatedExtensions.forEach((extensionId) => { activatedExtensions.forEach((extensionId) => {
this.extensionService.deactivate(extensionId); this._extensionService.deactivate(extensionId);
}); });
} catch (err) { } catch (err) {
// TODO: write to log once we have one // TODO: write to log once we have one
...@@ -133,7 +136,7 @@ export class PluginHostMain { ...@@ -133,7 +136,7 @@ export class PluginHostMain {
private readPlugins(): TPromise<void> { private readPlugins(): TPromise<void> {
let collector = new PluginsMessageCollector(); let collector = new PluginsMessageCollector();
let env = this.contextService.getConfiguration().env; let env = this._contextService.getConfiguration().env;
return PluginHostMain.scanPlugins(collector, BUILTIN_PLUGINS_PATH, !env.disablePlugins ? env.userPluginsHome : void 0, !env.disablePlugins ? env.pluginDevelopmentPath : void 0, env.version) return PluginHostMain.scanPlugins(collector, BUILTIN_PLUGINS_PATH, !env.disablePlugins ? env.userPluginsHome : void 0, !env.disablePlugins ? env.pluginDevelopmentPath : void 0, env.version)
.then(null, err => { .then(null, err => {
...@@ -143,7 +146,7 @@ export class PluginHostMain { ...@@ -143,7 +146,7 @@ export class PluginHostMain {
.then(extensions => { .then(extensions => {
// Register & Signal done // Register & Signal done
PluginsRegistry.registerPlugins(extensions); PluginsRegistry.registerPlugins(extensions);
this.extensionService.registrationDone(collector.getMessages()); this._extensionService.registrationDone(collector.getMessages());
}) })
.then(() => this.handleEagerPlugins()) .then(() => this.handleEagerPlugins())
.then(() => this.handlePluginTests()); .then(() => this.handlePluginTests());
...@@ -183,14 +186,14 @@ export class PluginHostMain { ...@@ -183,14 +186,14 @@ export class PluginHostMain {
// Handle "eager" activation plugins // Handle "eager" activation plugins
private handleEagerPlugins(): TPromise<void> { private handleEagerPlugins(): TPromise<void> {
this.extensionService.activateByEvent('*').then(null, (err) => { this._extensionService.activateByEvent('*').then(null, (err) => {
console.error(err); console.error(err);
}); });
return this.handleWorkspaceContainsEagerPlugins(); return this.handleWorkspaceContainsEagerPlugins();
} }
private handleWorkspaceContainsEagerPlugins(): TPromise<void> { private handleWorkspaceContainsEagerPlugins(): TPromise<void> {
let workspace = this.contextService.getWorkspace(); let workspace = this._contextService.getWorkspace();
if (!workspace || !workspace.resource) { if (!workspace || !workspace.resource) {
return TPromise.as(null); return TPromise.as(null);
} }
...@@ -226,7 +229,7 @@ export class PluginHostMain { ...@@ -226,7 +229,7 @@ export class PluginHostMain {
} }
let activationEvent = 'workspaceContains:' + existingFileName; let activationEvent = 'workspaceContains:' + existingFileName;
this.extensionService.activateByEvent(activationEvent).then(null, (err) => { this._extensionService.activateByEvent(activationEvent).then(null, (err) => {
console.error(err); console.error(err);
}); });
}); });
...@@ -234,7 +237,7 @@ export class PluginHostMain { ...@@ -234,7 +237,7 @@ export class PluginHostMain {
} }
private handlePluginTests(): TPromise<void> { private handlePluginTests(): TPromise<void> {
let env = this.contextService.getConfiguration().env; let env = this._contextService.getConfiguration().env;
if (!env.pluginTestsPath || !env.pluginDevelopmentPath) { if (!env.pluginTestsPath || !env.pluginDevelopmentPath) {
return TPromise.as(null); return TPromise.as(null);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册