diff --git a/analyzers/src/SonarAnalyzer.CSharp/Rules/UseConstantLoggingTemplate.cs b/analyzers/src/SonarAnalyzer.CSharp/Rules/UseConstantLoggingTemplate.cs index a2413a37ead..591bc10b7f3 100644 --- a/analyzers/src/SonarAnalyzer.CSharp/Rules/UseConstantLoggingTemplate.cs +++ b/analyzers/src/SonarAnalyzer.CSharp/Rules/UseConstantLoggingTemplate.cs @@ -94,7 +94,7 @@ protected override void Initialize(SonarAnalysisContext context) => && ArgumentValue(invocation, method, messageParameter) is { } argumentValue && InvalidSyntaxNode(argumentValue, c.SemanticModel) is { } invalidNode) { - c.ReportIssue(Diagnostic.Create(Rule, invalidNode.GetLocation(), Messages[invalidNode.Kind()])); + c.ReportIssue(Rule, invalidNode.GetLocation(), Messages[invalidNode.Kind()]); } }, SyntaxKind.InvocationExpression); @@ -114,7 +114,7 @@ private static CSharpSyntaxNode ArgumentValue(InvocationExpressionSyntax invocat private static SyntaxNode InvalidSyntaxNode(SyntaxNode messageArgument, SemanticModel model) => messageArgument.DescendantNodesAndSelf().FirstOrDefault(x => - x.Kind() == SyntaxKind.InterpolatedStringExpression + (x as InterpolatedStringExpressionSyntax is { } interpolatedString && !interpolatedString.HasConstantValue(model)) || (x is BinaryExpressionSyntax { RawKind: (int)SyntaxKind.AddExpression } concatenation && !AllMembersAreConstantStrings(concatenation, model)) || IsStringFormatInvocation(x, model)); diff --git a/analyzers/tests/SonarAnalyzer.Test/TestCases/UseConstantLoggingTemplate.cs b/analyzers/tests/SonarAnalyzer.Test/TestCases/UseConstantLoggingTemplate.cs index 309f91a4268..ad019cfddd3 100644 --- a/analyzers/tests/SonarAnalyzer.Test/TestCases/UseConstantLoggingTemplate.cs +++ b/analyzers/tests/SonarAnalyzer.Test/TestCases/UseConstantLoggingTemplate.cs @@ -42,7 +42,7 @@ public void BasicScenarios(ILogger logger, int arg) logger.Log(LogLevel.Warning, "First " + "Second " + "Third"); // Compliant - all strings in the concatenation are constants, the compiler can optimize it logger.Log(LogLevel.Warning, FieldConstant + localConstant); // Compliant logger.Log(LogLevel.Warning, FieldConstant + "Second"); // Compliant - logger.Log(LogLevel.Warning, $"Constant: {FieldConstant}"); // Noncompliant FP Repro https://github.com/SonarSource/sonar-dotnet/issues/9247 + logger.Log(LogLevel.Warning, $"Constant: {FieldConstant}"); // Compliant, see https://github.com/SonarSource/sonar-dotnet/issues/9247 logger.Log(LogLevel.Warning, "First " + arg + "Third"); // Noncompliant logger.Log(LogLevel.Warning, ("First " + "Second").ToLower()); // FN