286 references to NullableFlowState
Microsoft.CodeAnalysis.CSharp (286)
Binder\Semantics\BestTypeInferrer.cs (3)
36public static NullableFlowState GetNullableState(ArrayBuilder<TypeWithState> types) 38NullableFlowState result = NullableFlowState.NotNull;
FlowAnalysis\NullableWalker_Patterns.cs (7)
466SetState(ref State, outputSlot, NullableFlowState.NotNull); 518SetState(ref this.State, outputSlot, NullableFlowState.NotNull); // Slice value is assumed to be never null 526var inputState = GetState(ref this.State, inputSlot); 631var tempState = GetState(ref this.State, tempSlot); 999receiverType: TypeWithState.Create(inputType, NullableFlowState.NotNull), 1150NullableFlowState inferredState; 1200NullableFlowState inferredState = BestTypeInferrer.GetNullableState(resultTypes);
FlowAnalysis\NullableWalker.cs (203)
145public VisitResult(TypeSymbol? type, NullableAnnotation annotation, NullableFlowState state) 235private static readonly TypeWithState _invalidType = TypeWithState.Create(new UnsupportedMetadataTypeSymbol(), NullableFlowState.NotNull); 844var memberState = GetState(ref state, slot); 845var badState = symbolType.Type.IsPossiblyNullableReferenceTypeTypeParameter() && (annotations & FlowAnalysisAnnotations.NotNull) == 0 846? NullableFlowState.MaybeDefault 847: NullableFlowState.MaybeNull; 909SetState(ref this.State, memberSlot, type.Type.IsPossiblyNullableReferenceTypeTypeParameter() ? NullableFlowState.MaybeDefault : NullableFlowState.MaybeNull); 1229var parameterState = GetState(ref state, memberSlot); 1261SetState(ref this.State, memberSlot, NullableFlowState.MaybeNull); 1374var parameterState = GetState(ref state, slot); 1430var parameterState = GetState(ref stateWhen, slot); 1457private void EnforceNotNullIfNotNull(SyntaxNode? syntaxOpt, LocalState state, ImmutableArray<ParameterSymbol> parameters, ImmutableHashSet<string> inputParamNames, NullableFlowState outputState, ParameterSymbol? outputParam) 2045private NullableFlowState GetState(ref LocalState state, int slot) 2048return NullableFlowState.NotNull; 2054private void SetState(ref LocalState state, int slot, NullableFlowState value, bool useNotNullsAsDefault = false) 2076private NullableFlowState GetDefaultState(ref LocalState state, int slot) 2081return NullableFlowState.NotNull; 2110return NullableFlowState.NotNull; 2458private static bool ShouldReportNullableAssignment(TypeWithAnnotations type, NullableFlowState state) 2475case NullableFlowState.NotNull: 2477case NullableFlowState.MaybeNull: 2553valueType.State == NullableFlowState.MaybeDefault; 2735var newState = valueType.State; 2846NullableFlowState value = isDefaultValue ? NullableFlowState.MaybeNull : fieldOrPropertyType.ToTypeWithState().State; 2858NullableFlowState.NotNull; 2906/// and the new state is not <see cref="NullableFlowState.NotNull"/>, this method should be called to perform the 2910private void SetStateAndTrackForFinally(ref LocalState state, int slot, NullableFlowState newState) 2914if (newState != NullableFlowState.NotNull && NonMonotonicState.HasValue) 2999private NullableFlowState GetDefaultState(int containingSlot, Symbol symbol) 3092var state = GetParameterState(parameterType, parameter.FlowAnalysisAnnotations).State; 3130return TypeWithState.Create(parameterType.Type, NullableFlowState.MaybeDefault); 3135return TypeWithState.Create(parameterType.Type, NullableFlowState.NotNull); 3438SetState(ref state, slot, NullableFlowState.NotNull); 3711placeholderResult = new VisitResult(placeholder.Type, NullableAnnotation.NotAnnotated, NullableFlowState.NotNull); 3962SetResultType(node, TypeWithState.Create(null, NullableFlowState.NotNull)); 3970SetResultType(node, TypeWithState.Create(null, NullableFlowState.NotNull)); 4066NullableFlowState.NotNull)); 4248NullableFlowState resultState = getResultState(node, collectionKind); 4264static NullableFlowState getResultState(BoundCollectionExpression node, CollectionExpressionTypeKind collectionKind) 4276return NullableFlowState.NotNull; 4347(int slot, NullableFlowState resultState, Func<TypeSymbol, MethodSymbol?, ImmutableArray<VisitResult>, int>? initialStateInferenceCompletion) = 4367NullableFlowState resultState, 4396NullableFlowState resultState) 4398Debug.Assert(resultState == NullableFlowState.NotNull); 4430(int slot, NullableFlowState resultState, Func<TypeSymbol, MethodSymbol?, ImmutableArray<VisitResult>, int>? completion) inferInitialObjectState( 4438return (-1, NullableFlowState.NotNull, inferInitialObjectStateAsContinuation(node, arguments, argumentResults, hasObjectInitializer)); 4444var resultState = NullableFlowState.NotNull; 4476resultState = NullableFlowState.MaybeNull; 4504SetUnionValueState(slot, valueProperty, NullableFlowState.NotNull); 4544Debug.Assert(resultState == NullableFlowState.NotNull); 4553NullableFlowState operandState; 4568private void SetUnionValueState(int containingSlot, PropertySymbol valueProperty, NullableFlowState state) 4702var result = new VisitResult(objectInitializer.Type, NullableAnnotation.NotAnnotated, NullableFlowState.NotNull); 4727argumentResults = argumentResults.SetItem(0, new VisitResult(containingType, NullableAnnotation.NotAnnotated, NullableFlowState.NotNull)); 4853firstArgumentResult = new VisitResult(containingType, NullableAnnotation.NotAnnotated, NullableFlowState.NotNull); 4946SetAnalyzedNullability(node.ImplicitReceiverOpt, new VisitResult(node.ImplicitReceiverOpt.Type, NullableAnnotation.NotAnnotated, NullableFlowState.NotNull)); 5004SetResultType(node, TypeWithState.Create(node.Type, NullableFlowState.NotNull)); 5009var resultType = TypeWithState.Create(node.Type, NullableFlowState.NotNull); 5117SetResultType(node, TypeWithState.Create(anonymousType, NullableFlowState.NotNull)); 5149SetResultType(node, TypeWithState.Create(node.Type, NullableFlowState.NotNull)); 5154SetResultType(node, TypeWithState.Create(arrayType, NullableFlowState.NotNull)); 5230var elementState = BestTypeInferrer.GetNullableState(expressionTypes); 5432NullableFlowState resultState = NullableFlowState.NotNull; 5460resultState = NullableFlowState.MaybeNull; // Delegate removal can produce null. 5463resultState = NullableFlowState.NotNull; 6068SetState(ref stateToUpdate, slot, NullableFlowState.NotNull); 6097SetState(ref state, slot, NullableFlowState.NotNull); 6122if (GetState(ref state, slot) == NullableFlowState.NotNull) 6125SetState(ref state, slot, NullableFlowState.MaybeNull); 6154SetState(ref state, childSlot, NullableFlowState.NotNull); 6233SetState(ref this.State, leftSlot, NullableFlowState.NotNull); 6288BoundNullCoalescingOperatorResultKind.NoCommonType => (node.Type, NullableFlowState.NotNull), 6293BoundNullCoalescingOperatorResultKind.RightDynamicType => (rightResultType!, NullableFlowState.NotNull), 6300(TypeSymbol ResultType, NullableFlowState LeftState) getLeftResultType(TypeSymbol leftType, TypeSymbol rightType) 6311return (rightType, NullableFlowState.NotNull); 6317return (leftType, NullableFlowState.NotNull); 6320(TypeSymbol ResultType, NullableFlowState LeftState) getResultStateWithRightType(TypeSymbol leftType, TypeSymbol rightType) 6332TypeWithState.Create(leftType, NullableFlowState.NotNull), 6343return (rightType, NullableFlowState.NotNull); 6516SetResultType(node, TypeWithState.Create(resultType, NullableFlowState.MaybeDefault)); 6571var rValueState = consequenceRValue.State.Join(alternativeRValue.State); 6679NullableFlowState resultState; 6839SetResultType(node, TypeWithState.Create(rvalueType, NullableFlowState.NotNull)); 7377private NullableFlowState LearnFromCompareExchangeMethod(in CompareExchangeInfo compareExchangeInfo) 7397return NullableFlowState.NotNull; 7407var valueFlowState = compareExchangeInfo.Results[valueIndex].RValueType.State; 7414var locationFlowState = compareExchangeInfo.Results[locationIndex].RValueType.State; 7539return TypeWithState.Create(typeWithState.Type, NullableFlowState.NotNull); 7544return TypeWithState.Create(typeWithState.Type, NullableFlowState.MaybeDefault); 8160SetState(ref state, memberSlot, NullableFlowState.NotNull); 8462var adjustedState = LearnFromCompareExchangeMethod(in compareExchangeInfoOpt); 8605return TypeWithState.Create(typeWithState.Type, NullableFlowState.MaybeDefault); 8611return TypeWithState.Create(typeWithState.Type, NullableFlowState.NotNull); 8626return TypeWithState.Create(typeWithState.Type, NullableFlowState.MaybeDefault); 8630return TypeWithState.Create(typeWithState.Type, NullableFlowState.NotNull); 8645return TypeWithState.Create(typeWithState.Type, NullableFlowState.MaybeDefault); 8649return TypeWithState.Create(typeWithState.Type, NullableFlowState.NotNull); 9218NullableFlowState state = GetState(ref this.State, slot); 9493SetResultType(node, TypeWithState.Create(null, NullableFlowState.NotNull)); 9500SetState(ref this.State, slot, NullableFlowState.NotNull); 9518SetResultType(node, TypeWithState.Create(tupleOpt, NullableFlowState.NotNull)); 9641SetState(ref this.State, targetFieldSlot, NullableFlowState.NotNull); 9658SetState(ref this.State, targetFieldSlot, NullableFlowState.NotNull); 9953NullableFlowState resultState = NullableFlowState.NotNull; 9985resultState = NullableFlowState.NotNull; 10010return TypeWithState.Create(targetType, NullableFlowState.NotNull); 10016resultState = NullableFlowState.NotNull; 10020resultState = NullableFlowState.NotNull; 10025resultState = NullableFlowState.NotNull; 10085resultState = NullableFlowState.NotNull; 10247resultState = NullableFlowState.NotNull; 10316static TypeWithState calculateResultType(TypeWithAnnotations targetTypeWithNullability, bool fromExplicitCast, NullableFlowState resultState, bool isSuppressed, TypeSymbol targetType) 10320resultState = NullableFlowState.NotNull; 10325resultState = targetType?.IsTypeParameterDisallowingAnnotationInCSharp8() == true ? NullableFlowState.MaybeDefault : NullableFlowState.MaybeNull; 10332static NullableFlowState getReferenceConversionResultState(TypeWithAnnotations targetType, TypeWithState operandType) 10334var state = operandType.State; 10337case NullableFlowState.MaybeNull: 10343return NullableFlowState.MaybeDefault; 10349return (annotation == NullableAnnotation.Annotated) ? NullableFlowState.MaybeDefault : NullableFlowState.MaybeNull; 10353case NullableFlowState.MaybeDefault: 10356return NullableFlowState.MaybeNull; 10366static NullableFlowState getBoxingConversionResultState(TypeWithAnnotations targetType, TypeWithState operandType) 10368var state = operandType.State; 10369if (state == NullableFlowState.MaybeNull) 10374return NullableFlowState.MaybeDefault; 10384return (annotation == NullableAnnotation.Annotated) ? NullableFlowState.MaybeDefault : NullableFlowState.MaybeNull; 10394static NullableFlowState getUnboxingConversionResultState(TypeWithState operandType) 10396var state = operandType.State; 10397if (state == NullableFlowState.MaybeNull) 10399return NullableFlowState.MaybeDefault; 10404static NullableFlowState getConversionResultState(TypeWithState operandType) 10406var state = operandType.State; 10407if (state == NullableFlowState.MaybeNull) 10409return NullableFlowState.MaybeDefault; 10544var resultType = TypeWithState.Create(targetType, NullableFlowState.NotNull); 10587NullableFlowState operandState = operandType.State; 10652private TypeWithState GetConversionReturnTypeWithState(MethodSymbol method, bool isLiftedConversion, NullableFlowState operandState) 10696var resultType = TypeWithState.Create(targetTypeWithNullability.Type, NullableFlowState.NotNull); 10789unionTypeWithState = TypeWithState.Create(toType, NullableFlowState.NotNull); 10883private TypeWithState GetLiftedReturnType(TypeWithAnnotations returnType, NullableFlowState operandState) 10887NullableFlowState state = returnType.ToTypeWithState().State.Join(operandState); 10904private TypeWithState GetLiftedReturnTypeIfNecessary(bool isLifted, TypeWithAnnotations returnType, NullableFlowState operandState) 11000var result = TypeWithState.Create(delegateType, NullableFlowState.NotNull); 11297var rvalueResult = TypeWithState.Create(node.Type, NullableFlowState.NotNull); 11722var valueBeforeNullableWrapping = TypeWithState.Create(underlyingType.Type, NullableFlowState.NotNull); 11855SetResultType(node, TypeWithState.Create(receiverType.Type, NullableFlowState.NotNull)); 11879SetResultType(node, TypeWithState.Create(opType.Type, NullableFlowState.NotNull)); 12048SetResultType(node, TypeWithState.Create(receiverType.Type, NullableFlowState.NotNull)); 12076SetResultType(node, TypeWithState.Create(opType.Type, NullableFlowState.NotNull)); 12435var state = GetState(ref this.State, slot); 12457SetState(ref this.StateWhenTrue, slotToSet, NullableFlowState.NotNull); 12688if (enumeratorReturnType.State != NullableFlowState.NotNull) 12759var state = NullableFlowState.NotNull; 12963TypeWithState.Create(node.Type, node.OperatorKind.IsLifted() ? argumentResult.State : NullableFlowState.NotNull); 13229SetResultType(node, TypeWithState.Create(node.Type, NullableFlowState.NotNull)); 13251SetResultType(node, TypeWithState.Create(node.Type, NullableFlowState.MaybeDefault)); 13266SetState(ref this.State, slot, NullableFlowState.NotNull); 13312NullableFlowState resultState = NullableFlowState.NotNull; 13327resultState = NullableFlowState.MaybeDefault; 13365SetResultType(node, TypeWithState.Create(node.Type, node.Type?.CanContainNull() != false && node.ConstantValueOpt?.IsNull == true ? NullableFlowState.MaybeDefault : NullableFlowState.NotNull)); 13473node.IsAddition ? GetState(ref this.State, memberSlot).Meet(ResultType.State) : NullableFlowState.MaybeNull); 13590private bool ReportPossibleNullReceiverIfNeeded(TypeSymbol type, NullableFlowState state, bool checkNullableValueType, SyntaxNode syntax, out bool reportedDiagnostic) 13649SetResultType(node, TypeWithState.Create(node.Type, NullableFlowState.NotNull)); 13664SetResultType(node, TypeWithState.Create(node.Type, NullableFlowState.NotNull)); 13713SetResultType(node, TypeWithState.Create(node.Type, NullableFlowState.NotNull)); 13719SetResultType(node, TypeWithState.Create(type, NullableFlowState.NotNull)); 13787SetState(ref this.State, slot, NullableFlowState.NotNull); 13937Debug.Assert(ResultType is TypeWithState { Type: FunctionPointerTypeSymbol { }, State: NullableFlowState.NotNull }); 14243SetValue(Id, index, useNotNullsAsDefault ? NullableFlowState.NotNull : walker.GetDefaultState(ref this, slot)); 14247public NullableFlowState this[int slot] 14261private NullableFlowState GetValue(int id, int index) 14271private NullableFlowState GetValue(int index) 14275return NullableFlowState.NotNull; 14282var result = (_state[index], _state[index + 1]) switch 14284(false, false) => NullableFlowState.NotNull, // Should not be reachable 14285(true, false) => NullableFlowState.MaybeNull, 14286(false, true) => NullableFlowState.MaybeDefault, 14287(true, true) => NullableFlowState.NotNull 14293private void SetValue(int id, int index, NullableFlowState value) 14306private void SetValue(int index, NullableFlowState value) 14314NullableFlowState.MaybeNull => (true, false), 14315NullableFlowState.MaybeDefault => (false, true), 14316NullableFlowState.NotNull => (true, true), 14370var oldValue = oldReachable ? GetValue(i) : NullableFlowState.NotNull; 14371var newValue = oldValue.Join(other.GetValue(i)); 14396var oldValue = GetValue(i); 14397var newValue = oldValue.Meet(other.GetValue(i)); 14413var mayBeNull = GetValue(i) is NullableFlowState.MaybeNull or NullableFlowState.MaybeDefault; 14444NullableFlowState.MaybeNull => "?", 14445NullableFlowState.MaybeDefault => "??",
Symbols\ConstraintsHelper.cs (14)
1226static NullableFlowState getTypeArgumentState(in TypeWithAnnotations typeWithAnnotations) 1231return NullableFlowState.NotNull; 1235return type.IsNullableTypeOrTypeParameter() ? NullableFlowState.MaybeNull : NullableFlowState.NotNull; 1240return type.IsTypeParameterDisallowingAnnotationInCSharp8() ? NullableFlowState.MaybeDefault : NullableFlowState.MaybeNull; 1242return NullableFlowState.NotNull; 1247return NullableFlowState.NotNull; 1249NullableFlowState? result = null; 1252var constraintState = getTypeArgumentState(constraintType); 1262return result ?? NullableFlowState.MaybeNull; 1265static bool constraintTypeAllows(in TypeWithAnnotations typeWithAnnotations, NullableFlowState state) 1267if (state == NullableFlowState.NotNull) 1294return state == NullableFlowState.MaybeNull;
Symbols\NamedTypeSymbol.cs (6)
46public StrongBox<NullableFlowState>? _lazyValueDeclaredNullableFlowState; 2674internal NullableFlowState UnionValueDeclaredNullableFlowState 2679StrongBox<NullableFlowState>? lazyNullableFlowState = lazyUnionData._lazyValueDeclaredNullableFlowState; 2687var result = NullableFlowState.NotNull; 2696lazyUnionData._lazyValueDeclaredNullableFlowState = new StrongBox<NullableFlowState>(result);
Symbols\NullableAnnotationExtensions.cs (1)
104var flowState = TypeWithAnnotations.Create(type, annotation).ToTypeWithState().State;
Symbols\NullableFlowState.cs (1)
11/// When in doubt we conservatively use <see cref="NullableFlowState.NotNull"/>
Symbols\NullableFlowStateExtensions.cs (20)
13public static bool MayBeNull(this NullableFlowState state) => state != NullableFlowState.NotNull; 15public static bool IsNotNull(this NullableFlowState state) => state == NullableFlowState.NotNull; 19/// The result is <see cref="NullableFlowState.MaybeNull"/> if either operand is that. 21public static NullableFlowState Join(this NullableFlowState a, NullableFlowState b) => (a > b) ? a : b; 25/// The result is <see cref="NullableFlowState.NotNull"/> if either operand is that. 27public static NullableFlowState Meet(this NullableFlowState a, NullableFlowState b) => (a < b) ? a : b; 29internal static CodeAnalysis.NullableFlowState ToPublicFlowState(this CSharp.NullableFlowState nullableFlowState) => 32CSharp.NullableFlowState.NotNull => CodeAnalysis.NullableFlowState.NotNull, 33CSharp.NullableFlowState.MaybeNull => CodeAnalysis.NullableFlowState.MaybeNull, 34CSharp.NullableFlowState.MaybeDefault => CodeAnalysis.NullableFlowState.MaybeNull, 39public static CSharp.NullableFlowState ToInternalFlowState(this CodeAnalysis.NullableFlowState flowState) => 42CodeAnalysis.NullableFlowState.None => CSharp.NullableFlowState.NotNull, 43CodeAnalysis.NullableFlowState.NotNull => CSharp.NullableFlowState.NotNull, 44CodeAnalysis.NullableFlowState.MaybeNull => CSharp.NullableFlowState.MaybeNull,
Symbols\TypeWithAnnotations.cs (11)
813static NullableFlowState getFlowState(TypeSymbol type, NullableAnnotation annotation) 817return annotation.IsAnnotated() ? NullableFlowState.MaybeDefault : NullableFlowState.NotNull; 821return annotation switch { NullableAnnotation.Annotated => NullableFlowState.MaybeDefault, NullableAnnotation.NotAnnotated => NullableFlowState.MaybeNull, _ => NullableFlowState.NotNull }; 825return annotation switch { NullableAnnotation.Annotated => NullableFlowState.MaybeDefault, _ => NullableFlowState.NotNull }; 829return NullableFlowState.MaybeNull; 831return annotation switch { NullableAnnotation.Annotated => NullableFlowState.MaybeNull, _ => NullableFlowState.NotNull };
Symbols\TypeWithState.cs (20)
17public readonly NullableFlowState State; 20public bool MayBeNull => State == NullableFlowState.MaybeNull; 21public bool IsNotNull => State == NullableFlowState.NotNull; 25return Create(type, NullableFlowState.MaybeDefault); 28public static TypeWithState Create(TypeSymbol? type, NullableFlowState defaultState) 30if (defaultState == NullableFlowState.MaybeDefault && 36var state = defaultState != NullableFlowState.NotNull && type?.CanContainNull() != false ? NullableFlowState.MaybeNull : NullableFlowState.NotNull; 45NullableFlowState state; 50state = NullableFlowState.MaybeDefault; 54state = NullableFlowState.NotNull; 63state = NullableFlowState.NotNull; 69private TypeWithState(TypeSymbol? type, NullableFlowState state) 71Debug.Assert(state == NullableFlowState.NotNull || type?.CanContainNull() != false); 72Debug.Assert(state != NullableFlowState.MaybeDefault || type is null || type.IsTypeParameterDisallowingAnnotationInCSharp8()); 81public TypeWithState WithNotNullState() => new TypeWithState(Type, NullableFlowState.NotNull); 83public TypeWithState WithSuppression(bool suppress) => suppress ? new TypeWithState(Type, NullableFlowState.NotNull) : this; 90return (State == NullableFlowState.MaybeDefault || asAnnotatedType) ? type.SetIsAnnotated(compilation) : type;