File: src\47c588c5b8785708\ParameterValidationAnalysis.ParameterValidationAbstractValueDomain.cs
Web Access
Project: src\sdk\src\Microsoft.CodeAnalysis.NetAnalyzers\src\Microsoft.CodeAnalysis.NetAnalyzers\Microsoft.CodeAnalysis.NetAnalyzers.csproj (Microsoft.CodeAnalysis.NetAnalyzers)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Collections.Generic;

namespace Microsoft.CodeAnalysis.FlowAnalysis.DataFlow.ParameterValidationAnalysis
{
    using ParameterValidationAnalysisData = DictionaryAnalysisData<AbstractLocation, ParameterValidationAbstractValue>;

    internal partial class ParameterValidationAnalysis : ForwardDataFlowAnalysis<ParameterValidationAnalysisData, ParameterValidationAnalysisContext, ParameterValidationAnalysisResult, ParameterValidationBlockAnalysisResult, ParameterValidationAbstractValue>
    {
        /// <summary>
        /// Abstract value domain for <see cref="ParameterValidationAnalysis"/> to merge and compare <see cref="ParameterValidationAbstractValue"/> values.
        /// </summary>
        private class ParameterValidationAbstractValueDomain : AbstractValueDomain<ParameterValidationAbstractValue>
        {
            public static ParameterValidationAbstractValueDomain Default = new();

            private ParameterValidationAbstractValueDomain() { }

            public override ParameterValidationAbstractValue Bottom => ParameterValidationAbstractValue.NotApplicable;

            public override ParameterValidationAbstractValue UnknownOrMayBeValue => ParameterValidationAbstractValue.MayBeValidated;

            public override int Compare(ParameterValidationAbstractValue oldValue, ParameterValidationAbstractValue newValue, bool assertMonotonicity)
            {
                return Comparer<ParameterValidationAbstractValue>.Default.Compare(oldValue, newValue);
            }

            public override ParameterValidationAbstractValue Merge(ParameterValidationAbstractValue value1, ParameterValidationAbstractValue value2)
            {
                if (value1 == value2)
                {
                    return value1;
                }
                else if (value1 == ParameterValidationAbstractValue.NotApplicable ||
                    value2 == ParameterValidationAbstractValue.NotApplicable)
                {
                    return ParameterValidationAbstractValue.NotApplicable;
                }

                return ParameterValidationAbstractValue.MayBeValidated;
            }
        }
    }
}