File: Data\ReferencedProjectConfiguration.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.Globalization;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
 
namespace Microsoft.AspNetCore.StaticWebAssets.Tasks;
 
public partial class StaticWebAssetsManifest
{
    public class ReferencedProjectConfiguration
    {
        internal static ReferencedProjectConfiguration Create(string identity, string source) => new()
        {
            Identity = identity,
            Source = source
        };
 
        public string Identity { get; set; }
 
        public int Version { get; set; }
 
        public string Source { get; set; }
 
        public string GetPublishAssetsTargets { get; set; }
 
        public string AdditionalPublishProperties { get; set; }
 
        public string AdditionalPublishPropertiesToRemove { get; set; }
 
        public string GetBuildAssetsTargets { get; set; }
 
        public string AdditionalBuildProperties { get; set; }
 
        public string AdditionalBuildPropertiesToRemove { get; set; }
 
        public override bool Equals(object obj) => obj is ReferencedProjectConfiguration reference
            && Identity == reference.Identity
            && Version == reference.Version
            && Source == reference.Source
            && GetBuildAssetsTargets == reference.GetBuildAssetsTargets
            && AdditionalBuildProperties == reference.AdditionalBuildProperties
            && AdditionalBuildPropertiesToRemove == reference.AdditionalBuildPropertiesToRemove
            && GetPublishAssetsTargets == reference.GetPublishAssetsTargets
            && AdditionalPublishProperties == reference.AdditionalPublishProperties
            && AdditionalPublishPropertiesToRemove == reference.AdditionalPublishPropertiesToRemove;
 
        public override int GetHashCode()
        {
#if NET6_0_OR_GREATER
            var hashCode = new HashCode();
            hashCode.Add(Identity);
            hashCode.Add(Version);
            hashCode.Add(Source);
            hashCode.Add(GetBuildAssetsTargets);
            hashCode.Add(AdditionalBuildProperties);
            hashCode.Add(AdditionalBuildPropertiesToRemove);
            hashCode.Add(GetPublishAssetsTargets);
            hashCode.Add(AdditionalPublishProperties);
            hashCode.Add(AdditionalPublishPropertiesToRemove);
 
            return hashCode.ToHashCode();
#else
            var hashCode = -868952447;
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Identity);
            hashCode = hashCode * -1521134295 + EqualityComparer<int>.Default.GetHashCode(Version);
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Source);
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(GetBuildAssetsTargets);
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(AdditionalBuildProperties);
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(AdditionalBuildPropertiesToRemove);
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(GetPublishAssetsTargets);
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(AdditionalPublishProperties);
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(AdditionalPublishPropertiesToRemove);
            return hashCode;
#endif
        }
 
        public ITaskItem ToTaskItem()
        {
            var result = new TaskItem(Identity);
 
            result.SetMetadata(nameof(Version), Version.ToString(CultureInfo.InvariantCulture));
            result.SetMetadata(nameof(Source), Source);
            result.SetMetadata(nameof(GetBuildAssetsTargets), GetBuildAssetsTargets);
            result.SetMetadata(nameof(AdditionalBuildProperties), AdditionalBuildProperties);
            result.SetMetadata(nameof(AdditionalBuildPropertiesToRemove), AdditionalBuildPropertiesToRemove);
            result.SetMetadata(nameof(GetPublishAssetsTargets), GetPublishAssetsTargets);
            result.SetMetadata(nameof(AdditionalPublishProperties), AdditionalPublishProperties);
            result.SetMetadata(nameof(AdditionalPublishPropertiesToRemove), AdditionalPublishPropertiesToRemove);
 
            return result;
        }
 
        internal static ReferencedProjectConfiguration FromTaskItem(ITaskItem arg)
        {
            var result = new ReferencedProjectConfiguration
            {
                Identity = arg.GetMetadata("FullPath"),
                Version = int.Parse(arg.GetMetadata(nameof(Version)), CultureInfo.InvariantCulture),
                Source = arg.GetMetadata(nameof(Source)),
                GetBuildAssetsTargets = arg.GetMetadata(nameof(GetBuildAssetsTargets)),
                AdditionalBuildProperties = arg.GetMetadata(nameof(AdditionalBuildProperties)),
                AdditionalBuildPropertiesToRemove = arg.GetMetadata(nameof(AdditionalBuildPropertiesToRemove)),
                GetPublishAssetsTargets = arg.GetMetadata(nameof(GetPublishAssetsTargets)),
                AdditionalPublishProperties = arg.GetMetadata(nameof(AdditionalPublishProperties)),
                AdditionalPublishPropertiesToRemove = arg.GetMetadata(nameof(AdditionalPublishPropertiesToRemove))
            };
 
            return result;
        }
    }
}