vs-mef icon indicating copy to clipboard operation
vs-mef copied to clipboard

Analyzer to ensure correct C# nullable annotation when AllowDefault = true

Open drewnoakes opened this issue 2 years ago • 1 comments

#nullable enable

[Import(AllowDefault = true)]
public IBar Bar { get; private set; }

[ImportingConstructor]
public Foo([Import(AllowDefault = true)] IBar bar)
{}

Both of these imports lead to potential runtime problems if a null value is not guarded against.

When in a nullable context, use of AllowDefault = true on a non-nullable type should be flagged with a diagnostic. A codefix could also be added to change the type to be nullable.

drewnoakes avatar May 05 '22 00:05 drewnoakes

Strictly speaking, no import of a reference type is guaranteed to be non-null. Because you can export a property that returns null and that's perfectly legal.

But at least when AllowDefault = true it's much more likely to be null, so an analyzer that requires a nullable annotation at least for that case sounds like a good idea.

AArnott avatar May 05 '22 22:05 AArnott