diff --git a/extensions/data-workspace/src/common/constants.ts b/extensions/data-workspace/src/common/constants.ts index 8f8b355b23..754f370cb7 100644 --- a/extensions/data-workspace/src/common/constants.ts +++ b/extensions/data-workspace/src/common/constants.ts @@ -20,6 +20,7 @@ export const EnterWorkspaceConfirmation = localize('dataworkspace.enterWorkspace export const WorkspaceContainsNotAddedProjects = localize('dataworkspace.workspaceContainsNotAddedProjects', "The current workspace contains one or more projects that have not been added to the workspace. Use the 'Open existing' dialog to add projects to the projects pane."); export const LaunchOpenExisitingDialog = localize('dataworkspace.launchOpenExistingDialog', "Launch Open existing dialog"); export const DoNotShowAgain = localize('dataworkspace.doNotShowAgain', "Do not show again"); +export const ProjectsFailedToLoad = localize('dataworkspace.projectsFailedToLoad', "Some projects failed to load. Please open console for more information"); // config settings export const projectsConfigurationKey = 'projects'; diff --git a/extensions/data-workspace/src/common/workspaceTreeDataProvider.ts b/extensions/data-workspace/src/common/workspaceTreeDataProvider.ts index ab9ee1dad9..ef43adbc6d 100644 --- a/extensions/data-workspace/src/common/workspaceTreeDataProvider.ts +++ b/extensions/data-workspace/src/common/workspaceTreeDataProvider.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode'; import * as path from 'path'; import { IWorkspaceService } from './interfaces'; -import { UnknownProjectsError } from './constants'; +import { ProjectsFailedToLoad, UnknownProjectsError } from './constants'; import { WorkspaceTreeItem } from 'dataworkspace'; import { TelemetryReporter } from './telemetry'; @@ -45,28 +45,38 @@ export class WorkspaceTreeDataProvider implements vscode.TreeDataProvider = {}; + let errorCount = 0; for (const project of projects) { - const projectProvider = await this._workspaceService.getProjectProvider(project); + try { + const projectProvider = await this._workspaceService.getProjectProvider(project); - this.incrementProjectTypeMetric(typeMetric, project); + this.incrementProjectTypeMetric(typeMetric, project); - if (projectProvider === undefined) { - unknownProjects.push(project.path); - continue; - } - const treeDataProvider = await projectProvider.getProjectTreeDataProvider(project); - if (treeDataProvider.onDidChangeTreeData) { - treeDataProvider.onDidChangeTreeData((e: any) => { - this._onDidChangeTreeData?.fire(e); + if (projectProvider === undefined) { + unknownProjects.push(project.path); + continue; + } + const treeDataProvider = await projectProvider.getProjectTreeDataProvider(project); + if (treeDataProvider.onDidChangeTreeData) { + treeDataProvider.onDidChangeTreeData((e: any) => { + this._onDidChangeTreeData?.fire(e); + }); + } + const children = await treeDataProvider.getChildren(element); + children?.forEach(child => { + treeItems.push({ + treeDataProvider: treeDataProvider, + element: child + }); }); + } catch (e) { + errorCount++; + console.error(e.message); } - const children = await treeDataProvider.getChildren(element); - children?.forEach(child => { - treeItems.push({ - treeDataProvider: treeDataProvider, - element: child - }); - }); + } + + if (errorCount > 0) { + vscode.window.showErrorMessage(ProjectsFailedToLoad); } TelemetryReporter.sendMetricsEvent(typeMetric, 'OpenWorkspaceProjectTypes');