// TODO: this is a workaround. Factory has to be refactored so that all callers supply their own error reporters IWorkspaceProjectContext IWorkspaceProjectContextFactory.CreateProjectContext( string languageName, string projectDisplayName, string projectFilePath, Guid projectGuid, object hierarchy, string binOutputPath, ProjectExternalErrorReporter errorReporter) { // NOTE: It is acceptable for hierarchy to be null in Deferred Project Load scenarios. var vsHierarchy = hierarchy as IVsHierarchy; Func<ProjectId, IVsReportExternalErrors> getExternalErrorReporter = id => errorReporter; return new CPSProject(_visualStudioWorkspace.ProjectTracker, getExternalErrorReporter, projectDisplayName, projectFilePath, vsHierarchy, languageName, projectGuid, binOutputPath, _serviceProvider, _visualStudioWorkspace, _hostDiagnosticUpdateSource, commandLineParserServiceOpt: _visualStudioWorkspace.Services.GetLanguageServices(languageName)?.GetService<ICommandLineParserService>()); }
private IVsReportExternalErrors GetExternalErrorReporter(ProjectId projectId, string languageName) { lock (_externalErrorReporterMap) { IVsReportExternalErrors errorReporter; if (!_externalErrorReporterMap.TryGetValue(languageName, out errorReporter)) { string errorCodePrefix; if (!_projectLangaugeToErrorCodePrefixMap.TryGetValue(languageName, out errorCodePrefix)) { throw new NotSupportedException(nameof(languageName)); } errorReporter = new ProjectExternalErrorReporter(projectId, errorCodePrefix, _serviceProvider); _externalErrorReporterMap.Add(languageName, errorReporter); } return errorReporter; } }
private IVsReportExternalErrors GetExternalErrorReporter(ProjectId projectId, string languageName) { lock (_externalErrorReporterMap) { IVsReportExternalErrors errorReporter; if (!_externalErrorReporterMap.TryGetValue(languageName, out errorReporter)) { string errorCodePrefix; if (!_projectLangaugeToErrorCodePrefixMap.TryGetValue(languageName, out errorCodePrefix)) { Debug.Fail($"Unknown language '{languageName}'"); _projectLangaugeToErrorCodePrefixMap.Add(languageName, languageName); } errorReporter = new ProjectExternalErrorReporter(projectId, errorCodePrefix, _serviceProvider); _externalErrorReporterMap.Add(languageName, errorReporter); } return errorReporter; } }