vs-mef
vs-mef copied to clipboard
Analyzer to ensure correct C# nullable annotation when AllowDefault = true
#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.
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.