Organize Issue Services better (#180432)

The issue services were due for a clean up. They now have this shape:

* `platform/issue` has the `IssueMainService`, the service running on the Main process that Desktop takes advantage of
* `workbench/contrib/issue` has the contributions and the registered commands
* `workbench/services/issue` has the services that the renderer side can use to launch the issue reporter.

After this, I will work on getting out the raw IPC calls in the IssueMainService.
This commit is contained in:
Tyler James Leonhardt
2023-04-20 11:45:16 -07:00
committed by GitHub
parent 233c88aede
commit b9e657dbf5
9 changed files with 28 additions and 38 deletions
+2 -1
View File
@@ -54,7 +54,8 @@ import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemPro
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
import { IIssueMainService, IssueMainService } from 'vs/platform/issue/electron-main/issueMainService';
import { IIssueMainService } from 'vs/platform/issue/common/issue';
import { IssueMainService } from 'vs/platform/issue/electron-main/issueMainService';
import { IKeyboardLayoutMainService, KeyboardLayoutMainService } from 'vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService';
import { ILaunchMainService, LaunchMainService } from 'vs/platform/launch/electron-main/launchMainService';
import { ILifecycleMainService, LifecycleMainPhase, ShutdownReason } from 'vs/platform/lifecycle/electron-main/lifecycleMainService';
+11 -7
View File
@@ -4,6 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { ISandboxConfiguration } from 'vs/base/parts/sandbox/common/sandboxTypes';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
// Since data sent through the service is serialized to JSON, functions will be lost, so Color objects
// should not be sent as their 'toString' method will be stripped. Instead convert to strings before sending.
@@ -95,13 +96,6 @@ export interface ProcessExplorerData extends WindowData {
applicationName: string;
}
export interface ICommonIssueService {
readonly _serviceBrand: undefined;
openReporter(data: IssueReporterData): Promise<void>;
openProcessExplorer(data: ProcessExplorerData): Promise<void>;
getSystemStatus(): Promise<string>;
}
export interface IssueReporterWindowConfiguration extends ISandboxConfiguration {
disableExtensions: boolean;
data: IssueReporterData;
@@ -115,3 +109,13 @@ export interface IssueReporterWindowConfiguration extends ISandboxConfiguration
export interface ProcessExplorerWindowConfiguration extends ISandboxConfiguration {
data: ProcessExplorerData;
}
export const IIssueMainService = createDecorator<IIssueMainService>('issueService');
export interface IIssueMainService {
readonly _serviceBrand: undefined;
stopTracing(): Promise<void>;
openReporter(data: IssueReporterData): Promise<void>;
openProcessExplorer(data: ProcessExplorerData): Promise<void>;
getSystemStatus(): Promise<string>;
}
@@ -15,8 +15,7 @@ import { IDiagnosticsService, isRemoteDiagnosticError, PerformanceInfo } from 'v
import { IDiagnosticsMainService } from 'vs/platform/diagnostics/electron-main/diagnosticsMainService';
import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogMainService';
import { IEnvironmentMainService } from 'vs/platform/environment/electron-main/environmentMainService';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { ICommonIssueService, IssueReporterData, IssueReporterWindowConfiguration, ProcessExplorerData, ProcessExplorerWindowConfiguration } from 'vs/platform/issue/common/issue';
import { IIssueMainService, IssueReporterData, IssueReporterWindowConfiguration, ProcessExplorerData, ProcessExplorerWindowConfiguration } from 'vs/platform/issue/common/issue';
import { ILogService } from 'vs/platform/log/common/log';
import { INativeHostMainService } from 'vs/platform/native/electron-main/nativeHostMainService';
import product from 'vs/platform/product/common/product';
@@ -33,7 +32,6 @@ import { URI } from 'vs/base/common/uri';
import { IWindowsMainService } from 'vs/platform/windows/electron-main/windows';
import { Promises, timeout } from 'vs/base/common/async';
export const IIssueMainService = createDecorator<IIssueMainService>('issueMainService');
const processExplorerWindowState = 'issue.processExplorerWindowState';
interface IBrowserWindowOptions {
@@ -45,10 +43,6 @@ interface IBrowserWindowOptions {
type IStrictWindowState = Required<Pick<IWindowState, 'x' | 'y' | 'width' | 'height'>>;
export interface IIssueMainService extends ICommonIssueService {
stopTracing(): Promise<void>;
}
export class IssueMainService implements IIssueMainService {
declare readonly _serviceBrand: undefined;
@@ -10,7 +10,7 @@ import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle
import { IProductService } from 'vs/platform/product/common/productService';
import { Registry } from 'vs/platform/registry/common/platform';
import { Extensions, IWorkbenchContributionsRegistry } from 'vs/workbench/common/contributions';
import { WebIssueService } from 'vs/workbench/contrib/issue/browser/issueService';
import { WebIssueService } from 'vs/workbench/services/issue/browser/issueService';
import { IWorkbenchIssueService } from 'vs/workbench/services/issue/common/issue';
import { BaseIssueContribution } from 'vs/workbench/contrib/issue/common/issue.contribution';
@@ -5,11 +5,8 @@
import { localize } from 'vs/nls';
import { MenuRegistry, MenuId, registerAction2, Action2 } from 'vs/platform/actions/common/actions';
import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions';
import { IWorkbenchIssueService } from 'vs/workbench/services/issue/common/issue';
import { NativeIssueService } from 'vs/workbench/services/issue/electron-sandbox/issueService';
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
import { IIssueService } from 'vs/platform/issue/electron-sandbox/issue';
import { BaseIssueContribution } from 'vs/workbench/contrib/issue/common/issue.contribution';
import { IProductService } from 'vs/platform/product/common/productService';
import { Registry } from 'vs/platform/registry/common/platform';
@@ -21,12 +18,10 @@ import { INativeEnvironmentService } from 'vs/platform/environment/common/enviro
import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
import { INativeHostService } from 'vs/platform/native/common/native';
import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress';
import { IssueType } from 'vs/platform/issue/common/issue';
import { IIssueMainService, IssueType } from 'vs/platform/issue/common/issue';
//#region Issue Contribution
registerSingleton(IWorkbenchIssueService, NativeIssueService, InstantiationType.Delayed);
class NativeIssueContribution extends BaseIssueContribution {
constructor(
@@ -108,7 +103,7 @@ class StopTracing extends Action2 {
}
override async run(accessor: ServicesAccessor): Promise<void> {
const issueService = accessor.get(IIssueService);
const issueService = accessor.get(IIssueMainService);
const environmentService = accessor.get(INativeEnvironmentService);
const dialogService = accessor.get(IDialogService);
const nativeHostService = accessor.get(INativeHostService);
@@ -136,7 +131,7 @@ class StopTracing extends Action2 {
registerAction2(StopTracing);
CommandsRegistry.registerCommand('_issues.getSystemStatus', (accessor) => {
return accessor.get(IIssueService).getSystemStatus();
return accessor.get(IIssueMainService).getSystemStatus();
});
//#endregion
@@ -3,11 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { ICommonIssueService } from 'vs/platform/issue/common/issue';
import { registerMainProcessRemoteService } from 'vs/platform/ipc/electron-sandbox/services';
import { IIssueMainService } from 'vs/platform/issue/common/issue';
export const IIssueService = createDecorator<IIssueService>('issueService');
export interface IIssueService extends ICommonIssueService {
stopTracing(): Promise<void>;
}
registerMainProcessRemoteService(IIssueMainService, 'issue');
@@ -3,8 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IssueReporterStyles, IssueReporterData, ProcessExplorerData, IssueReporterExtensionData } from 'vs/platform/issue/common/issue';
import { IIssueService } from 'vs/platform/issue/electron-sandbox/issue';
import { IssueReporterStyles, IssueReporterData, ProcessExplorerData, IssueReporterExtensionData, IIssueMainService } from 'vs/platform/issue/common/issue';
import { IColorTheme, IThemeService } from 'vs/platform/theme/common/themeService';
import { textLinkForeground, inputBackground, inputBorder, inputForeground, buttonBackground, buttonHoverBackground, buttonForeground, inputValidationErrorBorder, foreground, inputActiveOptionBorder, scrollbarSliderActiveBackground, scrollbarSliderBackground, scrollbarSliderHoverBackground, editorBackground, editorForeground, listHoverBackground, listHoverForeground, textLinkActiveForeground, inputValidationErrorBackground, inputValidationErrorForeground, listActiveSelectionBackground, listActiveSelectionForeground, listFocusOutline, listFocusBackground, listFocusForeground, activeContrastBorder, scrollbarShadow } from 'vs/platform/theme/common/colorRegistry';
import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
@@ -18,13 +17,13 @@ import { platform } from 'vs/base/common/process';
import { IProductService } from 'vs/platform/product/common/productService';
import { IWorkbenchAssignmentService } from 'vs/workbench/services/assignment/common/assignmentService';
import { IAuthenticationService } from 'vs/workbench/services/authentication/common/authentication';
import { registerMainProcessRemoteService } from 'vs/platform/ipc/electron-sandbox/services';
import { IWorkspaceTrustManagementService } from 'vs/platform/workspace/common/workspaceTrust';
import { IIntegrityService } from 'vs/workbench/services/integrity/common/integrity';
import { ipcRenderer, process } from 'vs/base/parts/sandbox/electron-sandbox/globals';
import { IDisposable } from 'vs/base/common/lifecycle';
import { CancellationToken } from 'vs/base/common/cancellation';
import { URI } from 'vs/base/common/uri';
import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions';
export class NativeIssueService implements IWorkbenchIssueService {
declare readonly _serviceBrand: undefined;
@@ -32,7 +31,7 @@ export class NativeIssueService implements IWorkbenchIssueService {
private readonly _handlers = new Map<string, IIssueUriRequestHandler>();
constructor(
@IIssueService private readonly issueService: IIssueService,
@IIssueMainService private readonly issueMainService: IIssueMainService,
@IThemeService private readonly themeService: IThemeService,
@IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService,
@IWorkbenchExtensionEnablementService private readonly extensionEnablementService: IWorkbenchExtensionEnablementService,
@@ -115,7 +114,7 @@ export class NativeIssueService implements IWorkbenchIssueService {
githubAccessToken,
isSandboxed: process.sandboxed
}, dataOverrides);
return this.issueService.openReporter(issueReporterData);
return this.issueMainService.openReporter(issueReporterData);
}
openProcessExplorer(): Promise<void> {
@@ -142,7 +141,7 @@ export class NativeIssueService implements IWorkbenchIssueService {
platform: platform,
applicationName: this.productService.applicationName
};
return this.issueService.openProcessExplorer(data);
return this.issueMainService.openProcessExplorer(data);
}
registerIssueUriRequestHandler(extensionId: string, handler: IIssueUriRequestHandler): IDisposable {
@@ -188,4 +187,4 @@ function getColor(theme: IColorTheme, key: string): string | undefined {
return color ? color.toString() : undefined;
}
registerMainProcessRemoteService(IIssueService, 'issue');
registerSingleton(IWorkbenchIssueService, NativeIssueService, InstantiationType.Delayed);
@@ -38,6 +38,7 @@ import 'vs/workbench/services/textfile/electron-sandbox/nativeTextFileService';
import 'vs/workbench/services/dialogs/electron-sandbox/fileDialogService';
import 'vs/workbench/services/workspaces/electron-sandbox/workspacesService';
import 'vs/workbench/services/menubar/electron-sandbox/menubarService';
import 'vs/workbench/services/issue/electron-sandbox/issueMainService';
import 'vs/workbench/services/issue/electron-sandbox/issueService';
import 'vs/workbench/services/update/electron-sandbox/updateService';
import 'vs/workbench/services/url/electron-sandbox/urlService';