File: Data\StaticWebAssetsDiscoveryPattern.cs
Web Access
Project: ..\..\..\src\StaticWebAssetsSdk\Tasks\Microsoft.NET.Sdk.StaticWebAssets.Tasks.csproj (Microsoft.NET.Sdk.StaticWebAssets.Tasks)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#nullable disable
 
using System.Diagnostics;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
 
namespace Microsoft.AspNetCore.StaticWebAssets.Tasks;
 
[DebuggerDisplay($"{{{nameof(GetDebuggerDisplay)}(),nq}}")]
public class StaticWebAssetsDiscoveryPattern
{
    public string Name { get; set; }
 
    public string Source { get; set; }
 
    public string ContentRoot { get; set; }
 
    public string BasePath { get; set; }
 
    public string Pattern { get; set; }
 
    public override bool Equals(object obj) =>
        obj is StaticWebAssetsDiscoveryPattern pattern
        && Name == pattern.Name
        && Source == pattern.Source
        && ContentRoot == pattern.ContentRoot
        && BasePath == pattern.BasePath
        && Pattern == pattern.Pattern;
 
    public override int GetHashCode()
    {
#if NET6_0_OR_GREATER
        return HashCode.Combine(Name, Source, ContentRoot, BasePath, Pattern);
#else
        var hashCode = 1513180540;
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Name);
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Source);
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(ContentRoot);
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(BasePath);
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Pattern);
        return hashCode;
#endif
    }
 
    public ITaskItem ToTaskItem()
    {
        var result = new TaskItem(Name);
 
        result.SetMetadata(nameof(ContentRoot), ContentRoot);
        result.SetMetadata(nameof(BasePath), BasePath);
        result.SetMetadata(nameof(Pattern), Pattern);
        result.SetMetadata(nameof(Source), Source);
 
        return result;
    }
 
    internal static bool HasSourceId(ITaskItem pattern, string source) =>
        HasSourceId(pattern.GetMetadata(nameof(Source)), source);
 
    internal static bool HasSourceId(string candidate, string source) =>
        string.Equals(candidate, source, StringComparison.Ordinal);
 
    internal bool HasSourceId(string source) => HasSourceId(Source, source);
 
    internal static StaticWebAssetsDiscoveryPattern FromTaskItem(ITaskItem pattern)
    {
        var result = new StaticWebAssetsDiscoveryPattern
        {
            Name = pattern.ItemSpec,
            Source = pattern.GetMetadata(nameof(Source)),
            BasePath = pattern.GetMetadata(nameof(BasePath)),
            ContentRoot = pattern.GetMetadata(nameof(ContentRoot)),
            Pattern = pattern.GetMetadata(nameof(Pattern))
        };
 
        return result;
    }
 
    public override string ToString() => string.Join(" - ", Name, Source, Pattern, BasePath, ContentRoot);
 
    private string GetDebuggerDisplay() => ToString();
}