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