File: Infrastructure\EmbeddedSyntax\EmbeddedDiagnostic.cs
Web Access
Project: src\src\Framework\AspNetCoreAnalyzers\src\Analyzers\Microsoft.AspNetCore.App.Analyzers.csproj (Microsoft.AspNetCore.App.Analyzers)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Analyzers.Infrastructure;
using Microsoft.CodeAnalysis.Text;
 
namespace Microsoft.AspNetCore.Analyzers.Infrastructure.EmbeddedSyntax;
 
internal struct EmbeddedDiagnostic : IEquatable<EmbeddedDiagnostic>
{
    public readonly string Message;
    public readonly TextSpan Span;
 
    public EmbeddedDiagnostic(string message, TextSpan span)
    {
        AnalyzerDebug.Assert(message != null);
        Message = message;
        Span = span;
    }
 
    public override bool Equals(object? obj)
        => obj is EmbeddedDiagnostic diagnostic && Equals(diagnostic);
 
    public bool Equals(EmbeddedDiagnostic other)
        => Message == other.Message &&
           Span.Equals(other.Span);
 
    public override string ToString()
        => Message;
 
    public override int GetHashCode()
    {
        unchecked
        {
            var hashCode = -954867195;
            hashCode = hashCode * -1521134295 + base.GetHashCode();
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Message);
            hashCode = hashCode * -1521134295 + EqualityComparer<TextSpan>.Default.GetHashCode(Span);
            return hashCode;
        }
    }
 
    public static bool operator ==(EmbeddedDiagnostic diagnostic1, EmbeddedDiagnostic diagnostic2)
        => diagnostic1.Equals(diagnostic2);
 
    public static bool operator !=(EmbeddedDiagnostic diagnostic1, EmbeddedDiagnostic diagnostic2)
        => !(diagnostic1 == diagnostic2);
}