Beispiel #1
0
        public static string GetDefaultFixAllTitle(
            FixAllScope fixAllScope,
            ImmutableHashSet <string> diagnosticIds,
            Document triggerDocument,
            Project triggerProject)
        {
            string diagnosticId;

            if (diagnosticIds.Count == 1)
            {
                diagnosticId = diagnosticIds.Single();
            }
            else
            {
                diagnosticId = string.Join(",", diagnosticIds.ToArray());
            }

            switch (fixAllScope)
            {
            case FixAllScope.Custom:
                return(string.Format(Resources.Fix_all_0, diagnosticId));

            case FixAllScope.Document:
                return(string.Format(Resources.Fix_all_0_in_1, diagnosticId, triggerDocument.Name));

            case FixAllScope.Project:
                return(string.Format(Resources.Fix_all_0_in_1, diagnosticId, triggerProject.Name));

            case FixAllScope.Solution:
                return(string.Format(Resources.Fix_all_0_in_Solution, diagnosticId));

            default:
                throw ExceptionUtilities.UnexpectedValue(fixAllScope);
            }
        }
        internal static PointsToAbstractValue Create(ImmutableHashSet <AbstractLocation> locations, NullAbstractValue nullState)
        {
            Debug.Assert(!locations.IsEmpty);

            if (locations.Count == 1)
            {
                var location = locations.Single();
                if (location.IsNull)
                {
                    return(NullLocation);
                }
                if (location.IsNoLocation)
                {
                    return(NoLocation);
                }
            }
            else if (locations.Count > LocationThreshold)
            {
                return(nullState switch
                {
                    NullAbstractValue.Null => UnknownNull,

                    NullAbstractValue.NotNull => UnknownNotNull,

                    _ => Unknown,
                });
        internal static PointsToAbstractValue Create(ImmutableHashSet <AbstractLocation> locations, NullAbstractValue nullState)
        {
            Debug.Assert(!locations.IsEmpty);

            if (locations.Count == 1)
            {
                var location = locations.Single();
                if (location.IsNull)
                {
                    return(NullLocation);
                }
                if (location.IsNoLocation)
                {
                    return(NoLocation);
                }
            }
            else if (locations.Count > LocationThreshold)
            {
                switch (nullState)
                {
                case NullAbstractValue.Null:
                    return(UnknownNull);

                case NullAbstractValue.NotNull:
                    return(UnknownNotNull);

                default:
                    return(Unknown);
                }
            }

            return(new PointsToAbstractValue(locations, nullState));
        }
        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));
        }
        public static PointsToAbstractValue Create(ImmutableHashSet <AbstractLocation> locations, NullAbstractValue nullState)
        {
            Debug.Assert(!locations.IsEmpty);

            if (locations.Count == 1)
            {
                var location = locations.Single();
                if (location.IsNull)
                {
                    return(NullLocation);
                }
                if (location.IsNoLocation)
                {
                    return(NoLocation);
                }
            }

            return(new PointsToAbstractValue(locations, nullState));
        }
Beispiel #6
0
            static private SnakeInfo CalculatePlayerSnake(
                IReadOnlyDictionary <Point, PointInfo> locationToPointInfoIndex,
                IReadOnlyDictionary <BoardElement, ImmutableHashSet <PointInfo> > boardElementToInfosIndex,
                IReadOnlyList <ISnakeInfo> previousTickSnakeInfos,
                IReadOnlyDictionary <Point, PointInfo> previousTickLocationToPointInfoIndex)
            {
                SnakeInfo playerSnake = default;
                ImmutableHashSet <PointInfo> playerHeads = GetPlayerHeads(boardElementToInfosIndex);
                PointInfo head = playerHeads?.Single();

                if (head != default)
                {
                    playerSnake = new SnakeInfo
                    {
                        FoundHead     = true,
                        FuryTicksLeft = head.BoardElement == BoardElement.HeadEvil ? -1 : 0,
                        IsActive      =
                            head.BoardElement != BoardElement.HeadSleep &&
                            head.BoardElement != BoardElement.HeadDead,
                        IsPlayerSnake = true
                    };

                    playerSnake.AddHead(head.Location);
                }
                else
                {
                    ImmutableHashSet <PointInfo> playerTails = GetPlayerTails(boardElementToInfosIndex);
                    PointInfo tail = playerTails?.SingleOrDefault();
                    if (tail != default)
                    {
                        playerSnake = new SnakeInfo
                        {
                            FoundTail     = true,
                            FuryTicksLeft = -2,
                            IsActive      = tail.BoardElement != BoardElement.TailInactive,
                            IsPlayerSnake = true
                        };

                        playerSnake.AddTail(tail.Location);
                    }
                }

                if (playerSnake == default)
                {
                    playerSnake = new SnakeInfo
                    {
                        FoundHead     = false,
                        FoundTail     = false,
                        IsPlayerSnake = true,
                        FuryTicksLeft = -2,
                        // Неактивного тела не бывает.
                        IsActive = true
                    };

                    playerSnake.AddTail(GetPlayerBodyPart(boardElementToInfosIndex).First().Location);
                }

                bool foundNext = true;

                while (foundNext)
                {
                    foundNext = false;

                    if (playerSnake.FoundHead)
                    {
                        PointInfo currentTail = locationToPointInfoIndex[playerSnake.Tail];
                        if (TryGetNextPlayerPoint(playerSnake, currentTail, out PointInfo newTail, searchForBody: true))
                        {
                            playerSnake.AddTail(newTail.Location);
                            foundNext = true;
                        }
                        else if (TryGetNextPlayerPoint(playerSnake, currentTail, out newTail, searchForTail: true))
                        {
                            playerSnake.AddTail(newTail.Location);
                            playerSnake.FoundTail = true;
                            // Если найдены хвост и голова, значит найдено всё тело.
                        }
                    }