Skip to content

Commit

Permalink
Move Tree from SonarReportingContextBase to `SonarTreeReportingCont…
Browse files Browse the repository at this point in the history
…extBase` (#6837)
  • Loading branch information
pavel-mikula-sonarsource committed Mar 14, 2023
1 parent dd58aea commit d5f0949
Show file tree
Hide file tree
Showing 12 changed files with 18 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,12 @@ internal SonarAnalysisContext(RoslynAnalysisContext analysisContext, IEnumerable
internal static bool LegacyIsRegisteredActionEnabled(IEnumerable<DiagnosticDescriptor> diagnostics, SyntaxTree tree) =>
ShouldExecuteRegisteredAction == null || tree == null || ShouldExecuteRegisteredAction(diagnostics, tree);

/// <summary>
/// Legacy API for backward compatibility with SonarLint v4.0 - v5.5. See <see cref="ShouldExecuteRegisteredAction"/>.
/// </summary>
internal static bool LegacyIsRegisteredActionEnabled(DiagnosticDescriptor diagnostic, SyntaxTree tree) =>
ShouldExecuteRegisteredAction == null || tree == null || ShouldExecuteRegisteredAction(new[] { diagnostic }, tree);

public void RegisterCodeBlockStartAction<TSyntaxKind>(GeneratedCodeRecognizer generatedCodeRecognizer, Action<SonarCodeBlockStartAnalysisContext<TSyntaxKind>> action)
where TSyntaxKind : struct =>
analysisContext.RegisterCodeBlockStartAction<TSyntaxKind>(
Expand Down Expand Up @@ -121,7 +127,7 @@ public void RegisterNodeAction<TSyntaxKind>(GeneratedCodeRecognizer generatedCod
// the decision is made on based on whether the project contains the analyzer as NuGet).
if (context.HasMatchingScope(supportedDiagnostics)
&& context.ShouldAnalyzeTree(sourceTree, generatedCodeRecognizer)
&& LegacyIsRegisteredActionEnabled(supportedDiagnostics, context.Tree))
&& LegacyIsRegisteredActionEnabled(supportedDiagnostics, sourceTree))
{
action(context);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ public class SonarAnalysisContextBase

public abstract class SonarAnalysisContextBase<TContext> : SonarAnalysisContextBase
{
public abstract SyntaxTree Tree { get; }
public abstract Compilation Compilation { get; }
public abstract AnalyzerOptions Options { get; }
public abstract CancellationToken Cancel { get; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ namespace SonarAnalyzer.AnalysisContext;

public sealed class SonarCodeBlockStartAnalysisContext<TSyntaxKind> : SonarAnalysisContextBase<CodeBlockStartAnalysisContext<TSyntaxKind>> where TSyntaxKind : struct
{
public override SyntaxTree Tree => Context.CodeBlock.SyntaxTree;
public override Compilation Compilation => Context.SemanticModel.Compilation;
public override AnalyzerOptions Options => Context.Options;
public override CancellationToken Cancel => Context.CancellationToken;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ public sealed class SonarCompilationReportingContext : SonarCompilationReporting
private static readonly Regex WebConfigRegex = new(@"[\\\/]web\.([^\\\/]+\.)?config$", RegexOptions.IgnoreCase, FileNameTimeout);
private static readonly Regex AppSettingsRegex = new(@"[\\\/]appsettings\.([^\\\/]+\.)?json$", RegexOptions.IgnoreCase, FileNameTimeout);

public override SyntaxTree Tree => Context.Compilation.SyntaxTrees.FirstOrDefault();
public override Compilation Compilation => Context.Compilation;
public override AnalyzerOptions Options => Context.Options;
public override CancellationToken Cancel => Context.CancellationToken;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ namespace SonarAnalyzer.AnalysisContext;

public sealed class SonarCompilationStartAnalysisContext : SonarAnalysisContextBase<CompilationStartAnalysisContext>
{
public override SyntaxTree Tree => Context.Compilation.SyntaxTrees.FirstOrDefault();
public override Compilation Compilation => Context.Compilation;
public override AnalyzerOptions Options => Context.Options;
public override CancellationToken Cancel => Context.CancellationToken;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public abstract class SonarReportingContextBase<TContext> : SonarAnalysisContext

protected void ReportIssueCore(Diagnostic diagnostic)
{
if (HasMatchingScope(diagnostic.Descriptor))
if (HasMatchingScope(diagnostic.Descriptor) && SonarAnalysisContext.LegacyIsRegisteredActionEnabled(diagnostic.Descriptor, diagnostic.Location?.SourceTree))
{
var reportingContext = CreateReportingContext(diagnostic);
if (reportingContext is { Compilation: { } compilation, Diagnostic.Location: { Kind: LocationKind.SourceFile, SourceTree: { } tree } } && !compilation.ContainsSyntaxTree(tree))
Expand Down Expand Up @@ -58,6 +58,8 @@ protected void ReportIssueCore(Diagnostic diagnostic)
/// </summary>
public abstract class SonarTreeReportingContextBase<TContext> : SonarReportingContextBase<TContext>
{
public abstract SyntaxTree Tree { get; }

protected SonarTreeReportingContextBase(SonarAnalysisContext analysisContext, TContext context) : base(analysisContext, context) { }

public void ReportIssue(Diagnostic diagnostic) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ namespace SonarAnalyzer.AnalysisContext;

public sealed class SonarSymbolReportingContext : SonarCompilationReportingContextBase<SymbolAnalysisContext>
{
public override SyntaxTree Tree => Context.Symbol.Locations.Select(x => x.SourceTree).FirstOrDefault(x => x is not null);
public override Compilation Compilation => Context.Compilation;
public override AnalyzerOptions Options => Context.Options;
public override CancellationToken Cancel => Context.CancellationToken;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ public ReportingContext(SonarSyntaxTreeReportingContext context, Diagnostic diag
: this(diagnostic, context.Context.ReportDiagnostic, context.Compilation, context.Tree) { }

public ReportingContext(SonarCompilationReportingContext context, Diagnostic diagnostic)
: this(diagnostic, context.Context.ReportDiagnostic, context.Compilation, diagnostic.Location?.SourceTree ?? context.Tree) { }
: this(diagnostic, context.Context.ReportDiagnostic, context.Compilation, diagnostic.Location?.SourceTree) { }

public ReportingContext(SonarSymbolReportingContext context, Diagnostic diagnostic)
: this(diagnostic, context.Context.ReportDiagnostic, context.Compilation, diagnostic.Location?.SourceTree ?? context.Tree) { }
: this(diagnostic, context.Context.ReportDiagnostic, context.Compilation, diagnostic.Location?.SourceTree) { }

public ReportingContext(SonarCodeBlockReportingContext context, Diagnostic diagnostic)
: this(diagnostic, context.Context.ReportDiagnostic, context.Compilation, context.Tree) { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ public void Properties_ArePropagated()
var context = new Mock<CodeBlockStartAnalysisContext<SyntaxKind>>(codeBlock, owningSymbol, model, options, cancel).Object;
var sut = new SonarCodeBlockStartAnalysisContext<SyntaxKind>(AnalysisScaffolding.CreateSonarAnalysisContext(), context);

sut.Tree.Should().BeSameAs(codeBlock.SyntaxTree);
sut.Compilation.Should().BeSameAs(model.Compilation);
sut.Options.Should().BeSameAs(options);
sut.Cancel.Should().Be(cancel);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,12 @@ public class SonarCompilationReportingContextTest
public void Properties_ArePropagated()
{
var cancel = new CancellationToken(true);
var (tree, model) = TestHelper.CompileCS("// Nothing to see here");
var compilation = TestHelper.CompileCS("// Nothing to see here").Model.Compilation;
var options = AnalysisScaffolding.CreateOptions();
var context = new CompilationAnalysisContext(model.Compilation, options, _ => { }, _ => true, cancel);
var context = new CompilationAnalysisContext(compilation, options, _ => { }, _ => true, cancel);
var sut = new SonarCompilationReportingContext(AnalysisScaffolding.CreateSonarAnalysisContext(), context);

sut.Tree.Should().BeSameAs(tree);
sut.Compilation.Should().BeSameAs(model.Compilation);
sut.Compilation.Should().BeSameAs(compilation);
sut.Options.Should().BeSameAs(options);
sut.Cancel.Should().Be(cancel);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,12 @@ public class SonarCompilationStartAnalysisContextTest
public void Properties_ArePropagated()
{
var cancel = new CancellationToken(true);
var (tree, model) = TestHelper.CompileCS("// Nothing to see here");
var compilation = TestHelper.CompileCS("// Nothing to see here").Model.Compilation;
var options = AnalysisScaffolding.CreateOptions();
var context = new Mock<CompilationStartAnalysisContext>(model.Compilation, options, cancel).Object;
var context = new Mock<CompilationStartAnalysisContext>(compilation, options, cancel).Object;
var sut = new SonarCompilationStartAnalysisContext(AnalysisScaffolding.CreateSonarAnalysisContext(), context);

sut.Tree.Should().BeSameAs(tree);
sut.Compilation.Should().BeSameAs(model.Compilation);
sut.Compilation.Should().BeSameAs(compilation);
sut.Options.Should().BeSameAs(options);
sut.Cancel.Should().Be(cancel);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ public void Properties_ArePropagated()
var context = new SymbolAnalysisContext(symbol, model.Compilation, options, _ => { }, _ => true, cancel);
var sut = new SonarSymbolReportingContext(AnalysisScaffolding.CreateSonarAnalysisContext(), context);

sut.Tree.Should().BeSameAs(tree);
sut.Compilation.Should().BeSameAs(model.Compilation);
sut.Options.Should().BeSameAs(options);
sut.Cancel.Should().Be(cancel);
Expand Down

0 comments on commit d5f0949

Please sign in to comment.