[illink] Redo Java.Lang.Object serialization #5473
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Context: #5454
The use of
DataContractattribute onJava.Lang.Objectclass pullsin
System.Runtime.Serialization.Primitivesassembly.We still need to make the
Java.Lang.Objectclass serializable, so thatinherited types can be serialized. Otherwise that would lead to
System.Runtime.Serialization.InvalidDataContractExceptionduringruntime.
Instead of decorating
Java.Lang.ObjectwithDataContractattribute,use
Serializableattribute on class andNonSerializedattribute on fields.This might seem contraproductive, to use multiple attribute instances
instead of one. In real it is not and leads to size saving and getting rid
of
System.Runtime.Serialization.Primitivesassembly referencein linked apps. Because the
SerializableandNonSerializedattributesare not present in the compiled output, instead flags are used.
The compiled
Java.Lang.Objectclass IL looks like this:The apk size savings on net6 in BuildReleaseArm64False test:
I have also added a new test for
Java.Lang.Objectclass serialization with code fromold
Hellosample.Example of
System.Runtime.Serialization.InvalidDataContractExceptionduring runtime,if
Java.Lang.Objectclass was not serializable: