提交 9e5240d1 编写于 作者: J Jonathon Marolf

Fixing Mef composition

Fixing Mef composition error caused by previous commit
(11a827c4)
上级 9a48dff6
...@@ -13,7 +13,7 @@ internal class EditorErrorReportingService : IErrorReportingService ...@@ -13,7 +13,7 @@ internal class EditorErrorReportingService : IErrorReportingService
public void ShowErrorInfoForCodeFix(string codefixName, Action OnEnableClicked, Action OnEnableAndIgnoreClicked) public void ShowErrorInfoForCodeFix(string codefixName, Action OnEnableClicked, Action OnEnableAndIgnoreClicked)
{ {
var message = LogMessage.Create($"{codefixName} crashed"); var message = LogMessage.Create($"{codefixName} crashed");
Logger.Log(FunctionId.CodeFixe_Crash, message); Logger.Log(FunctionId.Extension_Excpetion, message);
} }
} }
} }
...@@ -34,8 +34,9 @@ public void TestGetFirstDiagnosticWithFixAsync() ...@@ -34,8 +34,9 @@ public void TestGetFirstDiagnosticWithFixAsync()
"; ";
using (var workspace = CSharpWorkspaceFactory.CreateWorkspaceFromFile(code)) using (var workspace = CSharpWorkspaceFactory.CreateWorkspaceFromFile(code))
{ {
var logger = SpecializedCollections.SingletonEnumerable(new Lazy<IErrorLoggerService>(() => workspace.Services.GetService<IErrorLoggerService>()));
var fixService = new CodeFixService( var fixService = new CodeFixService(
diagnosticService, workspace.Services.GetService<IErrorLoggerService>(), fixers, SpecializedCollections.EmptyEnumerable<Lazy<ISuppressionFixProvider, CodeChangeProviderMetadata>>()); diagnosticService, logger, fixers, SpecializedCollections.EmptyEnumerable<Lazy<ISuppressionFixProvider, CodeChangeProviderMetadata>>());
var incrementalAnalzyer = (IIncrementalAnalyzerProvider)diagnosticService; var incrementalAnalzyer = (IIncrementalAnalyzerProvider)diagnosticService;
...@@ -147,9 +148,10 @@ private static TestWorkspace ServiceSetup(CodeFixProvider codefix, out TestDiagn ...@@ -147,9 +148,10 @@ private static TestWorkspace ServiceSetup(CodeFixProvider codefix, out TestDiagn
new CodeChangeProviderMetadata("Test", languages: LanguageNames.CSharp))); new CodeChangeProviderMetadata("Test", languages: LanguageNames.CSharp)));
var code = @"class Program { }"; var code = @"class Program { }";
var workspace = CSharpWorkspaceFactory.CreateWorkspaceFromFile(code); var workspace = CSharpWorkspaceFactory.CreateWorkspaceFromFile(code);
errorLogger = new TestErrorLogger(); var logger = SpecializedCollections.SingletonEnumerable(new Lazy<IErrorLoggerService>(() => new TestErrorLogger()));
errorLogger = logger.First().Value;
fixService = new CodeFixService( fixService = new CodeFixService(
diagnosticService, errorLogger, fixers, SpecializedCollections.EmptyEnumerable<Lazy<ISuppressionFixProvider, CodeChangeProviderMetadata>>()); diagnosticService, logger, fixers, SpecializedCollections.EmptyEnumerable<Lazy<ISuppressionFixProvider, CodeChangeProviderMetadata>>());
return workspace; return workspace;
} }
......
...@@ -40,18 +40,18 @@ internal partial class CodeFixService : ICodeFixService ...@@ -40,18 +40,18 @@ internal partial class CodeFixService : ICodeFixService
private readonly ConditionalWeakTable<AnalyzerReference, ProjectCodeFixProvider>.CreateValueCallback _createProjectCodeFixProvider; private readonly ConditionalWeakTable<AnalyzerReference, ProjectCodeFixProvider>.CreateValueCallback _createProjectCodeFixProvider;
private readonly ImmutableDictionary<LanguageKind, Lazy<ISuppressionFixProvider>> _suppressionProvidersMap; private readonly ImmutableDictionary<LanguageKind, Lazy<ISuppressionFixProvider>> _suppressionProvidersMap;
private readonly IErrorLoggerService _errorLogger; private readonly IEnumerable<Lazy<IErrorLoggerService>> _errorLoggers;
private ImmutableDictionary<CodeFixProvider, FixAllProviderInfo> _fixAllProviderMap; private ImmutableDictionary<CodeFixProvider, FixAllProviderInfo> _fixAllProviderMap;
[ImportingConstructor] [ImportingConstructor]
public CodeFixService( public CodeFixService(
IDiagnosticAnalyzerService service, IDiagnosticAnalyzerService service,
IErrorLoggerService logger, [ImportMany]IEnumerable<Lazy<IErrorLoggerService>> loggers,
[ImportMany]IEnumerable<Lazy<CodeFixProvider, CodeChangeProviderMetadata>> fixers, [ImportMany]IEnumerable<Lazy<CodeFixProvider, CodeChangeProviderMetadata>> fixers,
[ImportMany]IEnumerable<Lazy<ISuppressionFixProvider, CodeChangeProviderMetadata>> suppressionProviders) [ImportMany]IEnumerable<Lazy<ISuppressionFixProvider, CodeChangeProviderMetadata>> suppressionProviders)
{ {
_errorLogger = logger; _errorLoggers = loggers;
_diagnosticService = service; _diagnosticService = service;
var fixersPerLanguageMap = fixers.ToPerLanguageMapWithMultipleLanguages(); var fixersPerLanguageMap = fixers.ToPerLanguageMapWithMultipleLanguages();
var suppressionProvidersPerLanguageMap = suppressionProviders.ToPerLanguageMapWithMultipleLanguages(); var suppressionProvidersPerLanguageMap = suppressionProviders.ToPerLanguageMapWithMultipleLanguages();
...@@ -416,7 +416,10 @@ private ImmutableArray<DiagnosticId> GetFixableDiagnosticIds(CodeFixProvider fix ...@@ -416,7 +416,10 @@ private ImmutableArray<DiagnosticId> GetFixableDiagnosticIds(CodeFixProvider fix
} }
catch (Exception e) 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<DiagnosticId>.Empty; return ImmutableArray<DiagnosticId>.Empty;
} }
} }
......
...@@ -22,6 +22,5 @@ public bool TryLogError(string source, string message) ...@@ -22,6 +22,5 @@ public bool TryLogError(string source, string message)
{ {
return ActivityLog.TryLogError(source, message); return ActivityLog.TryLogError(source, message);
} }
} }
} }
...@@ -299,6 +299,6 @@ internal enum FunctionId ...@@ -299,6 +299,6 @@ internal enum FunctionId
SuggestedActions_GetSuggestedActions, SuggestedActions_GetSuggestedActions,
AnalyzerDependencyCheckingService_CheckForConflictsAsync, AnalyzerDependencyCheckingService_CheckForConflictsAsync,
VirtualMemory_MemoryLow, VirtualMemory_MemoryLow,
CodeFixe_Crash, Extension_Excpetion,
} }
} }
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;
}
}
}
...@@ -385,6 +385,7 @@ ...@@ -385,6 +385,7 @@
<Compile Include="Log\LogAggregator.cs" /> <Compile Include="Log\LogAggregator.cs" />
<Compile Include="Log\Logger.LogBlock.cs" /> <Compile Include="Log\Logger.LogBlock.cs" />
<Compile Include="Log\LogMessage.cs" /> <Compile Include="Log\LogMessage.cs" />
<Compile Include="Log\WorkspaceErrorLogger.cs" />
<Compile Include="Rename\TokenRenameInfo.cs" /> <Compile Include="Rename\TokenRenameInfo.cs" />
<Compile Include="Serialization\AssemblySerializationInfoService.cs" /> <Compile Include="Serialization\AssemblySerializationInfoService.cs" />
<Compile Include="Serialization\IAssemblySerializationInfoService.cs" /> <Compile Include="Serialization\IAssemblySerializationInfoService.cs" />
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册