提交 2540182a 编写于 作者: S Sandeep Somavarapu

Fix #66598

上级 0ad67db1
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { forEach } from 'vs/base/common/collections'; import { forEach } from 'vs/base/common/collections';
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import { ExtensionMessageCollector, ExtensionsRegistry, IExtensionPoint } from 'vs/workbench/services/extensions/common/extensionsRegistry'; import { ExtensionMessageCollector, ExtensionsRegistry, IExtensionPoint, IExtensionPointUser } from 'vs/workbench/services/extensions/common/extensionsRegistry';
import { ViewContainer, ViewsRegistry, ICustomViewDescriptor, IViewContainersRegistry, Extensions as ViewContainerExtensions } from 'vs/workbench/common/views'; import { ViewContainer, ViewsRegistry, ICustomViewDescriptor, IViewContainersRegistry, Extensions as ViewContainerExtensions } from 'vs/workbench/common/views';
import { CustomTreeViewPanel, CustomTreeView } from 'vs/workbench/browser/parts/views/customView'; import { CustomTreeViewPanel, CustomTreeView } from 'vs/workbench/browser/parts/views/customView';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
...@@ -82,11 +82,12 @@ const viewsContribution: IJSONSchema = { ...@@ -82,11 +82,12 @@ const viewsContribution: IJSONSchema = {
} }
}; };
type ViewExtensionPointType = { [loc: string]: IUserFriendlyViewDescriptor[] };
const viewsExtensionPoint: IExtensionPoint<{ [loc: string]: IUserFriendlyViewDescriptor[] }> = ExtensionsRegistry.registerExtensionPoint<{ [loc: string]: IUserFriendlyViewDescriptor[] }>({ const viewsExtensionPoint: IExtensionPoint<ViewExtensionPointType> = ExtensionsRegistry.registerExtensionPoint<ViewExtensionPointType>({
extensionPoint: 'views', extensionPoint: 'views',
deps: [viewsContainersExtensionPoint], deps: [viewsContainersExtensionPoint],
jsonSchema: viewsContribution jsonSchema: viewsContribution,
isDynamic: true
}); });
class ViewsContainersExtensionHandler implements IWorkbenchContribution { class ViewsContainersExtensionHandler implements IWorkbenchContribution {
...@@ -101,8 +102,18 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution { ...@@ -101,8 +102,18 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution {
} }
private handleAndRegisterCustomViews() { private handleAndRegisterCustomViews() {
viewsExtensionPoint.setHandler(extensions => { viewsExtensionPoint.setHandler((extensions, { added, removed }) => {
for (let extension of extensions) { if (removed.length) {
this.removeViews(removed);
}
if (added.length) {
this.addViews(added);
}
});
}
private addViews(extensions: IExtensionPointUser<ViewExtensionPointType>[]): void {
for (const extension of extensions) {
const { value, collector } = extension; const { value, collector } = extension;
forEach(value, entry => { forEach(value, entry => {
...@@ -137,7 +148,8 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution { ...@@ -137,7 +148,8 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution {
canToggleVisibility: true, canToggleVisibility: true,
collapsed: this.showCollapsed(container), collapsed: this.showCollapsed(container),
treeView: this.instantiationService.createInstance(CustomTreeView, item.id, container), treeView: this.instantiationService.createInstance(CustomTreeView, item.id, container),
order: ExtensionIdentifier.equals(extension.description.identifier, container.extensionId) ? index + 1 : undefined order: ExtensionIdentifier.equals(extension.description.identifier, container.extensionId) ? index + 1 : undefined,
extensionId: extension.description.identifier
}; };
viewIds.push(viewDescriptor.id); viewIds.push(viewDescriptor.id);
...@@ -146,7 +158,16 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution { ...@@ -146,7 +158,16 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution {
ViewsRegistry.registerViews(viewDescriptors); ViewsRegistry.registerViews(viewDescriptors);
}); });
} }
}); }
private removeViews(extensions: IExtensionPointUser<ViewExtensionPointType>[]): void {
const removedExtensions: Set<string> = extensions.reduce((result, e) => { result.add(ExtensionIdentifier.toKey(e.description.identifier)); return result; }, new Set<string>());
for (const viewContainer of this.viewContainersRegistry.all) {
const removedViews = ViewsRegistry.getViews(viewContainer).filter((v: ICustomViewDescriptor) => v.extensionId && removedExtensions.has(ExtensionIdentifier.toKey(v.extensionId)));
if (removedViews.length) {
ViewsRegistry.deregisterViews(removedViews.map(v => v.id), viewContainer);
}
}
} }
private isValidViewDescriptors(viewDescriptors: IUserFriendlyViewDescriptor[], collector: ExtensionMessageCollector): boolean { private isValidViewDescriptors(viewDescriptors: IUserFriendlyViewDescriptor[], collector: ExtensionMessageCollector): boolean {
...@@ -173,7 +194,6 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution { ...@@ -173,7 +194,6 @@ class ViewsContainersExtensionHandler implements IWorkbenchContribution {
return true; return true;
} }
private getViewContainer(value: string): ViewContainer { private getViewContainer(value: string): ViewContainer {
switch (value) { switch (value) {
case 'explorer': return this.viewContainersRegistry.get(EXPLORER); case 'explorer': return this.viewContainersRegistry.get(EXPLORER);
......
...@@ -297,7 +297,7 @@ export interface IRevealOptions { ...@@ -297,7 +297,7 @@ export interface IRevealOptions {
export interface ICustomViewDescriptor extends IViewDescriptor { export interface ICustomViewDescriptor extends IViewDescriptor {
readonly treeView: ITreeView; readonly treeView: ITreeView;
readonly extensionId: ExtensionIdentifier;
} }
export type TreeViewItemHandleArg = { export type TreeViewItemHandleArg = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册