Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ namespace Microsoft.DotNet.ApiCompat.Task
/// Class that can log Suppressions in an MSBuild task, by implementing MSBuildLog and ISuppressibleLog.
/// </summary>
internal sealed class SuppressibleMSBuildLog(NET.Build.Tasks.Logger log,
ISuppressionEngine suppressionEngine) : MSBuildLog(log), ISuppressibleLog
ISuppressionEngine suppressionEngine,
string? noWarn = null) : MSBuildLog(log, noWarn), ISuppressibleLog
{
/// <inheritdoc />
public bool HasLoggedErrorSuppressions { get; private set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ public override bool Execute()

protected override void ExecuteCore()
{
SuppressibleMSBuildLog logFactory(ISuppressionEngine suppressionEngine) => new(Log, suppressionEngine);
SuppressibleMSBuildLog logFactory(ISuppressionEngine suppressionEngine) => new(Log, suppressionEngine, NoWarn);
ValidateAssemblies.Run(logFactory,
GenerateSuppressionFile,
PreserveUnnecessarySuppressions,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ public override bool Execute()

protected override void ExecuteCore()
{
SuppressibleMSBuildLog logFactory(ISuppressionEngine suppressionEngine) => new(Log, suppressionEngine);
SuppressibleMSBuildLog logFactory(ISuppressionEngine suppressionEngine) => new(Log, suppressionEngine, NoWarn);
ValidatePackage.Run(logFactory,
GenerateSuppressionFile,
PreserveUnnecessarySuppressions,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ static int Main(string[] args)
(string, string)[]? leftAssembliesTransformationPattern = parseResult.GetValue(leftAssembliesTransformationPatternOption);
(string, string)[]? rightAssembliesTransformationPattern = parseResult.GetValue(rightAssembliesTransformationPatternOption);

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

SuppressibleConsoleLog logFactory(ISuppressionEngine suppressionEngine) => new(suppressionEngine, verbosity);
SuppressibleConsoleLog logFactory(ISuppressionEngine suppressionEngine) => new(suppressionEngine, verbosity, noWarn);
int exitCode = ValidatePackage.Run(logFactory,
generateSuppressionFile,
preserveUnnecessarySuppressions,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ namespace Microsoft.DotNet.ApiCompat.Tool
/// Class that can log Suppressions to the Console, by implementing ConsoleLog and ISuppressibleLog.
/// </summary>
internal sealed class SuppressibleConsoleLog(ISuppressionEngine suppressionEngine,
MessageImportance messageImportance) : ConsoleLog(messageImportance), ISuppressibleLog
MessageImportance messageImportance,
string? noWarn = null) : ConsoleLog(messageImportance, noWarn), ISuppressibleLog
{
/// <inheritdoc />
public bool HasLoggedErrorSuppressions { get; private set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
/// <summary>
/// Class to define common logging abstraction to the console across the APICompat and GenAPI codebases.
/// </summary>
public class ConsoleLog(MessageImportance messageImportance) : ILog
public class ConsoleLog(MessageImportance messageImportance, string? noWarn = null) : ILog
{
private readonly HashSet<string> _noWarn = string.IsNullOrEmpty(noWarn) ? [] : new(noWarn!.Split(';'));

/// <inheritdoc />
public bool HasLoggedErrors { get; private set; }

Expand All @@ -30,8 +32,20 @@
Console.WriteLine(message);

/// <inheritdoc />
public virtual void LogWarning(string code, string message) =>
Console.WriteLine($"{code}: {message}");
public virtual void LogWarning(string code, string message)
{
string messageTextWithCode = $"{code}: {message}";

// Mimic MSBuild which logs suppressed warnings as low importance messages.
if (_noWarn.Contains(code))
{
LogMessage(MessageImportance.Low, messageTextWithCode)

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build TestBuild: macOS (arm64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build TestBuild: macOS (arm64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build AoT: macOS (x64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build AoT: macOS (x64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build TestBuild: macOS (x64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build TestBuild: macOS (x64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build TestBuild: linux (arm64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build TestBuild: linux (arm64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build TestBuild: linux (x64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build TestBuild: linux (x64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build TemplateEngine: linux (x64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build TemplateEngine: linux (x64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build ContainerBased: linux (x64) [fedora39])

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build ContainerBased: linux (x64) [fedora39])

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build ContainerBased: linux (x64) [centosStream9])

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build ContainerBased: linux (x64) [centosStream9])

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build ContainerBased: linux (x64) [alpine319WithNode])

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build ContainerBased: linux (x64) [alpine319WithNode])

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build ContainerBased: linux (x64) [ubuntu2204DebPkg])

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build ContainerBased: linux (x64) [ubuntu2204DebPkg])

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build TemplateEngine: macOS (x64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build TemplateEngine: macOS (x64))

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build ContainerBased: linux (x64) [debian12Amd64])

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected

Check failure on line 42 in src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs

View check run for this annotation

Azure Pipelines / dotnet-sdk-public-ci (Build ContainerBased: linux (x64) [debian12Amd64])

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

src/Compatibility/Microsoft.DotNet.ApiSymbolExtensions/Logging/ConsoleLog.cs(42,71): error CS1002: (NETCORE_ENGINEERING_TELEMETRY=Build) ; expected
}
else
{
Console.WriteLine(messageTextWithCode);
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Considering we now know this code can break consumers like it happened with aspnetcore, I think we should have a couple tests to verify the behavior.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed. I filed #46062 to track adding a new test project for the apicompat global tool.


/// <inheritdoc />
public virtual void LogMessage(string message) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@ namespace Microsoft.DotNet.ApiSymbolExtensions.Logging
/// <summary>
/// Class to define common logging abstraction for MSBuild tasks across the APICompat and GenAPI codebases.
/// </summary>
internal class MSBuildLog(Logger log) : ILog
internal class MSBuildLog(Logger log, string? noWarn = null) : ILog
{
// Remove passing in NoWarn when MSBuild respects it correctly in outer-builds: https://github.com/dotnet/msbuild/issues/10873
private readonly HashSet<string> _noWarn = string.IsNullOrEmpty(noWarn) ? [] : new(noWarn!.Split(';'));

/// <inheritdoc />
public bool HasLoggedErrors => log.HasLoggedErrors;

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

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

/// <inheritdoc />
public virtual void LogMessage(string message) =>
Expand Down
Loading