private ValueContentAbstractValue(ImmutableHashSet <object?> literalValues, ValueContainsNonLiteralState nonLiteralState)
 {
     LiteralValues   = literalValues;
     NonLiteralState = nonLiteralState;
 }
 private static ValueContentAbstractValue Create(ImmutableHashSet <object?> literalValues, ValueContainsNonLiteralState nonLiteralState)
 {
     if (literalValues.IsEmpty)
     {
         return(nonLiteralState switch
         {
             ValueContainsNonLiteralState.Undefined => UndefinedState,
             ValueContainsNonLiteralState.Invalid => InvalidState,
             ValueContainsNonLiteralState.No => DoesNotContainLiteralOrNonLiteralState,
             _ => MayBeContainsNonLiteralState,
         });
        private static ValueContentAbstractValue Create(ImmutableHashSet <object> literalValues, ValueContainsNonLiteralState nonLiteralState)
        {
            if (literalValues.IsEmpty)
            {
                switch (nonLiteralState)
                {
                case ValueContainsNonLiteralState.Undefined:
                    return(UndefinedState);

                case ValueContainsNonLiteralState.Invalid:
                    return(InvalidState);

                case ValueContainsNonLiteralState.No:
                    return(DoesNotContainLiteralOrNonLiteralState);

                default:
                    return(MayBeContainsNonLiteralState);
                }
            }
            else if (literalValues.Count == 1 && nonLiteralState == ValueContainsNonLiteralState.No)
            {
                switch (literalValues.Single())
                {
                case bool boolVal:
                    return(boolVal ? ContainsTrueLiteralState : ContainsFalseLiteralState);

                case string stringVal:
                    if (stringVal.Length == 0)
                    {
                        return(ContainsEmptyStringLiteralState);
                    }

                    break;

                case int intValue:
                    if (intValue == 0)
                    {
                        return(ContainsZeroIntergralLiteralState);
                    }

                    break;
                }
            }


            return(new ValueContentAbstractValue(literalValues, nonLiteralState));
        }