Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authortherzok <marius.ungureanu@xamarin.com>2017-05-07 18:38:52 +0300
committerMarius Ungureanu <teromario@yahoo.com>2017-05-09 18:23:55 +0300
commite7e33e1daf131f9249eff7963928206a8c0a88cd (patch)
tree461f14487cdb245488fe767f504fd6038ec88182 /main
parent0bff5b425857610992805cc2bf2bd8887e573a00 (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.cs34
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> {