Skip to content

Commit c93c6b2

Browse files
committed
perf - simplify registering workbench contributions
1 parent 3969ef5 commit c93c6b2

File tree

55 files changed

+158
-215
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+158
-215
lines changed

src/vs/workbench/api/browser/extensionHost.contribution.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { IWorkbenchContribution, IWorkbenchContributionsRegistry, WorkbenchContributionInstantiation, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
7-
import { Registry } from 'vs/platform/registry/common/platform';
6+
import { IWorkbenchContribution, WorkbenchContributionInstantiation, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions';
87
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
98

109
// --- other interested parties
@@ -107,4 +106,4 @@ export class ExtensionPoints implements IWorkbenchContribution {
107106
}
108107
}
109108

110-
Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).registerWorkbenchContribution2(ExtensionPoints.ID, ExtensionPoints, WorkbenchContributionInstantiation.BlockStartup);
109+
registerWorkbenchContribution2(ExtensionPoints.ID, ExtensionPoints, WorkbenchContributionInstantiation.BlockStartup);

src/vs/workbench/api/browser/viewsExtensionPoint.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { ThemeIcon } from 'vs/base/common/themables';
1717
import { Extensions as ViewletExtensions, PaneCompositeRegistry } from 'vs/workbench/browser/panecomposite';
1818
import { CustomTreeView, RawCustomTreeViewContextKey, TreeViewPane } from 'vs/workbench/browser/parts/views/treeView';
1919
import { ViewPaneContainer } from 'vs/workbench/browser/parts/views/viewPaneContainer';
20-
import { Extensions as WorkbenchExtensions, IWorkbenchContribution, IWorkbenchContributionsRegistry, WorkbenchContributionInstantiation } from 'vs/workbench/common/contributions';
20+
import { IWorkbenchContribution, WorkbenchContributionInstantiation, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions';
2121
import { Extensions as ViewContainerExtensions, ICustomViewDescriptor, IViewContainersRegistry, IViewDescriptor, IViewsRegistry, ResolvableTreeItem, ViewContainer, ViewContainerLocation } from 'vs/workbench/common/views';
2222
import { VIEWLET_ID as DEBUG } from 'vs/workbench/contrib/debug/common/debug';
2323
import { VIEWLET_ID as EXPLORER } from 'vs/workbench/contrib/files/common/files';
@@ -666,5 +666,4 @@ class ViewsExtensionHandler implements IWorkbenchContribution {
666666
}
667667
}
668668

669-
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
670-
workbenchRegistry.registerWorkbenchContribution2(ViewsExtensionHandler.ID, ViewsExtensionHandler, WorkbenchContributionInstantiation.BlockStartup);
669+
registerWorkbenchContribution2(ViewsExtensionHandler.ID, ViewsExtensionHandler, WorkbenchContributionInstantiation.BlockStartup);

src/vs/workbench/browser/actions/textInputActions.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/la
99
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
1010
import { Disposable } from 'vs/base/common/lifecycle';
1111
import { EventHelper, addDisposableListener, getActiveDocument, getWindow } from 'vs/base/browser/dom';
12-
import { IWorkbenchContribution, IWorkbenchContributionsRegistry, WorkbenchContributionInstantiation, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
13-
import { Registry } from 'vs/platform/registry/common/platform';
12+
import { IWorkbenchContribution, WorkbenchContributionInstantiation, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions';
1413
import { isNative } from 'vs/base/common/platform';
1514
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
1615
import { StandardMouseEvent } from 'vs/base/browser/mouseEvent';
@@ -106,4 +105,4 @@ export class TextInputActionsProvider extends Disposable implements IWorkbenchCo
106105
}
107106
}
108107

109-
Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).registerWorkbenchContribution2(TextInputActionsProvider.ID, TextInputActionsProvider, WorkbenchContributionInstantiation.BlockRestore);
108+
registerWorkbenchContribution2(TextInputActionsProvider.ID, TextInputActionsProvider, WorkbenchContributionInstantiation.BlockRestore);

src/vs/workbench/browser/actions/widgetNavigationCommands.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ import { KeybindingWeight, KeybindingsRegistry } from 'vs/platform/keybinding/co
99
import { WorkbenchListFocusContextKey, WorkbenchListScrollAtBottomContextKey, WorkbenchListScrollAtTopContextKey } from 'vs/platform/list/browser/listService';
1010
import { Event } from 'vs/base/common/event';
1111
import { combinedDisposable, toDisposable, IDisposable, Disposable } from 'vs/base/common/lifecycle';
12-
import { Registry } from 'vs/platform/registry/common/platform';
13-
import { IWorkbenchContributionsRegistry, WorkbenchContributionInstantiation, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
12+
import { WorkbenchContributionInstantiation, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions';
1413

1514
/** INavigableContainer represents a logical container composed of widgets that can
1615
be navigated back and forth with key shortcuts */
@@ -113,8 +112,7 @@ export function registerNavigableContainer(container: INavigableContainer): IDis
113112
return NavigableContainerManager.register(container);
114113
}
115114

116-
Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench)
117-
.registerWorkbenchContribution2(NavigableContainerManager.ID, NavigableContainerManager, WorkbenchContributionInstantiation.BlockStartup);
115+
registerWorkbenchContribution2(NavigableContainerManager.ID, NavigableContainerManager, WorkbenchContributionInstantiation.BlockStartup);
118116

119117
KeybindingsRegistry.registerCommandAndKeybindingRule({
120118
id: 'widgetNavigation.focusPrevious',

src/vs/workbench/browser/parts/dialogs/dialog.web.contribution.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
99
import { ILayoutService } from 'vs/platform/layout/browser/layoutService';
1010
import { ILogService } from 'vs/platform/log/common/log';
1111
import { IProductService } from 'vs/platform/product/common/productService';
12-
import { Registry } from 'vs/platform/registry/common/platform';
13-
import { IWorkbenchContribution, IWorkbenchContributionsRegistry, WorkbenchContributionInstantiation, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
12+
import { IWorkbenchContribution, WorkbenchContributionInstantiation, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions';
1413
import { IDialogsModel, IDialogViewItem } from 'vs/workbench/common/dialogs';
1514
import { BrowserDialogHandler } from 'vs/workbench/browser/parts/dialogs/dialogHandler';
1615
import { DialogService } from 'vs/workbench/services/dialogs/common/dialogService';
@@ -78,5 +77,4 @@ export class DialogHandlerContribution extends Disposable implements IWorkbenchC
7877
}
7978
}
8079

81-
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
82-
workbenchRegistry.registerWorkbenchContribution2(DialogHandlerContribution.ID, DialogHandlerContribution, WorkbenchContributionInstantiation.BlockStartup);
80+
registerWorkbenchContribution2(DialogHandlerContribution.ID, DialogHandlerContribution, WorkbenchContributionInstantiation.BlockStartup);

src/vs/workbench/browser/parts/editor/editor.contribution.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ import { ContextKeyExpr, ContextKeyExpression } from 'vs/platform/contextkey/com
5959
import { isMacintosh } from 'vs/base/common/platform';
6060
import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions';
6161
import { FloatingEditorClickMenu } from 'vs/workbench/browser/codeeditor';
62-
import { Extensions as WorkbenchExtensions, IWorkbenchContributionsRegistry, WorkbenchContributionInstantiation } from 'vs/workbench/common/contributions';
62+
import { WorkbenchContributionInstantiation, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions';
6363
import { EditorAutoSave } from 'vs/workbench/browser/parts/editor/editorAutoSave';
6464
import { IQuickAccessRegistry, Extensions as QuickAccessExtensions } from 'vs/platform/quickinput/common/quickAccess';
6565
import { ActiveGroupEditorsByMostRecentlyUsedQuickAccess, AllEditorsByAppearanceQuickAccess, AllEditorsByMostRecentlyUsedQuickAccess } from 'vs/workbench/browser/parts/editor/editorQuickAccess';
@@ -127,10 +127,10 @@ Registry.as<IEditorFactoryRegistry>(EditorExtensions.EditorFactory).registerEdit
127127

128128
//#region Workbench Contributions
129129

130-
Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).registerWorkbenchContribution2(EditorAutoSave.ID, EditorAutoSave, WorkbenchContributionInstantiation.BlockRestore);
131-
Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).registerWorkbenchContribution2(EditorStatusContribution.ID, EditorStatusContribution, WorkbenchContributionInstantiation.BlockRestore);
132-
Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).registerWorkbenchContribution2(UntitledTextEditorWorkingCopyEditorHandler.ID, UntitledTextEditorWorkingCopyEditorHandler, WorkbenchContributionInstantiation.BlockRestore);
133-
Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).registerWorkbenchContribution2(DynamicEditorConfigurations.ID, DynamicEditorConfigurations, WorkbenchContributionInstantiation.BlockRestore);
130+
registerWorkbenchContribution2(EditorAutoSave.ID, EditorAutoSave, WorkbenchContributionInstantiation.BlockRestore);
131+
registerWorkbenchContribution2(EditorStatusContribution.ID, EditorStatusContribution, WorkbenchContributionInstantiation.BlockRestore);
132+
registerWorkbenchContribution2(UntitledTextEditorWorkingCopyEditorHandler.ID, UntitledTextEditorWorkingCopyEditorHandler, WorkbenchContributionInstantiation.BlockRestore);
133+
registerWorkbenchContribution2(DynamicEditorConfigurations.ID, DynamicEditorConfigurations, WorkbenchContributionInstantiation.BlockRestore);
134134

135135
registerEditorContribution(FloatingEditorClickMenu.ID, FloatingEditorClickMenu, EditorContributionInstantiation.AfterFirstRender);
136136
//#endregion

src/vs/workbench/browser/workbench.contribution.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { IConfigurationRegistry, Extensions as ConfigurationExtensions, Configur
99
import { isMacintosh, isWindows, isLinux, isWeb, isNative } from 'vs/base/common/platform';
1010
import { ConfigurationMigrationWorkbenchContribution, DynamicWorkbenchConfigurationWorkbenchContribution, IConfigurationMigrationRegistry, workbenchConfigurationNodeBase, Extensions, ConfigurationKeyValuePairs, problemsConfigurationNodeBase } from 'vs/workbench/common/configuration';
1111
import { isStandalone } from 'vs/base/browser/browser';
12-
import { IWorkbenchContributionsRegistry, WorkbenchContributionInstantiation, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
12+
import { IWorkbenchContributionsRegistry, WorkbenchContributionInstantiation, Extensions as WorkbenchExtensions, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions';
1313
import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle';
1414
import { ActivityBarPosition, EditorActionsLocation, EditorTabsMode, LayoutSettings } from 'vs/workbench/services/layout/browser/layoutService';
1515

@@ -22,7 +22,7 @@ const registry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Con
2222
Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).registerWorkbenchContribution(ConfigurationMigrationWorkbenchContribution, LifecyclePhase.Eventually);
2323

2424
// Dynamic Configuration
25-
Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).registerWorkbenchContribution2(DynamicWorkbenchConfigurationWorkbenchContribution.ID, DynamicWorkbenchConfigurationWorkbenchContribution, WorkbenchContributionInstantiation.BlockRestore);
25+
registerWorkbenchContribution2(DynamicWorkbenchConfigurationWorkbenchContribution.ID, DynamicWorkbenchConfigurationWorkbenchContribution, WorkbenchContributionInstantiation.BlockRestore);
2626

2727
// Workbench
2828
registry.registerConfiguration({

src/vs/workbench/common/contributions.ts

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -96,22 +96,6 @@ export interface IWorkbenchContributionsRegistry {
9696
*/
9797
registerWorkbenchContribution<Services extends BrandedService[]>(contribution: IWorkbenchContributionSignature<Services>, phase: LifecyclePhase.Restored | LifecyclePhase.Eventually): void;
9898

99-
/**
100-
* Register a workbench contribution that will be instantiated
101-
* based on the `instantiation` property.
102-
*/
103-
registerWorkbenchContribution2<Services extends BrandedService[]>(id: string, ctor: IWorkbenchContributionSignature<Services>, instantiation: WorkbenchContributionInstantiation): void;
104-
105-
/**
106-
* Provides access to a workbench contribution with a specific identifier.
107-
* The contribution is created if not yet done.
108-
*
109-
* Note: will throw an error if
110-
* - called too early before the registry has started
111-
* - no contribution is known for the given identifier
112-
*/
113-
getWorkbenchContribution<T extends IWorkbenchContribution>(id: string): T;
114-
11599
/**
116100
* Starts the registry by providing the required services.
117101
*/
@@ -137,6 +121,8 @@ interface IWorkbenchContributionRegistration {
137121

138122
export class WorkbenchContributionsRegistry implements IWorkbenchContributionsRegistry {
139123

124+
static readonly INSTANCE = new WorkbenchContributionsRegistry();
125+
140126
private static readonly BLOCK_BEFORE_RESTORE_WARN_THRESHOLD = 20;
141127
private static readonly BLOCK_AFTER_RESTORE_WARN_THRESHOLD = 100;
142128

@@ -368,4 +354,20 @@ export class WorkbenchContributionsRegistry implements IWorkbenchContributionsRe
368354
}
369355
}
370356

371-
Registry.add(Extensions.Workbench, new WorkbenchContributionsRegistry());
357+
/**
358+
* Register a workbench contribution that will be instantiated
359+
* based on the `instantiation` property.
360+
*/
361+
export const registerWorkbenchContribution2 = WorkbenchContributionsRegistry.INSTANCE.registerWorkbenchContribution2.bind(WorkbenchContributionsRegistry.INSTANCE) as { <Services extends BrandedService[]>(id: string, ctor: IWorkbenchContributionSignature<Services>, instantiation: WorkbenchContributionInstantiation): void };
362+
363+
/**
364+
* Provides access to a workbench contribution with a specific identifier.
365+
* The contribution is created if not yet done.
366+
*
367+
* Note: will throw an error if
368+
* - called too early before the registry has started
369+
* - no contribution is known for the given identifier
370+
*/
371+
export const getWorkbenchContribution = WorkbenchContributionsRegistry.INSTANCE.getWorkbenchContribution.bind(WorkbenchContributionsRegistry.INSTANCE);
372+
373+
Registry.add(Extensions.Workbench, WorkbenchContributionsRegistry.INSTANCE);

src/vs/workbench/contrib/accessibility/browser/accessibility.contribution.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions';
77
import { DynamicSpeechAccessibilityConfiguration, registerAccessibilityConfiguration } from 'vs/workbench/contrib/accessibility/browser/accessibilityConfiguration';
8-
import { IWorkbenchContributionsRegistry, WorkbenchContributionInstantiation, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
8+
import { IWorkbenchContributionsRegistry, WorkbenchContributionInstantiation, Extensions as WorkbenchExtensions, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions';
99
import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle';
1010
import { Registry } from 'vs/platform/registry/common/platform';
1111
import { IAccessibleViewService, AccessibleViewService } from 'vs/workbench/contrib/accessibility/browser/accessibleView';
@@ -24,10 +24,10 @@ workbenchRegistry.registerWorkbenchContribution(EditorAccessibilityHelpContribut
2424
workbenchRegistry.registerWorkbenchContribution(CommentsAccessibilityHelpContribution, LifecyclePhase.Eventually);
2525
workbenchRegistry.registerWorkbenchContribution(UnfocusedViewDimmingContribution, LifecyclePhase.Restored);
2626

27-
const workbenchContributionsRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
28-
workbenchContributionsRegistry.registerWorkbenchContribution(HoverAccessibleViewContribution, LifecyclePhase.Eventually);
29-
workbenchContributionsRegistry.registerWorkbenchContribution(NotificationAccessibleViewContribution, LifecyclePhase.Eventually);
30-
workbenchContributionsRegistry.registerWorkbenchContribution(InlineCompletionsAccessibleViewContribution, LifecyclePhase.Eventually);
31-
workbenchContributionsRegistry.registerWorkbenchContribution2(AccessibilityStatus.ID, AccessibilityStatus, WorkbenchContributionInstantiation.BlockRestore);
32-
workbenchContributionsRegistry.registerWorkbenchContribution2(SaveAudioCueContribution.ID, SaveAudioCueContribution, WorkbenchContributionInstantiation.BlockRestore);
33-
workbenchContributionsRegistry.registerWorkbenchContribution2(DynamicSpeechAccessibilityConfiguration.ID, DynamicSpeechAccessibilityConfiguration, WorkbenchContributionInstantiation.BlockRestore);
27+
workbenchRegistry.registerWorkbenchContribution(HoverAccessibleViewContribution, LifecyclePhase.Eventually);
28+
workbenchRegistry.registerWorkbenchContribution(NotificationAccessibleViewContribution, LifecyclePhase.Eventually);
29+
workbenchRegistry.registerWorkbenchContribution(InlineCompletionsAccessibleViewContribution, LifecyclePhase.Eventually);
30+
31+
registerWorkbenchContribution2(AccessibilityStatus.ID, AccessibilityStatus, WorkbenchContributionInstantiation.BlockRestore);
32+
registerWorkbenchContribution2(SaveAudioCueContribution.ID, SaveAudioCueContribution, WorkbenchContributionInstantiation.BlockRestore);
33+
registerWorkbenchContribution2(DynamicSpeechAccessibilityConfiguration.ID, DynamicSpeechAccessibilityConfiguration, WorkbenchContributionInstantiation.BlockRestore);

src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEdit.contribution.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { Registry } from 'vs/platform/registry/common/platform';
7-
import { Extensions as WorkbenchExtensions, IWorkbenchContributionsRegistry, WorkbenchContributionInstantiation } from 'vs/workbench/common/contributions';
7+
import { WorkbenchContributionInstantiation, registerWorkbenchContribution2 } from 'vs/workbench/common/contributions';
88
import { IBulkEditService, ResourceEdit } from 'vs/editor/browser/services/bulkEditService';
99
import { BulkEditPane } from 'vs/workbench/contrib/bulkEdit/browser/preview/bulkEditPane';
1010
import { IViewContainersRegistry, Extensions as ViewContainerExtensions, ViewContainerLocation, IViewsRegistry } from 'vs/workbench/common/views';
@@ -320,7 +320,7 @@ registerAction2(class ToggleGrouping extends Action2 {
320320
}
321321
});
322322

323-
Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).registerWorkbenchContribution2(
323+
registerWorkbenchContribution2(
324324
BulkEditPreviewContribution.ID, BulkEditPreviewContribution, WorkbenchContributionInstantiation.BlockRestore
325325
);
326326

0 commit comments

Comments
 (0)