Skip to content

Nullable annotations for System.Runtime.Serialization.Xml and System.Runtime.Serialization.Json - #41476

Merged
krwq merged 21 commits into
dotnet:masterfrom
eerhardt:DataContractSerializationNullable
Aug 28, 2020
Merged

Nullable annotations for System.Runtime.Serialization.Xml and System.Runtime.Serialization.Json#41476
krwq merged 21 commits into
dotnet:masterfrom
eerhardt:DataContractSerializationNullable

Conversation

@eerhardt

Copy link
Copy Markdown
Member

@Dotnet-GitSync-Bot

Copy link
Copy Markdown
Collaborator

I couldn't figure out the best area label to add to this PR. If you have write-permissions please help me learn by adding exactly one area label.

@eerhardt

Copy link
Copy Markdown
MemberAuthor

fyi - @HongGit@StephenMolloy - as the owners of this area.

@jozkee

Copy link
Copy Markdown
Member

Unrelated to this PR: There is a file that doesn't even compile in System.Private.DataContractSerialization and is a duplicate of the homonymous named file CollectionDataContractAttribute.cs in System.Runtime.Serialization.Primitives, I think that file can be removed (on a separate PR):

src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContractAttribute.cs

src/libraries/System.Runtime.Serialization.Primitives/src/System/Runtime/Serialization/CollectionDataContractAttribute.cs

Comment threadsrc/libraries/Common/src/System/CodeDom/CodeTypeReference.cs Outdated
}

internal virtual XmlDictionaryString TopLevelElementName
internal virtual XmlDictionaryString? TopLevelElementName

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[DisallowNull]?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How does [DisallowNull] work with overrides? This one is a bit tricky because the base class has:

classDataContract{XmlDictionaryString_name;// can't be nullpublicXmlDictionaryStringName{get{}set{_name=value;}}publicvirtualXmlDictionaryString?TopLevelElementName{get{return_name;}set{_name=value;}}}

but then a derived class does:

classDerivedDataContract:DataContract{XmlDictionaryString?_topLevelName;// can be nullpublicoverrideXmlDictionaryString?TopLevelElementName{get{return_topLevelName;}set{_topLevelName=value;}}}

And when trying to clone the objects, now we have a problem:

clonedHelper.TopLevelElementName=this.TopLevelElementName;
clonedHelper.TopLevelElementNamespace=this.TopLevelElementNamespace;

The getter can be null, but the setter doesn't allow for it.

}

public override void WriteXmlnsAttribute(string prefix, string ns)
public override void WriteXmlnsAttribute(string? prefix, string ns)

@krwqkrwqAug 28, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

public override void WriteStartAttribute(string prefix, string localName) and overload might be worth filing a bug on NRE or at least TODO-NULLABLE

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The WriteStartAttribute methods are internal and are never called with null for prefix, so I left them as non-nullable and didn't change the code. But WriteXmlnsAttribute could be called with null, so that's why I fixed it here.

Comment threadsrc/libraries/Common/src/System/CodeDom/CodeObject.cs
Comment threadsrc/libraries/Common/src/System/CodeDom/CodeTypeReference.cs
Comment threadsrc/libraries/Common/src/System/CodeDom/CodeTypeReference.cs

@krwqkrwq left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM after fixing/resolving comments

@jozkeejozkee left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Otherwise; public API annotations LGTM.

@eerhardt

Copy link
Copy Markdown
MemberAuthor

I believe all current feedback has been addressed. I left a few conversations open with pending questions. Please let me know if you have any more feedback. I'd like to merge this by the EOD.

@krwq
krwq merged commit 722d550 into dotnet:masterAug 28, 2020
@eerhardt
eerhardt deleted the DataContractSerializationNullable branch August 28, 2020 22:56
@ghostghost locked as resolved and limited conversation to collaborators Dec 7, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@eerhardt@Dotnet-GitSync-Bot@jozkee@krwq@jcouv