-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
NullabilityInfoContext returns incorrect result when code analysis attributes are used in a disabled context #63848
Comments
I couldn't figure out the best area label to add to this issue. If you have write-permissions please help me learn by adding exactly one area label. |
Tagging subscribers to this area: @dotnet/area-system-reflection Issue DetailsDescriptionAttributes like DisallowNull and MaybeNull are still respected by the compiler even when the code they are annotating is otherwise nullable-oblivious. Reproduction Stepspublic void Main()
{
var context = new NullabilityInfoContext();
var disallowNullInfo = context.Create(typeof(DisabledWithCodeAnalysisAttributes).GetProperty("DisallowNull")!);
Console.WriteLine(disallowNullInfo.ReadState); // Unknown
Console.WriteLine(disallowNullInfo.WriteState); // Unknown (should be NotNull)
var maybeNullInfo = context.Create(typeof(DisabledWithCodeAnalysisAttributes).GetProperty("MaybeNull")!);
Console.WriteLine(maybeNullInfo.ReadState); // Unknown (should be Nullable)
Console.WriteLine(maybeNullInfo.WriteState); // Unknown
}
#nullable disable
private class DisabledWithCodeAnalysisAttributes
{
[DisallowNull] public string DisallowNull { get; set; }
[MaybeNull] public string MaybeNull { get; set; }
}
#nullable enable Expected behaviorThe property DisallowNull should have a NotNull write state because the following produces a compiler warning (CS8625):
The property MaybeNull should have a Nullable read state because the following produces a compiler warning (CS8600):
Actual behaviorAll states are Unknown. Regression?No response Known WorkaroundsNo response ConfigurationVS 17.0.2, .NET 6, Windows 10 x64. I don't have any reason to believe this is configuration specific. Other informationCC @Shane32
|
In several cases, NullabilityInfoContext would return values which were out of sync with the C# compiler's interpretation of the nullability metadata. This fixes the following cases: * The `NullablePublicOnly` attribute was not considered when analyzing private constructor parameters. * CodeAnalysis attributes on indexer properties were not recognized. * CodeAnalysis attributes were not recognized in a `#nullable disabled` context. * Private value-typed members lacking nullable annotations were not properly marked as nullable/notnull. * Mixing CodeAnalysis attributes with opposite meanings (e. g. `AllowNull` and `DisallowNull` produced the wrong result. * Analysis of members inherited from generic base types did not incorporate the nullable metadata associated with the inheritance. Fix dotnet#63555 Fix dotnet#63846 Fix dotnet#63847 Fix dotnet#63848 Fix dotnet#63849 Fix dotnet#63853
Description
Attributes like DisallowNull and MaybeNull are still respected by the compiler even when the code they are annotating is otherwise nullable-oblivious.
NullabilityInfoContext
should do the same.Reproduction Steps
Expected behavior
The property DisallowNull should have a NotNull write state because the following produces a compiler warning (CS8625):
The property MaybeNull should have a Nullable read state because the following produces a compiler warning (CS8600):
Actual behavior
All states are Unknown.
Regression?
No response
Known Workarounds
No response
Configuration
VS 17.0.2, .NET 6, Windows 10 x64.
I don't have any reason to believe this is configuration specific.
Other information
CC @Shane32
The text was updated successfully, but these errors were encountered: