File: PackageRank.cs
Web Access
Project: ..\..\..\src\Tasks\Microsoft.NET.Build.Extensions.Tasks\Microsoft.NET.Build.Extensions.Tasks.csproj (Microsoft.NET.Build.Extensions.Tasks)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace Microsoft.NET.Build.Tasks.ConflictResolution
{
    class PackageRank
    {
        private Dictionary<string, int> packageRanks;
 
        public PackageRank(string[]? packageIds)
        {
            var numPackages = packageIds?.Length ?? 0;
 
            // cache ranks for fast lookup
            packageRanks = new Dictionary<string, int>(numPackages, StringComparer.OrdinalIgnoreCase);
 
            for (int i = numPackages - 1; i >= 0; i--)
            {
                var preferredPackageId = packageIds?[i].Trim();
 
                if (preferredPackageId is not null && preferredPackageId.Length != 0)
                {
                    // overwrite any duplicates, lowest rank will win.
                    packageRanks[preferredPackageId] = i;
                }
            }
        }
 
        /// <summary>
        /// Get's the rank of a package, lower packages are preferred
        /// </summary>
        /// <param name="packageId">id of package</param>
        /// <returns>rank of package</returns>
        public int GetPackageRank(string? packageId)
        {
            int rank;
            if (packageId != null && packageRanks.TryGetValue(packageId, out rank))
            {
                return rank;
            }
 
            return int.MaxValue;
        }
    }
}