| File: Diagnostic\SuppressionDescriptor.cs | Web Access |
| Project: src\roslyn\src\Compilers\Core\Portable\Microsoft.CodeAnalysis.csproj (Microsoft.CodeAnalysis) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using Microsoft.CodeAnalysis.Diagnostics; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis { /// <summary> /// Provides a description about a programmatic suppression of a <see cref="Diagnostic"/> by a <see cref="DiagnosticSuppressor"/>. /// </summary> public sealed class SuppressionDescriptor : IEquatable<SuppressionDescriptor?> { /// <summary> /// An unique identifier for the suppression. /// </summary> public string Id { get; } /// <summary> /// Identifier of the suppressed diagnostic, i.e. <see cref="Diagnostic.Id"/>. /// </summary> public string SuppressedDiagnosticId { get; } /// <summary> /// A localizable justification about the suppression. /// </summary> public LocalizableString Justification { get; } /// <summary> /// Create a SuppressionDescriptor, which provides a justification about a programmatic suppression of a <see cref="Diagnostic"/>. /// NOTE: For localizable <paramref name="justification"/>, /// use constructor overload <see cref="SuppressionDescriptor(string, string, LocalizableString)"/>. /// </summary> /// <param name="id">A unique identifier for the suppression. For example, suppression ID "SP1001".</param> /// <param name="suppressedDiagnosticId">Identifier of the suppressed diagnostic, i.e. <see cref="Diagnostic.Id"/>. For example, compiler warning Id "CS0649".</param> /// <param name="justification">Justification for the suppression. For example: "Suppress CS0649 on fields marked with YYY attribute as they are implicitly assigned.".</param> public SuppressionDescriptor( string id, string suppressedDiagnosticId, string justification) : this(id, suppressedDiagnosticId, (LocalizableString)justification) { } /// <summary> /// Create a SuppressionDescriptor, which provides a localizable justification about a programmatic suppression of a <see cref="Diagnostic"/>. /// </summary> /// <param name="id">A unique identifier for the suppression. For example, suppression ID "SP1001".</param> /// <param name="suppressedDiagnosticId">Identifier of the suppressed diagnostic, i.e. <see cref="Diagnostic.Id"/>. For example, compiler warning Id "CS0649".</param> /// <param name="justification">Justification for the suppression. For example: "Suppress CS0649 on fields marked with YYY attribute as they are implicitly assigned.".</param> public SuppressionDescriptor( string id, string suppressedDiagnosticId, LocalizableString justification) { if (string.IsNullOrWhiteSpace(id)) { throw new ArgumentException(CodeAnalysisResources.SuppressionIdCantBeNullOrWhitespace, nameof(id)); } if (string.IsNullOrWhiteSpace(suppressedDiagnosticId)) { throw new ArgumentException(CodeAnalysisResources.DiagnosticIdCantBeNullOrWhitespace, nameof(suppressedDiagnosticId)); } this.Id = id; this.SuppressedDiagnosticId = suppressedDiagnosticId; this.Justification = justification ?? throw new ArgumentNullException(nameof(justification)); } public bool Equals(SuppressionDescriptor? other) { if (ReferenceEquals(this, other)) { return true; } return other != null && this.Id == other.Id && this.SuppressedDiagnosticId == other.SuppressedDiagnosticId && this.Justification.Equals(other.Justification); } public override bool Equals(object? obj) { return Equals(obj as SuppressionDescriptor); } public override int GetHashCode() { return Hash.Combine(this.Id.GetHashCode(), Hash.Combine(this.SuppressedDiagnosticId.GetHashCode(), this.Justification.GetHashCode())); } /// <summary> /// Returns a flag indicating if the suppression is disabled for the given <see cref="CompilationOptions"/>. /// </summary> /// <param name="compilationOptions">Compilation options</param> internal bool IsDisabled(CompilationOptions compilationOptions) { if (compilationOptions == null) { throw new ArgumentNullException(nameof(compilationOptions)); } return compilationOptions.SpecificDiagnosticOptions.TryGetValue(Id, out var reportDiagnostic) && reportDiagnostic == ReportDiagnostic.Suppress; } } }