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)); }
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; // Если найдены хвост и голова, значит найдено всё тело. } }