src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAbstractValue.cs (26)
23public static PointsToAbstractValue Undefined { get; } = new PointsToAbstractValue(PointsToAbstractValueKind.Undefined, NullAbstractValue.Undefined);
24public static PointsToAbstractValue Invalid { get; } = new PointsToAbstractValue(PointsToAbstractValueKind.Invalid, NullAbstractValue.Invalid);
25public static PointsToAbstractValue Unknown { get; } = new PointsToAbstractValue(PointsToAbstractValueKind.Unknown, NullAbstractValue.MaybeNull);
26public static PointsToAbstractValue UnknownNull { get; } = new PointsToAbstractValue(PointsToAbstractValueKind.UnknownNull, NullAbstractValue.Null);
27public static PointsToAbstractValue UnknownNotNull { get; } = new PointsToAbstractValue(PointsToAbstractValueKind.UnknownNotNull, NullAbstractValue.NotNull);
28public static PointsToAbstractValue NoLocation { get; } = new PointsToAbstractValue(ImmutableHashSet.Create(AbstractLocation.NoLocation), NullAbstractValue.NotNull);
29public static PointsToAbstractValue NullLocation { get; } = new PointsToAbstractValue(ImmutableHashSet.Create(AbstractLocation.Null), NullAbstractValue.Null);
31private PointsToAbstractValue(ImmutableHashSet<AbstractLocation> locations, NullAbstractValue nullState)
34Debug.Assert(locations.All(location => !location.IsNull) || nullState != NullAbstractValue.NotNull);
35Debug.Assert(nullState != NullAbstractValue.Undefined);
36Debug.Assert(nullState != NullAbstractValue.Invalid);
53NullState = NullAbstractValue.NotNull;
56private PointsToAbstractValue(PointsToAbstractValueKind kind, NullAbstractValue nullState)
72return new PointsToAbstractValue(ImmutableHashSet.Create(location), mayBeNull ? NullAbstractValue.MaybeNull : NullAbstractValue.NotNull);
80internal static PointsToAbstractValue Create(ImmutableHashSet<AbstractLocation> locations, NullAbstractValue nullState)
101NullAbstractValue.Null => UnknownNull,
103NullAbstractValue.NotNull => UnknownNotNull,
122if (NullState == NullAbstractValue.NotNull)
142return new PointsToAbstractValue(locations, NullAbstractValue.NotNull);
149if (NullState == NullAbstractValue.Null)
159return new PointsToAbstractValue(Locations, NullAbstractValue.Null);
165Debug.Assert(NullState != NullAbstractValue.Null);
167if (NullState == NullAbstractValue.MaybeNull)
178return new PointsToAbstractValue(Locations, NullAbstractValue.MaybeNull);
184public NullAbstractValue NullState { get; }
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysis.PointsToDataFlowOperationVisitor.cs (45)
350private static bool IsValidValueForPredicateAnalysis(NullAbstractValue value)
354NullAbstractValue.Null
355or NullAbstractValue.NotNull => true,
383SetValueForNullCompare(leftOperand, value: NullAbstractValue.Null, equals: equals, predicateValueKind: ref predicateValueKind, targetAnalysisData: targetAnalysisData);
394NullAbstractValue value = GetNullAbstractValue(assignedValueOperation);
400NullAbstractValue value,
411bool inferInTargetAnalysisData = !(value == NullAbstractValue.NotNull && !equals);
438NullAbstractValue value,
457NullAbstractValue negatedValue = NegatePredicateValue(value);
464NullAbstractValue existingNullValue = existingPointsToValue.NullState;
466(existingNullValue == NullAbstractValue.Null || value == NullAbstractValue.Null))
472negatedValue = NullAbstractValue.Invalid;
480value = NullAbstractValue.Invalid;
488if (value != NullAbstractValue.Invalid && negatedValue != NullAbstractValue.Invalid)
504NullAbstractValue nullState,
514Debug.Assert(IsValidValueForPredicateAnalysis(nullState) || nullState == NullAbstractValue.Invalid);
532if (nullState == NullAbstractValue.Null && conversion.IsImplicit ||
533nullState == NullAbstractValue.NotNull && !conversion.IsImplicit)
547NullAbstractValue.Null => existingValue.MakeNull(),
549NullAbstractValue.NotNull => existingValue.MakeNonNull(),
551NullAbstractValue.Invalid => PointsToAbstractValue.Invalid,
561private static NullAbstractValue NegatePredicateValue(NullAbstractValue value)
567NullAbstractValue.Null => NullAbstractValue.NotNull,
569NullAbstractValue.NotNull => NullAbstractValue.Null,
791Debug.Assert(value.NullState == NullAbstractValue.NotNull || DataFlowAnalysisContext.InterproceduralAnalysisData != null);
1052private NullAbstractValue GetNullStateBasedOnInstanceOrReferenceValue(IOperation? referenceOrInstance, ITypeSymbol? operationType, NullAbstractValue defaultValue)
1056return NullAbstractValue.NotNull;
1059NullAbstractValue referenceOrInstanceValue = referenceOrInstance != null ? GetNullAbstractValue(referenceOrInstance) : NullAbstractValue.NotNull;
1062NullAbstractValue.Invalid
1063or NullAbstractValue.Null => referenceOrInstanceValue,
1070NullAbstractValue nullState = GetNullStateBasedOnInstanceOrReferenceValue(referenceOrInstance, operation.Type, defaultValue.NullState);
1073NullAbstractValue.NotNull => defaultValue.MakeNonNull(),
1075NullAbstractValue.Null => defaultValue.MakeNull(),
1077NullAbstractValue.Invalid => PointsToAbstractValue.Invalid,
1089value.NullState != NullAbstractValue.Null)
1103value.NullState != NullAbstractValue.Null)
1153if (value.NullState == NullAbstractValue.NotNull)
1174if (operandValue.NullState == NullAbstractValue.NotNull &&