diff options
author | therzok <marius.ungureanu@xamarin.com> | 2017-05-07 18:38:52 +0300 |
---|---|---|
committer | Marius Ungureanu <teromario@yahoo.com> | 2017-05-09 18:23:55 +0300 |
commit | e7e33e1daf131f9249eff7963928206a8c0a88cd (patch) | |
tree | 461f14487cdb245488fe767f504fd6038ec88182 /main | |
parent | 0bff5b425857610992805cc2bf2bd8887e573a00 (diff) |
[C#] Don't inspect MonoTODO unless MonoTODO exists.
Diffstat (limited to 'main')
-rw-r--r-- | main/src/addins/CSharpBinding/MonoDevelop.CSharp.Diagnostics/MonoTODO/MonoTODODiagnosticAnalyzer.cs | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Diagnostics/MonoTODO/MonoTODODiagnosticAnalyzer.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Diagnostics/MonoTODO/MonoTODODiagnosticAnalyzer.cs index a4da73f782..0c3c81a7e9 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Diagnostics/MonoTODO/MonoTODODiagnosticAnalyzer.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Diagnostics/MonoTODO/MonoTODODiagnosticAnalyzer.cs @@ -26,6 +26,7 @@ using System.Collections.Generic; using System.Collections.Immutable; +using System.Linq; using Microsoft.CodeAnalysis.Diagnostics; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; @@ -58,15 +59,34 @@ namespace MonoDevelop.CSharp.Diagnostics.MonoTODODiagnostic } } + static IEnumerable<IAssemblySymbol> GetSearchAssemblies(Compilation compilation) + { + yield return compilation.Assembly; + foreach (var reference in compilation.References) { + var symbol = compilation.GetAssemblyOrModuleSymbol (reference); + if (symbol is IAssemblySymbol assemblySymbol) + yield return assemblySymbol; + } + } + + const string MonoTODOAttributeName = "System.MonoTODOAttribute"; public override void Initialize(AnalysisContext context) { - context.RegisterSyntaxNodeAction( - (nodeContext) => { - Diagnostic diagnostic; - if (TryFindMonoTODO(nodeContext.SemanticModel, nodeContext.Node, out diagnostic, nodeContext.CancellationToken)) - nodeContext.ReportDiagnostic (diagnostic); - }, - syntaxKindsOfInterest); + context.RegisterCompilationStartAction (compilationContext => { + var compilation = compilationContext.Compilation; + var monoTodoAttributeExists = GetSearchAssemblies (compilation) + .Any (assemblySymbol => assemblySymbol.GetTypeByMetadataName (MonoTODOAttributeName) != null); + if (!monoTodoAttributeExists) + return; + + compilationContext.RegisterSyntaxNodeAction( + (nodeContext) => { + Diagnostic diagnostic; + if (TryFindMonoTODO(nodeContext.SemanticModel, nodeContext.Node, out diagnostic, nodeContext.CancellationToken)) + nodeContext.ReportDiagnostic (diagnostic); + }, + syntaxKindsOfInterest); + }); } static readonly Dictionary<string, string> attributes = new Dictionary<string, string> { |