diff --git a/src/EditorFeatures/Core/Implementation/Workspaces/EditorErrorReportingService.cs b/src/EditorFeatures/Core/Implementation/Workspaces/EditorErrorReportingService.cs index 2f48c5ef2a7c454c396baf0288cebac69447433a..2df3079d50199678a3da8ecec7d7b792469776cc 100644 --- a/src/EditorFeatures/Core/Implementation/Workspaces/EditorErrorReportingService.cs +++ b/src/EditorFeatures/Core/Implementation/Workspaces/EditorErrorReportingService.cs @@ -13,7 +13,7 @@ internal class EditorErrorReportingService : IErrorReportingService public void ShowErrorInfoForCodeFix(string codefixName, Action OnEnableClicked, Action OnEnableAndIgnoreClicked) { var message = LogMessage.Create($"{codefixName} crashed"); - Logger.Log(FunctionId.CodeFixe_Crash, message); + Logger.Log(FunctionId.Extension_Excpetion, message); } } } diff --git a/src/EditorFeatures/Test/CodeFixes/CodeFixServiceTests.cs b/src/EditorFeatures/Test/CodeFixes/CodeFixServiceTests.cs index a99798c4c7cf84e81c149ea3f5cf5a0f73ecd343..eae90af7206c111d0b68e9d03350cb6f72658f63 100644 --- a/src/EditorFeatures/Test/CodeFixes/CodeFixServiceTests.cs +++ b/src/EditorFeatures/Test/CodeFixes/CodeFixServiceTests.cs @@ -34,8 +34,9 @@ public void TestGetFirstDiagnosticWithFixAsync() "; using (var workspace = CSharpWorkspaceFactory.CreateWorkspaceFromFile(code)) { + var logger = SpecializedCollections.SingletonEnumerable(new Lazy(() => workspace.Services.GetService())); var fixService = new CodeFixService( - diagnosticService, workspace.Services.GetService(), fixers, SpecializedCollections.EmptyEnumerable>()); + diagnosticService, logger, fixers, SpecializedCollections.EmptyEnumerable>()); var incrementalAnalzyer = (IIncrementalAnalyzerProvider)diagnosticService; @@ -147,9 +148,10 @@ private static TestWorkspace ServiceSetup(CodeFixProvider codefix, out TestDiagn new CodeChangeProviderMetadata("Test", languages: LanguageNames.CSharp))); var code = @"class Program { }"; var workspace = CSharpWorkspaceFactory.CreateWorkspaceFromFile(code); - errorLogger = new TestErrorLogger(); + var logger = SpecializedCollections.SingletonEnumerable(new Lazy(() => new TestErrorLogger())); + errorLogger = logger.First().Value; fixService = new CodeFixService( - diagnosticService, errorLogger, fixers, SpecializedCollections.EmptyEnumerable>()); + diagnosticService, logger, fixers, SpecializedCollections.EmptyEnumerable>()); return workspace; } diff --git a/src/Features/Core/CodeFixes/CodeFixService.cs b/src/Features/Core/CodeFixes/CodeFixService.cs index 7d3f93ddbe1204bef27a00f2655dc40d8d089ad7..218300497c0f82df3afa1ad269a5a278761709ed 100644 --- a/src/Features/Core/CodeFixes/CodeFixService.cs +++ b/src/Features/Core/CodeFixes/CodeFixService.cs @@ -40,18 +40,18 @@ internal partial class CodeFixService : ICodeFixService private readonly ConditionalWeakTable.CreateValueCallback _createProjectCodeFixProvider; private readonly ImmutableDictionary> _suppressionProvidersMap; - private readonly IErrorLoggerService _errorLogger; + private readonly IEnumerable> _errorLoggers; private ImmutableDictionary _fixAllProviderMap; [ImportingConstructor] public CodeFixService( IDiagnosticAnalyzerService service, - IErrorLoggerService logger, + [ImportMany]IEnumerable> loggers, [ImportMany]IEnumerable> fixers, [ImportMany]IEnumerable> suppressionProviders) { - _errorLogger = logger; + _errorLoggers = loggers; _diagnosticService = service; var fixersPerLanguageMap = fixers.ToPerLanguageMapWithMultipleLanguages(); var suppressionProvidersPerLanguageMap = suppressionProviders.ToPerLanguageMapWithMultipleLanguages(); @@ -416,7 +416,10 @@ private ImmutableArray GetFixableDiagnosticIds(CodeFixProvider fix } catch (Exception e) { - _errorLogger?.LogError(fixer.GetType().Name, e.Message + Environment.NewLine + e.StackTrace); + foreach (var logger in _errorLoggers) + { + logger.Value.LogError(fixer.GetType().Name, e.Message + Environment.NewLine + e.StackTrace); + } return ImmutableArray.Empty; } } diff --git a/src/VisualStudio/Core/Def/Implementation/Log/VisualStudioErrorLogger.cs b/src/VisualStudio/Core/Def/Implementation/Log/VisualStudioErrorLogger.cs index d1fc40d3ce0bdc459ba2654cbb720efdc917376b..a7ef4beaf804df24587dc35f17b8a0e3b3767057 100644 --- a/src/VisualStudio/Core/Def/Implementation/Log/VisualStudioErrorLogger.cs +++ b/src/VisualStudio/Core/Def/Implementation/Log/VisualStudioErrorLogger.cs @@ -22,6 +22,5 @@ public bool TryLogError(string source, string message) { return ActivityLog.TryLogError(source, message); } - } } diff --git a/src/Workspaces/Core/Portable/Log/FunctionId.cs b/src/Workspaces/Core/Portable/Log/FunctionId.cs index fd3b0fe25542278260054593d2aa5729cd85b837..d598e1c99ccf538c03fe36b677c240a9193bc588 100644 --- a/src/Workspaces/Core/Portable/Log/FunctionId.cs +++ b/src/Workspaces/Core/Portable/Log/FunctionId.cs @@ -299,6 +299,6 @@ internal enum FunctionId SuggestedActions_GetSuggestedActions, AnalyzerDependencyCheckingService_CheckForConflictsAsync, VirtualMemory_MemoryLow, - CodeFixe_Crash, + Extension_Excpetion, } } diff --git a/src/Workspaces/Core/Portable/Log/WorkspaceErrorLogger.cs b/src/Workspaces/Core/Portable/Log/WorkspaceErrorLogger.cs new file mode 100644 index 0000000000000000000000000000000000000000..9bcdc00c9c47a0f64a67b66c0f90e880182a6a86 --- /dev/null +++ b/src/Workspaces/Core/Portable/Log/WorkspaceErrorLogger.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Composition; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.ErrorLogger; +using Microsoft.CodeAnalysis.Host.Mef; +using Microsoft.CodeAnalysis.Internal.Log; + +namespace Microsoft.CodeAnalysis.ErrorLogger +{ + [ExportWorkspaceService(typeof(IErrorLoggerService)), Export(typeof(IErrorLoggerService)), Shared] + class WorkspaceErrorLogger : IErrorLoggerService + { + public void LogError(string source, string message) + { + Logger.GetLogger()?.Log(FunctionId.Extension_Excpetion, LogMessage.Create(source + " : " + message)); + } + + public bool TryLogError(string source, string message) + { + var logger = Logger.GetLogger(); + if (logger != null) + { + logger.Log(FunctionId.Extension_Excpetion, LogMessage.Create(source + " : " + message)); + return true; + } + + return false; + } + } +} + diff --git a/src/Workspaces/Core/Portable/Workspaces.csproj b/src/Workspaces/Core/Portable/Workspaces.csproj index f8d2d1afd172eb5b20b7167d2582f1fb1bac7312..e2c7fbb22281e5ab402dd0f8c160a9079e438d4e 100644 --- a/src/Workspaces/Core/Portable/Workspaces.csproj +++ b/src/Workspaces/Core/Portable/Workspaces.csproj @@ -385,6 +385,7 @@ +