diff --git a/src/vs/platform/plugins/common/abstractPluginService.ts b/src/vs/platform/plugins/common/abstractPluginService.ts index 28cccff354f..70f04a078b7 100644 --- a/src/vs/platform/plugins/common/abstractPluginService.ts +++ b/src/vs/platform/plugins/common/abstractPluginService.ts @@ -5,7 +5,7 @@ 'use strict'; import nls = require('vs/nls'); -import {IPluginDescription, IPluginService, IMessage, IPointListener, IActivationEventListener } from 'vs/platform/plugins/common/plugins'; +import {IPluginDescription, IPluginService, IMessage, IPointListener, IActivationEventListener, IPluginStatus } from 'vs/platform/plugins/common/plugins'; import WinJS = require('vs/base/common/winjs.base'); import {IDisposable} from 'vs/base/common/lifecycle'; import Errors = require('vs/base/common/errors'); @@ -111,6 +111,10 @@ export abstract class AbstractPluginService implements IPluginService { return this.activatedPlugins[pluginId].exports; } + public getPluginsStatus(): { [id: string]: IPluginStatus } { + return null; + } + public isActivated(pluginId:string): boolean { return hasOwnProperty.call(this.activatedPlugins, pluginId); } diff --git a/src/vs/platform/plugins/common/nativePluginService.ts b/src/vs/platform/plugins/common/nativePluginService.ts index d69012b650c..3b4847b3620 100644 --- a/src/vs/platform/plugins/common/nativePluginService.ts +++ b/src/vs/platform/plugins/common/nativePluginService.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import {IPluginDescription, IMessage} from 'vs/platform/plugins/common/plugins'; +import {IPluginDescription, IMessage, IPluginStatus} from 'vs/platform/plugins/common/plugins'; import {PluginsRegistry} from 'vs/platform/plugins/common/pluginsRegistry'; import WinJS = require('vs/base/common/winjs.base'); import {Remotable, IThreadService} from 'vs/platform/thread/common/thread'; @@ -64,6 +64,7 @@ export class MainProcessPluginService extends AbstractPluginService { private _telemetryService: ITelemetryService; private _proxy: PluginHostPluginService; private _isDev: boolean; + private _pluginsStatus: { [id: string]: IPluginStatus }; /** * This class is constructed manually because it is a service, so it doesn't use any ctor injection @@ -83,8 +84,13 @@ export class MainProcessPluginService extends AbstractPluginService { this._threadService = threadService; this._telemetryService = telemetryService; this._proxy = this._threadService.getRemotable(PluginHostPluginService); + this._pluginsStatus = {}; PluginsRegistry.handleExtensionPoints((severity, source, message) => { + if (!this._pluginsStatus[source]) { + this._pluginsStatus[source] = { messages: [] }; + } + this._pluginsStatus[source].messages.push({ type: severity, source, message }); this.showMessage(severity, source, message); }); } @@ -158,6 +164,10 @@ export class MainProcessPluginService extends AbstractPluginService { } } + public getPluginsStatus(): { [id: string]: IPluginStatus } { + return this._pluginsStatus; + } + // -- overwriting AbstractPluginService protected _actualActivatePlugin(pluginDescription: IPluginDescription): WinJS.TPromise { diff --git a/src/vs/platform/plugins/common/plugins.ts b/src/vs/platform/plugins/common/plugins.ts index 3825edbea9c..42335e24bd5 100644 --- a/src/vs/platform/plugins/common/plugins.ts +++ b/src/vs/platform/plugins/common/plugins.ts @@ -40,6 +40,10 @@ export interface IMessage { source: string; } +export interface IPluginStatus { + messages: IMessage[]; +} + export interface IPluginService { serviceId: ServiceIdentifier; activateByEvent(activationEvent:string): TPromise; @@ -52,6 +56,7 @@ export interface IPluginService { get(pluginId:string): any; onReady(): TPromise; + getPluginsStatus(): { [id: string]: IPluginStatus }; } export var INSTANCE:IPluginService = null; \ No newline at end of file