提交 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
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);
}
}
}
......@@ -34,8 +34,9 @@ public void TestGetFirstDiagnosticWithFixAsync()
";
using (var workspace = CSharpWorkspaceFactory.CreateWorkspaceFromFile(code))
{
var logger = SpecializedCollections.SingletonEnumerable(new Lazy<IErrorLoggerService>(() => workspace.Services.GetService<IErrorLoggerService>()));
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;
......@@ -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<IErrorLoggerService>(() => new TestErrorLogger()));
errorLogger = logger.First().Value;
fixService = new CodeFixService(
diagnosticService, errorLogger, fixers, SpecializedCollections.EmptyEnumerable<Lazy<ISuppressionFixProvider, CodeChangeProviderMetadata>>());
diagnosticService, logger, fixers, SpecializedCollections.EmptyEnumerable<Lazy<ISuppressionFixProvider, CodeChangeProviderMetadata>>());
return workspace;
}
......
......@@ -40,18 +40,18 @@ internal partial class CodeFixService : ICodeFixService
private readonly ConditionalWeakTable<AnalyzerReference, ProjectCodeFixProvider>.CreateValueCallback _createProjectCodeFixProvider;
private readonly ImmutableDictionary<LanguageKind, Lazy<ISuppressionFixProvider>> _suppressionProvidersMap;
private readonly IErrorLoggerService _errorLogger;
private readonly IEnumerable<Lazy<IErrorLoggerService>> _errorLoggers;
private ImmutableDictionary<CodeFixProvider, FixAllProviderInfo> _fixAllProviderMap;
[ImportingConstructor]
public CodeFixService(
IDiagnosticAnalyzerService service,
IErrorLoggerService logger,
[ImportMany]IEnumerable<Lazy<IErrorLoggerService>> loggers,
[ImportMany]IEnumerable<Lazy<CodeFixProvider, CodeChangeProviderMetadata>> fixers,
[ImportMany]IEnumerable<Lazy<ISuppressionFixProvider, CodeChangeProviderMetadata>> suppressionProviders)
{
_errorLogger = logger;
_errorLoggers = loggers;
_diagnosticService = service;
var fixersPerLanguageMap = fixers.ToPerLanguageMapWithMultipleLanguages();
var suppressionProvidersPerLanguageMap = suppressionProviders.ToPerLanguageMapWithMultipleLanguages();
......@@ -416,7 +416,10 @@ private ImmutableArray<DiagnosticId> 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<DiagnosticId>.Empty;
}
}
......
......@@ -22,6 +22,5 @@ public bool TryLogError(string source, string message)
{
return ActivityLog.TryLogError(source, message);
}
}
}
......@@ -299,6 +299,6 @@ internal enum FunctionId
SuggestedActions_GetSuggestedActions,
AnalyzerDependencyCheckingService_CheckForConflictsAsync,
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 @@
<Compile Include="Log\LogAggregator.cs" />
<Compile Include="Log\Logger.LogBlock.cs" />
<Compile Include="Log\LogMessage.cs" />
<Compile Include="Log\WorkspaceErrorLogger.cs" />
<Compile Include="Rename\TokenRenameInfo.cs" />
<Compile Include="Serialization\AssemblySerializationInfoService.cs" />
<Compile Include="Serialization\IAssemblySerializationInfoService.cs" />
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册