Skip to content

Commit 712c574

Browse files
authored
Correctly respect NoWarn CLI/Task options in Compatibility logging interface (#46061)
1 parent 87ea7e4 commit 712c574

File tree

8 files changed

+32
-12
lines changed

8 files changed

+32
-12
lines changed

src/Compatibility/ApiCompat/Microsoft.DotNet.ApiCompat.Task/SuppressibleMSBuildLog.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ namespace Microsoft.DotNet.ApiCompat.Task
1010
/// Class that can log Suppressions in an MSBuild task, by implementing MSBuildLog and ISuppressibleLog.
1111
/// </summary>
1212
internal sealed class SuppressibleMSBuildLog(NET.Build.Tasks.Logger log,
13-
ISuppressionEngine suppressionEngine) : MSBuildLog(log), ISuppressibleLog
13+
ISuppressionEngine suppressionEngine,
14+
string? noWarn = null) : MSBuildLog(log, noWarn), ISuppressibleLog
1415
{
1516
/// <inheritdoc />
1617
public bool HasLoggedErrorSuppressions { get; private set; }

src/Compatibility/ApiCompat/Microsoft.DotNet.ApiCompat.Task/ValidateAssembliesTask.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public override bool Execute()
132132

133133
protected override void ExecuteCore()
134134
{
135-
SuppressibleMSBuildLog logFactory(ISuppressionEngine suppressionEngine) => new(Log, suppressionEngine);
135+
SuppressibleMSBuildLog logFactory(ISuppressionEngine suppressionEngine) => new(Log, suppressionEngine, NoWarn);
136136
ValidateAssemblies.Run(logFactory,
137137
GenerateSuppressionFile,
138138
PreserveUnnecessarySuppressions,

src/Compatibility/ApiCompat/Microsoft.DotNet.ApiCompat.Task/ValidatePackageTask.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public override bool Execute()
140140

141141
protected override void ExecuteCore()
142142
{
143-
SuppressibleMSBuildLog logFactory(ISuppressionEngine suppressionEngine) => new(Log, suppressionEngine);
143+
SuppressibleMSBuildLog logFactory(ISuppressionEngine suppressionEngine) => new(Log, suppressionEngine, NoWarn);
144144
ValidatePackage.Run(logFactory,
145145
GenerateSuppressionFile,
146146
PreserveUnnecessarySuppressions,

src/Compatibility/ApiCompat/Microsoft.DotNet.ApiCompat.Tool/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ static int Main(string[] args)
196196
(string, string)[]? leftAssembliesTransformationPattern = parseResult.GetValue(leftAssembliesTransformationPatternOption);
197197
(string, string)[]? rightAssembliesTransformationPattern = parseResult.GetValue(rightAssembliesTransformationPatternOption);
198198

199-
SuppressibleConsoleLog logFactory(ISuppressionEngine suppressionEngine) => new(suppressionEngine, verbosity);
199+
SuppressibleConsoleLog logFactory(ISuppressionEngine suppressionEngine) => new(suppressionEngine, verbosity, noWarn);
200200
int exitCode = ValidateAssemblies.Run(logFactory,
201201
generateSuppressionFile,
202202
preserveUnnecessarySuppressions,
@@ -320,7 +320,7 @@ static int Main(string[] args)
320320
Dictionary<NuGetFramework, IEnumerable<string>>? baselinePackageAssemblyReferences = parseResult.GetValue(baselinePackageAssemblyReferencesOption);
321321
string[]? baselinePackageFrameworksToIgnore = parseResult.GetValue(baselinePackageFrameworksToIgnoreOption);
322322

323-
SuppressibleConsoleLog logFactory(ISuppressionEngine suppressionEngine) => new(suppressionEngine, verbosity);
323+
SuppressibleConsoleLog logFactory(ISuppressionEngine suppressionEngine) => new(suppressionEngine, verbosity, noWarn);
324324
int exitCode = ValidatePackage.Run(logFactory,
325325
generateSuppressionFile,
326326
preserveUnnecessarySuppressions,

src/Compatibility/ApiCompat/Microsoft.DotNet.ApiCompat.Tool/SuppressibleConsoleLog.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ namespace Microsoft.DotNet.ApiCompat.Tool
1010
/// Class that can log Suppressions to the Console, by implementing ConsoleLog and ISuppressibleLog.
1111
/// </summary>
1212
internal sealed class SuppressibleConsoleLog(ISuppressionEngine suppressionEngine,
13-
MessageImportance messageImportance) : ConsoleLog(messageImportance), ISuppressibleLog
13+
MessageImportance messageImportance,
14+
string? noWarn = null) : ConsoleLog(messageImportance, noWarn), ISuppressibleLog
1415
{
1516
/// <inheritdoc />
1617
public bool HasLoggedErrorSuppressions { get; private set; }

src/Compatibility/ApiCompat/Microsoft.DotNet.ApiCompatibility/Logging/SuppressionEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class SuppressionEngine(string? noWarn = null, bool baselineAllErrors = f
1717
protected const string DiagnosticIdDocumentationComment = " https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids ";
1818
private readonly HashSet<Suppression> _baselineSuppressions = [];
1919
private readonly HashSet<Suppression> _suppressions = [];
20-
private readonly HashSet<string> _noWarn = string.IsNullOrEmpty(noWarn) ? [] : new(noWarn!.Split(';'));
20+
private readonly HashSet<string> _noWarn = string.IsNullOrEmpty(noWarn) ? [] : new(noWarn!.Split(';'), StringComparer.OrdinalIgnoreCase);
2121

2222
/// <inheritdoc/>
2323
public bool BaselineAllErrors { get; } = baselineAllErrors;

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ namespace Microsoft.DotNet.ApiSymbolExtensions.Logging
66
/// <summary>
77
/// Class to define common logging abstraction to the console across the APICompat and GenAPI codebases.
88
/// </summary>
9-
public class ConsoleLog(MessageImportance messageImportance) : ILog
9+
public class ConsoleLog(MessageImportance messageImportance, string? noWarn = null) : ILog
1010
{
11+
private readonly HashSet<string> _noWarn = string.IsNullOrEmpty(noWarn) ? [] : new(noWarn!.Split(';'), StringComparer.OrdinalIgnoreCase);
12+
1113
/// <inheritdoc />
1214
public bool HasLoggedErrors { get; private set; }
1315

@@ -30,8 +32,20 @@ public virtual void LogWarning(string message) =>
3032
Console.WriteLine(message);
3133

3234
/// <inheritdoc />
33-
public virtual void LogWarning(string code, string message) =>
34-
Console.WriteLine($"{code}: {message}");
35+
public virtual void LogWarning(string code, string message)
36+
{
37+
string messageTextWithCode = $"{code}: {message}";
38+
39+
// Mimic MSBuild which logs suppressed warnings as low importance messages.
40+
if (_noWarn.Contains(code))
41+
{
42+
LogMessage(MessageImportance.Low, messageTextWithCode);
43+
}
44+
else
45+
{
46+
Console.WriteLine(messageTextWithCode);
47+
}
48+
}
3549

3650
/// <inheritdoc />
3751
public virtual void LogMessage(string message) =>

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/MSBuildLog.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@ namespace Microsoft.DotNet.ApiSymbolExtensions.Logging
88
/// <summary>
99
/// Class to define common logging abstraction for MSBuild tasks across the APICompat and GenAPI codebases.
1010
/// </summary>
11-
internal class MSBuildLog(Logger log) : ILog
11+
internal class MSBuildLog(Logger log, string? noWarn = null) : ILog
1212
{
13+
// Remove passing in NoWarn when MSBuild respects it correctly in outer-builds: https://github.com/dotnet/msbuild/issues/10873
14+
private readonly HashSet<string> _noWarn = string.IsNullOrEmpty(noWarn) ? [] : new(noWarn!.Split(';'), StringComparer.OrdinalIgnoreCase);
15+
1316
/// <inheritdoc />
1417
public bool HasLoggedErrors => log.HasLoggedErrors;
1518

@@ -27,7 +30,8 @@ public virtual void LogWarning(string message) =>
2730

2831
/// <inheritdoc />
2932
public virtual void LogWarning(string code, string message) =>
30-
LogCore(MessageLevel.Warning, code, message);
33+
// Mimic MSBuild which logs suppressed warnings as low importance messages.
34+
LogCore(_noWarn.Contains(code) ? MessageLevel.LowImportance : MessageLevel.Warning, code, message);
3135

3236
/// <inheritdoc />
3337
public virtual void LogMessage(string message) =>

0 commit comments

Comments
 (0)