// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using Microsoft.CodeAnalysis;
using Microsoft.DotNet.ApiCompatibility.Rules;

namespace Microsoft.DotNet.ApiCompatibility.Mapping
{
    /// <summary>
    /// Object that represents a mapping between two <see cref="ISymbol"/> objects.
    /// </summary>
    /// <param name="ruleRunner">The <see cref="IRuleRunner"/> that compares the member mapper elements.</param>
    /// <param name="settings">The <see cref="IMapperSettings"/> used to compare the member mapper elements.</param>
    /// <param name="rightSetSize">The number of elements in the right set to compare.</param>
    /// <param name="containingType">The containing <see cref="ITypeMapper"/>.</param>
    public class MemberMapper(IRuleRunner ruleRunner,
        IMapperSettings settings,
        int rightSetSize,
        ITypeMapper containingType) : ElementMapper<ISymbol>(ruleRunner, settings, rightSetSize), IMemberMapper
    {
        /// <inheritdoc />
        public ITypeMapper ContainingType { get; } = containingType;

        // If we got to this point it means that ContainingType.Left is not null.
        // Because of that we can only check ContainingType.Right.
        internal bool ShouldDiffElement(int rightIndex) =>
            ContainingType.Right.Length == 1 || ContainingType.Right[rightIndex] != null;
    }
}
