JetBrains Rider 2021.3 Help

Value and nullability analysis

JetBrains Rider performs value analysis to help you find possible 'null' dereferences as well as redundant boolean comparisons and null checks.

Different ways of analyzing values

JetBrains Rider analyzes values in two general ways:

  • By understanding the behavior of language constructs.

    In the example below, based on the fact that the parameter obj was explicitly checked for nullability, JetBrains Rider reasonably supposes that the value of obj can be indeed 'null' and displays the corresponding warning:

    JetBrains Rider: Nullability analysis
  • By relying on code annotation attributes ([CanBeNull], [NotNull], [ItemCanBeNull], [ItemNotNull])

    In this example, the method Bar is marked with the [CanBeNull] attribute, Using this information, JetBrains Rider warns you that the return value of Bar can be null, and calling a method on it could lead to a 'null' dereference:

    JetBrains Rider: Nullability analysis

Value and nullability analysis modes

JetBrains Rider can analyze values in different modes:

Optimistic

By default, value analysis mode is optimistic. In this mode, JetBrains Rider only warns about possible 'null' dereference if the value was explicitly checked for nullability, or if the symbol is marked with the [CanBeNull] or [ItemCanBeNull] attribute. The optimistic mode is demonstrated in the examples above.

Pessimistic

In this mode, JetBrains Rider warns about possible 'null' dereference in all contexts where the value is not checked for nullability explicitly, unless the symbol is marked with the [NotNull] or [ItemNotNull] attribute.

To change value analysis mode or disable the analysis, configure the Value analysis mode preference on the Editor | Inspection Settings page of JetBrains Rider settings Ctrl+Alt+S.

Further examples of value analysis

Here are some more examples of JetBrains Rider's value and nullability analysis:

  • If a nullability check has been already done with a simple LINQ query, JetBrains Rider tells you that a further nullability check is redundant:

    Redundant nullability check for collection item
  • The same happens if you mark a collection with the [ItemNotNull] attribute:

    Redundant nullability check for collection item
  • The next example illustrates how value analysis works when the pessimistic mode is enabled. The value of the list was checked for nullability, but not list items. Therefore JetBrains Rider warns here about possible 'null' dereference.

    Redundant nullability check for collection item
Last modified: 07 April 2022