From bfed56db3b53625fd45cafd0ac6b88239d7ed4cd Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Wed, 3 Mar 2021 16:37:03 -0800 Subject: [PATCH 01/12] Annotate APIs in System.Private.Xml Mostly adds RequiresUnreferencedCode, and propagates the results outward. --- .../System.Data.Common/System.Data.Common.sln | 177 +++++++++--------- .../src/ILLink/ILLink.Suppressions.xml | 72 +++++++ .../src/System/Xml/Schema/XmlSchema.cs | 7 + .../System/Xml/Serialization/CodeGenerator.cs | 5 + .../System/Xml/Serialization/Compilation.cs | 11 +- .../src/System/Xml/Serialization/Compiler.cs | 2 + .../System/Xml/Serialization/ImportContext.cs | 3 + .../src/System/Xml/Serialization/Mappings.cs | 3 + .../src/System/Xml/Serialization/Models.cs | 33 +++- .../Serialization/PrimitiveXmlSerializers.cs | 3 + .../ReflectionXmlSerializationReader.cs | 107 ++++++++--- .../ReflectionXmlSerializationWriter.cs | 28 ++- .../Xml/Serialization/SchemaImporter.cs | 7 + .../Serialization/SoapReflectionImporter.cs | 32 +++- .../System/Xml/Serialization/SourceInfo.cs | 12 +- .../Xml/Serialization/TypeExtensions.cs | 5 +- .../src/System/Xml/Serialization/Types.cs | 70 ++++++- .../System/Xml/Serialization/XmlAttributes.cs | 3 + .../Serialization/XmlReflectionImporter.cs | 43 ++++- .../Xml/Serialization/XmlSchemaImporter.cs | 50 +++++ .../System/Xml/Serialization/XmlSchemas.cs | 7 + .../XmlSerializationGeneratedCode.cs | 4 + .../Serialization/XmlSerializationILGen.cs | 16 ++ .../Serialization/XmlSerializationReader.cs | 13 ++ .../XmlSerializationReaderILGen.cs | 49 ++++- .../Serialization/XmlSerializationWriter.cs | 52 ++++- .../XmlSerializationWriterILGen.cs | 52 ++++- .../System/Xml/Serialization/XmlSerializer.cs | 38 ++++ .../Xml/Serialization/XmlSerializerFactory.cs | 9 + .../ref/System.Xml.ReaderWriter.cs | 9 + .../ref/System.Xml.XmlSerializer.cs | 86 +++++++++ 31 files changed, 861 insertions(+), 147 deletions(-) diff --git a/src/libraries/System.Data.Common/System.Data.Common.sln b/src/libraries/System.Data.Common/System.Data.Common.sln index f1745ac2cbc0fe..8427d81f3b6c07 100644 --- a/src/libraries/System.Data.Common/System.Data.Common.sln +++ b/src/libraries/System.Data.Common/System.Data.Common.sln @@ -1,4 +1,8 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31025.218 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Private.CoreLib", "..\..\coreclr\System.Private.CoreLib\System.Private.CoreLib.csproj", "{F3DC1DF9-698A-4970-9A5E-AB946D6F763B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtilities", "..\Common\tests\TestUtilities\TestUtilities.csproj", "{0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}" @@ -21,7 +25,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Private.Uri", "..\Sy EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServices.Unsafe", "..\System.Runtime.CompilerServices.Unsafe\ref\System.Runtime.CompilerServices.Unsafe.csproj", "{A404332F-CCAA-4E22-94C1-635F7F19176F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServices.Unsafe", "..\System.Runtime.CompilerServices.Unsafe\src\System.Runtime.CompilerServices.Unsafe.ilproj", "{6E353933-8CBD-467D-8FF1-00133C3F2036}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServices.Unsafe", "..\System.Runtime.CompilerServices.Unsafe\src\System.Runtime.CompilerServices.Unsafe.ilproj", "{04BA3E3C-6979-4792-B19E-C797AD607F42}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.Extensions", "..\System.Runtime.Extensions\src\System.Runtime.Extensions.csproj", "{68D868F6-1311-47A2-9DDE-22B64B5FF85E}" EndProject @@ -38,36 +42,27 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{9A105AFB-AA36-46E1-BC68-6724F5644D0C}" EndProject Global - GlobalSection(NestedProjects) = preSolution - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {0FCF2BA6-A5B3-4E1C-A49A-424E77602313} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {C3F9A601-07D8-43A3-A3CA-7A002358A102} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {6E353933-8CBD-467D-8FF1-00133C3F2036} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {68D868F6-1311-47A2-9DDE-22B64B5FF85E} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {09129981-6B0D-44C7-9F0A-AD2426106332} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3} = {12B0E17A-6957-425E-98E1-5F245010893A} - {BEBD7B5B-9544-42EB-B878-F009560CAAF4} = {12B0E17A-6957-425E-98E1-5F245010893A} - {5305244F-C52B-4772-A13D-C034213F3833} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} - {F865C526-79F8-403B-B5E4-52A90ECE21E3} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} - {A404332F-CCAA-4E22-94C1-635F7F19176F} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} - {BF66C27C-D1B1-4F86-A1E1-EDC63584E818} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} - {649CA543-288D-4A8B-AED3-E470DC7FF866} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} + GlobalSection(SharedMSBuildProjectFiles) = preSolution + ..\System.Private.CoreLib\src\System.Private.CoreLib.Shared.projitems*{f3dc1df9-698a-4970-9a5e-ab946d6f763b}*SharedItemsImports = 5 EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution + Checked|Any CPU = Checked|Any CPU + Checked|x64 = Checked|x64 + Checked|x86 = Checked|x86 Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 - Checked|Any CPU = Checked|Any CPU - Checked|x64 = Checked|x64 - Checked|x86 = Checked|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|Any CPU.ActiveCfg = Checked|x64 + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|Any CPU.Build.0 = Checked|x64 + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x64.ActiveCfg = Checked|x64 + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x64.Build.0 = Checked|x64 + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x86.ActiveCfg = Checked|x86 + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x86.Build.0 = Checked|x86 {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Debug|Any CPU.ActiveCfg = Debug|x64 {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Debug|Any CPU.Build.0 = Debug|x64 {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Debug|x64.ActiveCfg = Debug|x64 @@ -80,12 +75,9 @@ Global {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Release|x64.Build.0 = Release|x64 {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Release|x86.ActiveCfg = Release|x86 {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Release|x86.Build.0 = Release|x86 - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|Any CPU.ActiveCfg = Checked|x64 - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|Any CPU.Build.0 = Checked|x64 - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x64.ActiveCfg = Checked|x64 - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x64.Build.0 = Checked|x64 - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x86.ActiveCfg = Checked|x86 - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x86.Build.0 = Checked|x86 + {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Checked|x64.ActiveCfg = Debug|Any CPU + {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Checked|x86.ActiveCfg = Debug|Any CPU {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Debug|Any CPU.Build.0 = Debug|Any CPU {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -98,9 +90,9 @@ Global {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Release|x64.Build.0 = Release|Any CPU {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Release|x86.ActiveCfg = Release|Any CPU {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Release|x86.Build.0 = Release|Any CPU - {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Checked|x64.ActiveCfg = Debug|Any CPU - {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Checked|x86.ActiveCfg = Debug|Any CPU + {5305244F-C52B-4772-A13D-C034213F3833}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {5305244F-C52B-4772-A13D-C034213F3833}.Checked|x64.ActiveCfg = Debug|Any CPU + {5305244F-C52B-4772-A13D-C034213F3833}.Checked|x86.ActiveCfg = Debug|Any CPU {5305244F-C52B-4772-A13D-C034213F3833}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5305244F-C52B-4772-A13D-C034213F3833}.Debug|Any CPU.Build.0 = Debug|Any CPU {5305244F-C52B-4772-A13D-C034213F3833}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -113,9 +105,9 @@ Global {5305244F-C52B-4772-A13D-C034213F3833}.Release|x64.Build.0 = Release|Any CPU {5305244F-C52B-4772-A13D-C034213F3833}.Release|x86.ActiveCfg = Release|Any CPU {5305244F-C52B-4772-A13D-C034213F3833}.Release|x86.Build.0 = Release|Any CPU - {5305244F-C52B-4772-A13D-C034213F3833}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {5305244F-C52B-4772-A13D-C034213F3833}.Checked|x64.ActiveCfg = Debug|Any CPU - {5305244F-C52B-4772-A13D-C034213F3833}.Checked|x86.ActiveCfg = Debug|Any CPU + {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Checked|x64.ActiveCfg = Debug|Any CPU + {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Checked|x86.ActiveCfg = Debug|Any CPU {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Debug|Any CPU.Build.0 = Debug|Any CPU {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -128,9 +120,9 @@ Global {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Release|x64.Build.0 = Release|Any CPU {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Release|x86.ActiveCfg = Release|Any CPU {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Release|x86.Build.0 = Release|Any CPU - {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Checked|x64.ActiveCfg = Debug|Any CPU - {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Checked|x86.ActiveCfg = Debug|Any CPU + {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Checked|x64.ActiveCfg = Debug|Any CPU + {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Checked|x86.ActiveCfg = Debug|Any CPU {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Debug|Any CPU.Build.0 = Debug|Any CPU {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -143,9 +135,9 @@ Global {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Release|x64.Build.0 = Release|Any CPU {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Release|x86.ActiveCfg = Release|Any CPU {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Release|x86.Build.0 = Release|Any CPU - {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Checked|x64.ActiveCfg = Debug|Any CPU - {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Checked|x86.ActiveCfg = Debug|Any CPU + {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Checked|x64.ActiveCfg = Debug|Any CPU + {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Checked|x86.ActiveCfg = Debug|Any CPU {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Debug|Any CPU.Build.0 = Debug|Any CPU {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -158,9 +150,9 @@ Global {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Release|x64.Build.0 = Release|Any CPU {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Release|x86.ActiveCfg = Release|Any CPU {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Release|x86.Build.0 = Release|Any CPU - {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Checked|x64.ActiveCfg = Debug|Any CPU - {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Checked|x86.ActiveCfg = Debug|Any CPU + {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Checked|x64.ActiveCfg = Debug|Any CPU + {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Checked|x86.ActiveCfg = Debug|Any CPU {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Debug|Any CPU.Build.0 = Debug|Any CPU {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -173,9 +165,9 @@ Global {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Release|x64.Build.0 = Release|Any CPU {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Release|x86.ActiveCfg = Release|Any CPU {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Release|x86.Build.0 = Release|Any CPU - {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Checked|x64.ActiveCfg = Debug|Any CPU - {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Checked|x86.ActiveCfg = Debug|Any CPU + {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Checked|x64.ActiveCfg = Debug|Any CPU + {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Checked|x86.ActiveCfg = Debug|Any CPU {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Debug|Any CPU.Build.0 = Debug|Any CPU {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -188,9 +180,9 @@ Global {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Release|x64.Build.0 = Release|Any CPU {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Release|x86.ActiveCfg = Release|Any CPU {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Release|x86.Build.0 = Release|Any CPU - {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Checked|x64.ActiveCfg = Debug|Any CPU - {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Checked|x86.ActiveCfg = Debug|Any CPU + {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Checked|x64.ActiveCfg = Debug|Any CPU + {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Checked|x86.ActiveCfg = Debug|Any CPU {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Debug|Any CPU.Build.0 = Debug|Any CPU {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -203,9 +195,9 @@ Global {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Release|x64.Build.0 = Release|Any CPU {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Release|x86.ActiveCfg = Release|Any CPU {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Release|x86.Build.0 = Release|Any CPU - {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Checked|x64.ActiveCfg = Debug|Any CPU - {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Checked|x86.ActiveCfg = Debug|Any CPU + {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Checked|x64.ActiveCfg = Debug|Any CPU + {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Checked|x86.ActiveCfg = Debug|Any CPU {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -218,9 +210,9 @@ Global {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Release|x64.Build.0 = Release|Any CPU {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Release|x86.ActiveCfg = Release|Any CPU {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Release|x86.Build.0 = Release|Any CPU - {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Checked|x64.ActiveCfg = Debug|Any CPU - {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Checked|x86.ActiveCfg = Debug|Any CPU + {A404332F-CCAA-4E22-94C1-635F7F19176F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {A404332F-CCAA-4E22-94C1-635F7F19176F}.Checked|x64.ActiveCfg = Debug|Any CPU + {A404332F-CCAA-4E22-94C1-635F7F19176F}.Checked|x86.ActiveCfg = Debug|Any CPU {A404332F-CCAA-4E22-94C1-635F7F19176F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A404332F-CCAA-4E22-94C1-635F7F19176F}.Debug|Any CPU.Build.0 = Debug|Any CPU {A404332F-CCAA-4E22-94C1-635F7F19176F}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -233,24 +225,24 @@ Global {A404332F-CCAA-4E22-94C1-635F7F19176F}.Release|x64.Build.0 = Release|Any CPU {A404332F-CCAA-4E22-94C1-635F7F19176F}.Release|x86.ActiveCfg = Release|Any CPU {A404332F-CCAA-4E22-94C1-635F7F19176F}.Release|x86.Build.0 = Release|Any CPU - {A404332F-CCAA-4E22-94C1-635F7F19176F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {A404332F-CCAA-4E22-94C1-635F7F19176F}.Checked|x64.ActiveCfg = Debug|Any CPU - {A404332F-CCAA-4E22-94C1-635F7F19176F}.Checked|x86.ActiveCfg = Debug|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Debug|x64.ActiveCfg = Debug|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Debug|x64.Build.0 = Debug|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Debug|x86.ActiveCfg = Debug|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Debug|x86.Build.0 = Debug|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Release|Any CPU.Build.0 = Release|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Release|x64.ActiveCfg = Release|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Release|x64.Build.0 = Release|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Release|x86.ActiveCfg = Release|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Release|x86.Build.0 = Release|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Checked|x64.ActiveCfg = Debug|Any CPU - {6E353933-8CBD-467D-8FF1-00133C3F2036}.Checked|x86.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x64.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x86.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x64.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x64.Build.0 = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x86.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x86.Build.0 = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|Any CPU.Build.0 = Release|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x64.ActiveCfg = Release|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x64.Build.0 = Release|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x86.ActiveCfg = Release|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x86.Build.0 = Release|Any CPU + {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Checked|x64.ActiveCfg = Debug|Any CPU + {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Checked|x86.ActiveCfg = Debug|Any CPU {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Debug|Any CPU.Build.0 = Debug|Any CPU {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -263,9 +255,9 @@ Global {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Release|x64.Build.0 = Release|Any CPU {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Release|x86.ActiveCfg = Release|Any CPU {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Release|x86.Build.0 = Release|Any CPU - {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Checked|x64.ActiveCfg = Debug|Any CPU - {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Checked|x86.ActiveCfg = Debug|Any CPU + {09129981-6B0D-44C7-9F0A-AD2426106332}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {09129981-6B0D-44C7-9F0A-AD2426106332}.Checked|x64.ActiveCfg = Debug|Any CPU + {09129981-6B0D-44C7-9F0A-AD2426106332}.Checked|x86.ActiveCfg = Debug|Any CPU {09129981-6B0D-44C7-9F0A-AD2426106332}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {09129981-6B0D-44C7-9F0A-AD2426106332}.Debug|Any CPU.Build.0 = Debug|Any CPU {09129981-6B0D-44C7-9F0A-AD2426106332}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -278,9 +270,9 @@ Global {09129981-6B0D-44C7-9F0A-AD2426106332}.Release|x64.Build.0 = Release|Any CPU {09129981-6B0D-44C7-9F0A-AD2426106332}.Release|x86.ActiveCfg = Release|Any CPU {09129981-6B0D-44C7-9F0A-AD2426106332}.Release|x86.Build.0 = Release|Any CPU - {09129981-6B0D-44C7-9F0A-AD2426106332}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {09129981-6B0D-44C7-9F0A-AD2426106332}.Checked|x64.ActiveCfg = Debug|Any CPU - {09129981-6B0D-44C7-9F0A-AD2426106332}.Checked|x86.ActiveCfg = Debug|Any CPU + {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Checked|x64.ActiveCfg = Debug|Any CPU + {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Checked|x86.ActiveCfg = Debug|Any CPU {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Debug|Any CPU.Build.0 = Debug|Any CPU {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -293,9 +285,9 @@ Global {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Release|x64.Build.0 = Release|Any CPU {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Release|x86.ActiveCfg = Release|Any CPU {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Release|x86.Build.0 = Release|Any CPU - {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Checked|x64.ActiveCfg = Debug|Any CPU - {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Checked|x86.ActiveCfg = Debug|Any CPU + {649CA543-288D-4A8B-AED3-E470DC7FF866}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {649CA543-288D-4A8B-AED3-E470DC7FF866}.Checked|x64.ActiveCfg = Debug|Any CPU + {649CA543-288D-4A8B-AED3-E470DC7FF866}.Checked|x86.ActiveCfg = Debug|Any CPU {649CA543-288D-4A8B-AED3-E470DC7FF866}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {649CA543-288D-4A8B-AED3-E470DC7FF866}.Debug|Any CPU.Build.0 = Debug|Any CPU {649CA543-288D-4A8B-AED3-E470DC7FF866}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -308,13 +300,28 @@ Global {649CA543-288D-4A8B-AED3-E470DC7FF866}.Release|x64.Build.0 = Release|Any CPU {649CA543-288D-4A8B-AED3-E470DC7FF866}.Release|x86.ActiveCfg = Release|Any CPU {649CA543-288D-4A8B-AED3-E470DC7FF866}.Release|x86.Build.0 = Release|Any CPU - {649CA543-288D-4A8B-AED3-E470DC7FF866}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {649CA543-288D-4A8B-AED3-E470DC7FF866}.Checked|x64.ActiveCfg = Debug|Any CPU - {649CA543-288D-4A8B-AED3-E470DC7FF866}.Checked|x86.ActiveCfg = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3} = {12B0E17A-6957-425E-98E1-5F245010893A} + {5305244F-C52B-4772-A13D-C034213F3833} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} + {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {0FCF2BA6-A5B3-4E1C-A49A-424E77602313} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {F865C526-79F8-403B-B5E4-52A90ECE21E3} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} + {C3F9A601-07D8-43A3-A3CA-7A002358A102} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {BEBD7B5B-9544-42EB-B878-F009560CAAF4} = {12B0E17A-6957-425E-98E1-5F245010893A} + {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {A404332F-CCAA-4E22-94C1-635F7F19176F} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} + {04BA3E3C-6979-4792-B19E-C797AD607F42} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {68D868F6-1311-47A2-9DDE-22B64B5FF85E} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {09129981-6B0D-44C7-9F0A-AD2426106332} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {BF66C27C-D1B1-4F86-A1E1-EDC63584E818} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} + {649CA543-288D-4A8B-AED3-E470DC7FF866} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C1241AC3-6D55-48A6-9502-C46F806889AE} EndGlobalSection diff --git a/src/libraries/System.Data.Common/src/ILLink/ILLink.Suppressions.xml b/src/libraries/System.Data.Common/src/ILLink/ILLink.Suppressions.xml index aae5e3cc281c94..a0aae1367cb5f4 100644 --- a/src/libraries/System.Data.Common/src/ILLink/ILLink.Suppressions.xml +++ b/src/libraries/System.Data.Common/src/ILLink/ILLink.Suppressions.xml @@ -247,5 +247,77 @@ member M:System.Data.XMLSchema.GetConverter(System.Type) + + ILLink + IL2026 + member + M:System.Data.Common.ObjectStorage.ConvertObjectToXml(System.Object) + + + ILLink + IL2026 + member + M:System.Data.Common.ObjectStorage.ConvertObjectToXml(System.Object,System.Xml.XmlWriter,System.Xml.Serialization.XmlRootAttribute) + + + ILLink + IL2026 + member + M:System.Data.Common.ObjectStorage.ConvertObjectToXml(System.Object,System.Xml.XmlReader,System.Xml.Serialization.XmlRootAttribute) + + + ILLink + IL2026 + member + M:System.Data.Common.ObjectStorage.ConvertXmlToObject(System.Xml.XmlReader,System.Xml.Serialization.XmlRootAttribute) + + + ILLink + IL2026 + member + M:System.Data.Common.SqlUdtStorage.ConvertObjectToXml(System.Object) + + + ILLink + IL2026 + member + M:System.Data.Common.ObjectStorage.ConvertXmlToObject(System.Object) + + + ILLink + IL2026 + member + M:System.Data.Common.ObjectStorage.ConvertXmlToObject(System.String) + + + ILLink + IL2026 + member + M:System.Data.Common.SqlUdtStorage.ConvertObjectToXml(System.Object,System.Xml.XmlWriter,System.Xml.Serialization.XmlRootAttribute) + + + ILLink + IL2026 + member + M:System.Data.Common.SqlUdtStorage.ConvertXmlToObject(System.String) + + + ILLink + IL2026 + member + M:System.Data.Common.SqlUdtStorage.ConvertXmlToObject(System.Xml.XmlReader,System.Xml.Serialization.XmlRootAttribute) + + + ILLink + IL2026 + member + M:System.Data.Common.ObjectStorage.GetXmlSerializer(System.Type) + + + ILLink + IL2026 + member + M:System.Data.Common.ObjectStorage.GetXmlSerializer(System.Type,System.Xml.Serialization.XmlRootAttribute) + diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs b/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs index 309fb8ffa402ef..8b521d8d1f9537 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs @@ -10,6 +10,7 @@ namespace System.Xml.Schema using System.Threading; using System.Diagnostics; using System.Collections.Generic; + using System.Diagnostics.CodeAnalysis; [XmlRoot("schema", Namespace = XmlSchema.Namespace)] public class XmlSchema : XmlSchemaObject @@ -88,11 +89,13 @@ public XmlSchema() { } return parser.XmlSchema; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Write(Stream stream) { Write(stream, null); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Write(Stream stream, XmlNamespaceManager? namespaceManager) { XmlTextWriter xmlWriter = new XmlTextWriter(stream, null); @@ -100,11 +103,13 @@ public void Write(Stream stream, XmlNamespaceManager? namespaceManager) Write(xmlWriter, namespaceManager); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Write(TextWriter writer) { Write(writer, null); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Write(TextWriter writer, XmlNamespaceManager? namespaceManager) { XmlTextWriter xmlWriter = new XmlTextWriter(writer); @@ -112,11 +117,13 @@ public void Write(TextWriter writer, XmlNamespaceManager? namespaceManager) Write(xmlWriter, namespaceManager); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Write(XmlWriter writer) { Write(writer, null); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Write(XmlWriter writer, XmlNamespaceManager? namespaceManager) { XmlSerializer serializer = new XmlSerializer(typeof(XmlSchema)); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/CodeGenerator.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/CodeGenerator.cs index 3ae4442c85323e..c5be96f6005778 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/CodeGenerator.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/CodeGenerator.cs @@ -475,6 +475,7 @@ private static bool IsStruct(Type objType) return objType.IsValueType && !objType.IsPrimitive; } + [RequiresUnreferencedCode("calls LoadMember")] internal Type LoadMember(object obj, MemberInfo memberInfo) { if (GetVariableType(obj).IsValueType) @@ -484,6 +485,7 @@ internal Type LoadMember(object obj, MemberInfo memberInfo) return LoadMember(memberInfo); } + [RequiresUnreferencedCode("GetProperty on PropertyInfo type's base type")] private static MethodInfo? GetPropertyMethodFromBaseType(PropertyInfo propertyInfo, bool isGetter) { // we only invoke this when the propertyInfo does not have a GET or SET method on it @@ -522,6 +524,7 @@ internal Type LoadMember(object obj, MemberInfo memberInfo) return result; } + [RequiresUnreferencedCode("calls GetPropertyMethodFromBaseType")] internal Type LoadMember(MemberInfo memberInfo) { Type? memberType = null; @@ -560,6 +563,7 @@ internal Type LoadMember(MemberInfo memberInfo) return memberType; } + [RequiresUnreferencedCode("calls GetPropertyMethodFromBaseType")] internal Type LoadMemberAddress(MemberInfo memberInfo) { Type? memberType = null; @@ -602,6 +606,7 @@ internal Type LoadMemberAddress(MemberInfo memberInfo) return memberType; } + [RequiresUnreferencedCode("calls GetPropertyMethodFromBaseType")] internal void StoreMember(MemberInfo memberInfo) { if (memberInfo is FieldInfo) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Compilation.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Compilation.cs index 1428e96571e246..a3b6334d08b5f0 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Compilation.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Compilation.cs @@ -44,6 +44,7 @@ internal TempAssembly(XmlMapping[] xmlMappings, Assembly assembly, XmlSerializer _contract = contract; } + [RequiresUnreferencedCode("calls GenerateRefEmitAssembly")] internal TempAssembly(XmlMapping[] xmlMappings, Type?[] types, string? defaultNamespace, string? location) { bool containsSoapMapping = false; @@ -101,6 +102,7 @@ internal static bool UseLegacySerializerGeneration internal XmlSerializerImplementation Contract { + [RequiresUnreferencedCode("calls GetTypeFromAssembly")] get { if (_contract == null) @@ -137,6 +139,7 @@ internal void InitAssemblyMethods(XmlMapping[] xmlMappings) /// // SxS: This method does not take any resource name and does not expose any resources to the caller. // It's OK to suppress the SxS warning. + [RequiresUnreferencedCode("calls LoadFile")] internal static Assembly? LoadGeneratedAssembly(Type type, string? defaultNamespace, out XmlSerializerImplementation? contract) { Assembly? serializer = null; @@ -276,6 +279,7 @@ private static string GenerateAssemblyId(Type type) return sb.ToString(); } + [RequiresUnreferencedCode("calls GenerateBegin")] internal static bool GenerateSerializerToStream(XmlMapping[] xmlMappings, Type?[] types, string? defaultNamespace, Assembly? assembly, Hashtable assemblies, Stream stream) { var compiler = new Compiler(); @@ -420,6 +424,7 @@ internal static bool GenerateSerializerToStream(XmlMapping[] xmlMappings, Type?[ } } + [RequiresUnreferencedCode("calls GenerateElement")] internal static Assembly GenerateRefEmitAssembly(XmlMapping[] xmlMappings, Type?[]? types, string? defaultNamespace) { var scopeTable = new Dictionary(); @@ -497,7 +502,8 @@ internal static Assembly GenerateRefEmitAssembly(XmlMapping[] xmlMappings, Type? return writerType.Assembly; } - private static MethodInfo GetMethodFromType(Type type, string methodName) + private static MethodInfo GetMethodFromType( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] Type type, string methodName) { MethodInfo? method = type.GetMethod(methodName); if (method != null) @@ -508,6 +514,7 @@ private static MethodInfo GetMethodFromType(Type type, string methodName) throw missingMethod; } + [RequiresUnreferencedCode("calls GetType")] internal static Type GetTypeFromAssembly(Assembly assembly, string typeName) { typeName = GeneratedAssemblyNamespace + "." + typeName; @@ -557,6 +564,7 @@ internal bool CanRead(XmlMapping mapping, XmlReader xmlReader) return encodingStyle; } + [RequiresUnreferencedCode("calls Contract")] internal object? InvokeReader(XmlMapping mapping, XmlReader xmlReader, XmlDeserializationEvents events, string? encodingStyle) { XmlSerializationReader? reader = null; @@ -591,6 +599,7 @@ internal bool CanRead(XmlMapping mapping, XmlReader xmlReader) } } + [RequiresUnreferencedCode("calls Contract")] internal void InvokeWriter(XmlMapping mapping, XmlWriter xmlWriter, object? o, XmlSerializerNamespaces? namespaces, string? encodingStyle, string? id) { XmlSerializationWriter? writer = null; diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Compiler.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Compiler.cs index d2a710419ddb9d..20522dca69f2e9 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Compiler.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Compiler.cs @@ -7,6 +7,7 @@ using System.Diagnostics; using System.Globalization; using System.Runtime.CompilerServices; +using System.Diagnostics.CodeAnalysis; namespace System.Xml.Serialization { @@ -16,6 +17,7 @@ internal sealed class Compiler // SxS: This method does not take any resource name and does not expose any resources to the caller. // It's OK to suppress the SxS warning. + [RequiresUnreferencedCode("Reflects against input Type DeclaringType")] internal void AddImport(Type? type, Hashtable types) { if (type == null) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ImportContext.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ImportContext.cs index 4b746fccb6ab81..61acd28393cbdc 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ImportContext.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ImportContext.cs @@ -11,6 +11,7 @@ namespace System.Xml.Serialization using System.Collections; using System.Collections.Specialized; using System.Reflection; + using System.Diagnostics.CodeAnalysis; public class ImportContext { @@ -214,6 +215,7 @@ private int CompositeHash(XmlSchemaObject o, int hash) return (int)tmp; } + [RequiresUnreferencedCode("creates SchemaGraph")] internal void GenerateSchemaGraph(XmlSchemas schemas) { SchemaGraph graph = new SchemaGraph(Graph, schemas); @@ -259,6 +261,7 @@ internal sealed class SchemaGraph private readonly Hashtable _scope; private readonly int _items; + [RequiresUnreferencedCode("Calls Compile")] internal SchemaGraph(Hashtable scope, XmlSchemas schemas) { _scope = scope; diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Mappings.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Mappings.cs index 31018170306892..17a5111248294a 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Mappings.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Mappings.cs @@ -1057,6 +1057,7 @@ internal bool NamedAny internal sealed class SerializableMapping : SpecialMapping { private XmlSchema? _schema; + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] private Type? _type; private bool _needSchema = true; @@ -1174,7 +1175,9 @@ internal SerializableMapping? Next internal Type? Type { + [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] get { return _type; } + [param: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] set { _type = value; } } diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Models.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Models.cs index 4afb75ef820d1b..7fb61a8a8b9140 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Models.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Models.cs @@ -8,6 +8,7 @@ namespace System.Xml.Serialization using System.Collections; using System.Diagnostics; using System.Collections.Generic; + using System.Diagnostics.CodeAnalysis; // These classes define the abstract serialization model, e.g. the rules for WHAT is serialized. // The answer of HOW the values are serialized is answered by a particular reflection importer @@ -30,11 +31,13 @@ internal TypeScope TypeScope get { return _typeScope; } } + [RequiresUnreferencedCode("calls GetTypeModel")] internal TypeModel GetTypeModel(Type type) { return GetTypeModel(type, true); } + [RequiresUnreferencedCode("calls GetTypeDesc")] internal TypeModel GetTypeModel(Type type, bool directReference) { TypeModel? model; @@ -70,6 +73,7 @@ internal TypeModel GetTypeModel(Type type, bool directReference) return model; } + [RequiresUnreferencedCode("calls GetArrayTypeDesc")] internal ArrayModel GetArrayModel(Type type) { TypeModel? model; @@ -90,16 +94,20 @@ internal ArrayModel GetArrayModel(Type type) internal abstract class TypeModel { private readonly TypeDesc _typeDesc; + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] private readonly Type _type; private readonly ModelScope _scope; - protected TypeModel(Type type, TypeDesc typeDesc, ModelScope scope) + protected TypeModel( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] + Type type, TypeDesc typeDesc, ModelScope scope) { _scope = scope; _type = type; _typeDesc = typeDesc; } + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] internal Type Type { get { return _type; } @@ -118,27 +126,34 @@ internal TypeDesc TypeDesc internal sealed class ArrayModel : TypeModel { - internal ArrayModel(Type type, TypeDesc typeDesc, ModelScope scope) : base(type, typeDesc, scope) { } + internal ArrayModel( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, TypeDesc typeDesc, ModelScope scope) : base(type, typeDesc, scope) { } internal TypeModel Element { + [RequiresUnreferencedCode("Calls GetTypeModel")] get { return ModelScope.GetTypeModel(TypeScope.GetArrayElementType(Type, null)!); } } } internal sealed class PrimitiveModel : TypeModel { - internal PrimitiveModel(Type type, TypeDesc typeDesc, ModelScope scope) : base(type, typeDesc, scope) { } + internal PrimitiveModel( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, TypeDesc typeDesc, ModelScope scope) : base(type, typeDesc, scope) { } } internal sealed class SpecialModel : TypeModel { - internal SpecialModel(Type type, TypeDesc typeDesc, ModelScope scope) : base(type, typeDesc, scope) { } + internal SpecialModel( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, + TypeDesc typeDesc, ModelScope scope) : base(type, typeDesc, scope) { } } internal sealed class StructModel : TypeModel { - internal StructModel(Type type, TypeDesc typeDesc, ModelScope scope) : base(type, typeDesc, scope) { } + internal StructModel( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, + TypeDesc typeDesc, ModelScope scope) : base(type, typeDesc, scope) { } internal MemberInfo[] GetMemberInfos() { @@ -168,6 +183,7 @@ internal MemberInfo[] GetMemberInfos() return fieldsAndProps; } + [RequiresUnreferencedCode("calls GetFieldModel")] internal FieldModel? GetFieldModel(MemberInfo memberInfo) { FieldModel? model = null; @@ -199,6 +215,7 @@ private void CheckSupportedMember(TypeDesc? typeDesc, MemberInfo member, Type ty CheckSupportedMember(typeDesc.ArrayElementTypeDesc, member, type); } + [RequiresUnreferencedCode("calls GetTypeDesc")] private FieldModel? GetFieldModel(FieldInfo fieldInfo) { if (fieldInfo.IsStatic) return null; @@ -212,6 +229,7 @@ private void CheckSupportedMember(TypeDesc? typeDesc, MemberInfo member, Type ty return new FieldModel(fieldInfo, fieldInfo.FieldType, typeDesc); } + [RequiresUnreferencedCode("calls GetTypeDesc")] private FieldModel? GetPropertyModel(PropertyInfo propertyInfo) { if (propertyInfo.DeclaringType != Type) return null; @@ -274,6 +292,7 @@ internal FieldModel(string name, Type fieldType, TypeDesc fieldTypeDesc, bool ch _readOnly = readOnly; } + [RequiresUnreferencedCode("Calls GetField on MemberInfo type")] internal FieldModel(MemberInfo memberInfo, Type fieldType, TypeDesc fieldTypeDesc) { _name = memberInfo.Name; @@ -400,7 +419,9 @@ internal sealed class EnumModel : TypeModel { private ConstantModel[]? _constants; - internal EnumModel(Type type, TypeDesc typeDesc, ModelScope scope) : base(type, typeDesc, scope) { } + internal EnumModel( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] + Type type, TypeDesc typeDesc, ModelScope scope) : base(type, typeDesc, scope) { } internal ConstantModel[] Constants { diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/PrimitiveXmlSerializers.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/PrimitiveXmlSerializers.cs index 018317a523cf2f..993376e946462e 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/PrimitiveXmlSerializers.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/PrimitiveXmlSerializers.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. using System; +using System.Diagnostics.CodeAnalysis; namespace System.Xml.Serialization { @@ -224,6 +225,7 @@ internal void Write_QName(object? o) WriteNullableQualifiedNameLiteral(@"QName", @"", ((global::System.Xml.XmlQualifiedName)o)); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected override void InitCallbacks() { } @@ -708,6 +710,7 @@ internal sealed class XmlSerializationPrimitiveReader : System.Xml.Serialization return (object?)o; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected override void InitCallbacks() { } diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs index a1afa18babf09f..2095e7eac073ee 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs @@ -8,6 +8,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq.Expressions; using System.Reflection; +using System.Runtime.CompilerServices; using System.Xml.Extensions; using System.Xml.Schema; @@ -17,17 +18,23 @@ namespace System.Xml.Serialization internal sealed class ReflectionXmlSerializationReader : XmlSerializationReader { +#pragma warning disable IL2026 // Methods annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code private static TypeDesc StringTypeDesc { get; set; } = (new TypeScope()).GetTypeDesc(typeof(string)); private static TypeDesc QnameTypeDesc { get; set; } = (new TypeScope()).GetTypeDesc(typeof(XmlQualifiedName)); +#pragma warning restore IL2026 // Methods annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code private readonly XmlMapping _mapping; + [RequiresUnreferencedCode("Calls GetTypeDesc")] + static ReflectionXmlSerializationReader() { } + public ReflectionXmlSerializationReader(XmlMapping mapping, XmlReader xmlReader, XmlDeserializationEvents events, string? encodingStyle) { Init(xmlReader, events, encodingStyle, tempAssembly: null); _mapping = mapping; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected override void InitCallbacks() { TypeScope scope = _mapping.Scope!; @@ -50,6 +57,7 @@ protected override void InitIDs() { } + [RequiresUnreferencedCode("calls GenerateTypeElement")] public object? ReadObject() { XmlMapping xmlMapping = _mapping; @@ -73,6 +81,7 @@ protected override void InitIDs() } } + [RequiresUnreferencedCode("calls GenerateEncodedMembersElement")] private object GenerateMembersElement(XmlMembersMapping xmlMembersMapping) { if (xmlMembersMapping.Accessor.IsSoap) @@ -85,6 +94,7 @@ private object GenerateMembersElement(XmlMembersMapping xmlMembersMapping) } } + [RequiresUnreferencedCode("calls GenerateLiteralMembersElementInternal")] private object GenerateLiteralMembersElement(XmlMembersMapping xmlMembersMapping) { ElementAccessor element = xmlMembersMapping.Accessor; @@ -128,6 +138,7 @@ private object GenerateLiteralMembersElement(XmlMembersMapping xmlMembersMapping return p; } + [RequiresUnreferencedCode("calls WriteMemberElements")] private bool GenerateLiteralMembersElementInternal(MemberMapping[] mappings, bool hasWrapperElement, object?[] p) { Member? anyText = null; @@ -312,6 +323,7 @@ private void InitializeValueTypes(object?[] p, MemberMapping[] mappings) } } + [RequiresUnreferencedCode("calls ReadReferencedElement")] private object GenerateEncodedMembersElement(XmlMembersMapping xmlMembersMapping) { ElementAccessor element = xmlMembersMapping.Accessor; @@ -399,17 +411,19 @@ private object GenerateEncodedMembersElement(XmlMembersMapping xmlMembersMapping } else { - unrecognizedElementSource = (_) => - { - if (Reader.GetAttribute("id", null) != null) - { - ReadReferencedElement(); - } - else - { - UnknownNode(p); - }; - }; + unrecognizedElementSource = Wrapper; + [RequiresUnreferencedCode("calls ReadReferencedElement")] + void Wrapper(object? _) + { + if (Reader.GetAttribute("id", null) != null) + { + ReadReferencedElement(); + } + else + { + UnknownNode(p); + } + } } WriteMemberElements(members, unrecognizedElementSource, (_) => UnknownNode(p), null, null, fixup: fixup, checkTypeHrefsSource: checkTypeHrefSource); @@ -452,6 +466,7 @@ private object GenerateEncodedMembersElement(XmlMembersMapping xmlMembersMapping return p; } + [RequiresUnreferencedCode("calls ReadReferencedElements")] private object? GenerateTypeElement(XmlTypeMapping xmlTypeMapping) { ElementAccessor element = xmlTypeMapping.Accessor; @@ -481,6 +496,7 @@ private object GenerateEncodedMembersElement(XmlMembersMapping xmlMembersMapping return o; } + [RequiresUnreferencedCode("calls WriteMemberElementsCheckType")] private void WriteMemberElements(Member[] expectedMembers, UnknownNodeAction elementElseAction, UnknownNodeAction elseAction, Member? anyElement, Member? anyText, Fixup? fixup = null, List? checkTypeHrefsSource = null) { bool checkType = checkTypeHrefsSource != null; @@ -510,6 +526,7 @@ private void WriteMemberElements(Member[] expectedMembers, UnknownNodeAction ele } } + [RequiresUnreferencedCode("calls ReadReferencingElement")] private void WriteMemberElementsCheckType(List checkTypeHrefsSource) { object? RefElememnt = ReadReferencingElement(null, null, true, out string? refElemId); @@ -533,6 +550,7 @@ private void ProcessUnknownNode(UnknownNodeAction action) action?.Invoke(null); } + [RequiresUnreferencedCode("calls WriteMemberElements")] private void WriteMembers(ref object? o, Member[] members, UnknownNodeAction elementElseAction, UnknownNodeAction elseAction, Member? anyElement, Member? anyText) { Reader.MoveToContent(); @@ -544,7 +562,8 @@ private void WriteMembers(ref object? o, Member[] members, UnknownNodeAction ele } } - private void SetCollectionObjectWithCollectionMember([NotNull] ref object? collection, CollectionMember collectionMember, Type collectionType) + private void SetCollectionObjectWithCollectionMember([NotNull] ref object? collection, CollectionMember collectionMember, + [DynamicallyAccessedMembers(TrimmerConstants.AllMethods)] Type collectionType) { if (collectionType.IsArray) { @@ -577,7 +596,8 @@ private void SetCollectionObjectWithCollectionMember([NotNull] ref object? colle } } - private static void AddObjectsIntoTargetCollection(object targetCollection, List sourceCollection, Type targetCollectionType) + private static void AddObjectsIntoTargetCollection(object targetCollection, List sourceCollection, + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] Type targetCollectionType) { if (targetCollection is IList targetList) { @@ -605,6 +625,7 @@ private static void AddObjectsIntoTargetCollection(object targetCollection, List private static readonly ConcurrentDictionary<(Type, string), ReflectionXmlSerializationReaderHelper.SetMemberValueDelegate> s_setMemberValueDelegateCache = new ConcurrentDictionary<(Type, string), ReflectionXmlSerializationReaderHelper.SetMemberValueDelegate>(); + [RequiresUnreferencedCode("calls GetType on object")] private static ReflectionXmlSerializationReaderHelper.SetMemberValueDelegate GetSetMemberValueDelegate(object o, string memberName) { Debug.Assert(o != null, "Object o should not be null"); @@ -652,6 +673,7 @@ private static ReflectionXmlSerializationReaderHelper.SetMemberValueDelegate Get throw new InvalidOperationException(SR.XmlInternalError); } + [RequiresUnreferencedCode("calls WritePrimitive")] private bool WriteMemberText(Member anyText) { object? value; @@ -714,6 +736,7 @@ private bool IsSequence(Member[] members) return false; } + [RequiresUnreferencedCode("calls WriteElement")] private void WriteMemberElementsIf(Member[] expectedMembers, Member? anyElementMember, UnknownNodeAction elementElseAction, Fixup? fixup = null, CheckTypeSource? checkTypeSource = null) { bool checkType = checkTypeSource != null; @@ -822,6 +845,7 @@ private void WriteMemberElementsIf(Member[] expectedMembers, Member? anyElementM } } + [RequiresUnreferencedCode("calls ReadReferencingElement")] private object? WriteElement(ElementAccessor element, bool checkSpecified, bool checkForNull, bool readOnly, string? defaultNamespace, int fixupIndex = -1, int elementIndex = -1, Fixup? fixup = null, Member? member = null) { object? value = null; @@ -994,11 +1018,14 @@ private void WriteMemberElementsIf(Member[] expectedMembers, Member? anyElementM return value; } + [RequiresUnreferencedCode("calls WriteStructMethod")] private XmlSerializationReadCallback CreateXmlSerializationReadCallback(TypeMapping mapping) { if (mapping is StructMapping structMapping) { - return () => WriteStructMethod(structMapping, mapping.TypeDesc!.IsNullable, true, defaultNamespace: null); + [RequiresUnreferencedCode("calls WriteStructMethod")] + object? WriteStruct() => WriteStructMethod(structMapping, mapping.TypeDesc!.IsNullable, true, defaultNamespace: null); + return WriteStruct; } else if (mapping is EnumMapping enumMapping) { @@ -1006,7 +1033,9 @@ private XmlSerializationReadCallback CreateXmlSerializationReadCallback(TypeMapp } else if (mapping is NullableMapping nullableMapping) { - return () => WriteNullableMethod(nullableMapping, false, null); + [RequiresUnreferencedCode("calls WriteNullableMethod")] + object? Wrapper() => WriteNullableMethod(nullableMapping, false, null); + return Wrapper; } return DummyReadArrayMethod; @@ -1050,6 +1079,7 @@ private static bool IsWildcard(SpecialMapping mapping) return mapping.TypeDesc!.CanBeElementValue; } + [RequiresUnreferencedCode("calls ReadReferencingElement")] private object? WriteArray(ArrayMapping arrayMapping, bool readOnly, bool isNullable, string? defaultNamespace, int fixupIndex = -1, Fixup? fixup = null, Member? member = null) { object? o = null; @@ -1141,6 +1171,7 @@ private static bool IsWildcard(SpecialMapping mapping) return o; } + [RequiresUnreferencedCode("XmlSerializationReader methods have RequiresUnreferencedCode")] private object WritePrimitive(TypeMapping mapping, Func readFunc, object funcState) { if (mapping is EnumMapping enumMapping) @@ -1202,6 +1233,7 @@ private object WritePrimitive(TypeMapping mapping, Func readFunc } } + [RequiresUnreferencedCode("calls WriteEncodedStructMethod")] private object? WriteStructMethod(StructMapping mapping, bool isNullable, bool checkType, string? defaultNamespace) { if (mapping.IsSoap) @@ -1210,6 +1242,7 @@ private object WritePrimitive(TypeMapping mapping, Func readFunc return WriteLiteralStructMethod(mapping, isNullable, checkType, defaultNamespace); } + [RequiresUnreferencedCode("calls WriteElement")] private object? WriteNullableMethod(NullableMapping nullableMapping, bool checkType, string? defaultNamespace) { object? o = Activator.CreateInstance(nullableMapping.TypeDesc!.Type!); @@ -1272,7 +1305,8 @@ private Hashtable WriteHashtable(EnumMapping mapping, string name) return h; } - private object? ReflectionCreateObject(Type type) + private object? ReflectionCreateObject( + [DynamicallyAccessedMembers(TrimmerConstants.AllMethods)] Type type) { object? obj; if (type.IsArray) @@ -1295,10 +1329,13 @@ private Hashtable WriteHashtable(EnumMapping mapping, string name) return obj; } - private ConstructorInfo? GetDefaultConstructor(Type type) => + private ConstructorInfo? GetDefaultConstructor( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors + | DynamicallyAccessedMemberTypes.NonPublicConstructors)] Type type) => type.IsValueType ? null : type.GetConstructor(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, Type.EmptyTypes, null); + [RequiresUnreferencedCode("calls WriteMemberElements")] private object? WriteEncodedStructMethod(StructMapping structMapping) { if (structMapping.TypeDesc!.IsRoot) @@ -1324,7 +1361,12 @@ private Hashtable WriteHashtable(EnumMapping mapping, string name) TypeDesc td = member.Mapping.TypeDesc!; if (td.IsCollection || td.IsEnumerable) { - member.Source = (value) => WriteAddCollectionFixup(o!, member, value!); + member.Source = Wrapper; + [RequiresUnreferencedCode("Calls WriteAddCollectionFixup")] + void Wrapper(object? value) + { + WriteAddCollectionFixup(o!, member, value!); + } } else if (!member.Mapping.ReadOnly) { @@ -1413,6 +1455,7 @@ private XmlSerializationFixupCallback CreateWriteFixupMethod(Member[] members) }; } + [RequiresUnreferencedCode("calls GetSetMemberValueDelegate")] private void WriteAddCollectionFixup(object o, Member member, object memberValue) { TypeDesc typeDesc = member.Mapping.TypeDesc!; @@ -1423,6 +1466,7 @@ private void WriteAddCollectionFixup(object o, Member member, object memberValue WriteAddCollectionFixup(getSource, setSource, memberValue, typeDesc, readOnly); } + [RequiresUnreferencedCode("Calls GetCreateCollectionOfObjectsCallback")] private object? WriteAddCollectionFixup(Func getSource, Action setSource, object memberValue, TypeDesc typeDesc, bool readOnly) { object? memberSource = getSource(); @@ -1446,9 +1490,12 @@ private void WriteAddCollectionFixup(object o, Member member, object memberValue return memberSource; } + [RequiresUnreferencedCode("Calls AddObjectsIntoTargetCollection")] private XmlSerializationCollectionFixupCallback GetCreateCollectionOfObjectsCallback(Type collectionType) { - return (collection, collectionItems) => + return Wrapper; + [RequiresUnreferencedCode("Calls AddObjectsIntoTargetCollection")] + void Wrapper(object? collection, object? collectionItems) { if (collectionItems == null) return; @@ -1470,9 +1517,10 @@ private XmlSerializationCollectionFixupCallback GetCreateCollectionOfObjectsCall } AddObjectsIntoTargetCollection(collection, listOfItems, collectionType); - }; + } } + [RequiresUnreferencedCode("calls WriteEnumAndArrayTypes")] private object? WriteLiteralStructMethod(StructMapping structMapping, bool isNullable, bool checkType, string? defaultNamespace) { XmlQualifiedName? xsiType = checkType ? GetXsiType() : null; @@ -1578,7 +1626,10 @@ private XmlSerializationCollectionFixupCallback GetCreateCollectionOfObjectsCall if (mapping.Attribute != null) { - member.Source = (value) => SetOrAddValueToMember(o!, value!, member.Mapping.MemberInfo!); + member.Source = Wrapper; + [RequiresUnreferencedCode("calls SetOrAddValueToMember")] + void Wrapper(object? value) { SetOrAddValueToMember(o!, value!, member.Mapping.MemberInfo!); } + if (mapping.Attribute.Any) { anyAttribute = member; @@ -1668,7 +1719,9 @@ private XmlSerializationCollectionFixupCallback GetCreateCollectionOfObjectsCall if (member.Mapping.CheckSpecified == SpecifiedAccessor.ReadWrite) { - member.CheckSpecifiedSource = (_) => + member.CheckSpecifiedSource = Wrapper; + [RequiresUnreferencedCode("calls GetType on object")] + void Wrapper(object? _) { string specifiedMemberName = member.Mapping.Name + "Specified"; MethodInfo? specifiedMethodInfo = o!.GetType().GetMethod("set_" + specifiedMemberName); @@ -1682,7 +1735,9 @@ private XmlSerializationCollectionFixupCallback GetCreateCollectionOfObjectsCall ChoiceIdentifierAccessor? choice = mapping.ChoiceIdentifier; if (choice != null && o != null) { - member.ChoiceSource = (elementNameObject) => + member.ChoiceSource = Wrapper; + [RequiresUnreferencedCode("Calls SetOrAddValueToMember")] + void Wrapper(object elementNameObject) { string? elementName = elementNameObject as string; foreach (var name in choice.MemberIds!) @@ -1752,6 +1807,7 @@ private XmlSerializationCollectionFixupCallback GetCreateCollectionOfObjectsCall } } + [RequiresUnreferencedCode("calls WriteArray")] private bool WriteEnumAndArrayTypes(out object? o, StructMapping mapping, XmlQualifiedName xsiType, string? defaultNamespace) { foreach (var m in _mapping.Scope!.TypeMappings) @@ -1790,6 +1846,7 @@ private bool WriteEnumAndArrayTypes(out object? o, StructMapping mapping, XmlQua return false; } + [RequiresUnreferencedCode("calls WriteStructMethod")] private bool WriteDerivedTypes(out object? o, StructMapping mapping, XmlQualifiedName xsiType, string? defaultNamespace, bool checkType, bool isNullable) { for (StructMapping? derived = mapping.DerivedMappings; derived != null; derived = derived.NextDerivedMapping) @@ -1810,6 +1867,7 @@ private bool WriteDerivedTypes(out object? o, StructMapping mapping, XmlQualifie return false; } + [RequiresUnreferencedCode("calls WriteAttribute")] private void WriteAttributes(Member[] members, Member? anyAttribute, UnknownNodeAction elseCall, ref object? o) { Member? xmlnsMember = null; @@ -1896,6 +1954,7 @@ private void WriteAttributes(Member[] members, Member? anyAttribute, UnknownNode } } + [RequiresUnreferencedCode("Calls WritePrimitive")] private void WriteAttribute(Member member, object? attr = null) { AttributeAccessor attribute = member.Mapping.Attribute!; @@ -1943,6 +2002,7 @@ private void WriteAttribute(Member member, object? attr = null) } } + [RequiresUnreferencedCode("calls GetSetMemberValueDelegate")] private void SetOrAddValueToMember(object o, object value, MemberInfo memberInfo) { Type memberType = GetMemberType(memberInfo); @@ -1963,6 +2023,7 @@ private void SetOrAddValueToMember(object o, object value, MemberInfo memberInfo } } + [RequiresUnreferencedCode("calls GetSetMemberValueDelegate")] private void AddItemInArrayMember(object o, MemberInfo memberInfo, Type memberType, object item) { var currentArray = (Array?)GetMemberValue(o, memberInfo); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs index 4614bd2c453edc..4d497430464331 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs @@ -4,6 +4,7 @@ using System.Collections; using System.Collections.Generic; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Text; using System.Xml.Schema; @@ -14,8 +15,13 @@ internal sealed class ReflectionXmlSerializationWriter : XmlSerializationWriter { private readonly XmlMapping _mapping; +#pragma warning disable IL2026 // Methods annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code internal static TypeDesc StringTypeDesc { get; private set; } = (new TypeScope()).GetTypeDesc(typeof(string)); internal static TypeDesc QnameTypeDesc { get; private set; } = (new TypeScope()).GetTypeDesc(typeof(XmlQualifiedName)); +#pragma warning restore IL2026 // Methods annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code + + [RequiresUnreferencedCode("class GetTypeDesc")] + static ReflectionXmlSerializationWriter() { } public ReflectionXmlSerializationWriter(XmlMapping xmlMapping, XmlWriter xmlWriter, XmlSerializerNamespaces namespaces, string? encodingStyle, string? id) { @@ -36,6 +42,7 @@ public ReflectionXmlSerializationWriter(XmlMapping xmlMapping, XmlWriter xmlWrit } } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected override void InitCallbacks() { TypeScope scope = _mapping.Scope!; @@ -55,6 +62,7 @@ protected override void InitCallbacks() } } + [RequiresUnreferencedCode("calls WriteObjectOfTypeElement")] public void WriteObject(object? o) { XmlMapping xmlMapping = _mapping; @@ -68,11 +76,13 @@ public void WriteObject(object? o) } } + [RequiresUnreferencedCode("calls GenerateTypeElement")] private void WriteObjectOfTypeElement(object? o, XmlTypeMapping mapping) { GenerateTypeElement(o, mapping); } + [RequiresUnreferencedCode("calls WriteReferencedElements")] private void GenerateTypeElement(object? o, XmlTypeMapping xmlMapping) { ElementAccessor element = xmlMapping.Accessor; @@ -113,6 +123,7 @@ private void GenerateTypeElement(object? o, XmlTypeMapping xmlMapping) } } + [RequiresUnreferencedCode("calls WriteElements")] private void WriteMember(object? o, object? choiceSource, ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, TypeDesc memberTypeDesc, bool writeAccessors) { if (memberTypeDesc.IsArrayLike && @@ -126,6 +137,7 @@ private void WriteMember(object? o, object? choiceSource, ElementAccessor[] elem } } + [RequiresUnreferencedCode("calls WriteArrayItems")] private void WriteArray(object o, object? choiceSource, ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, TypeDesc arrayTypeDesc) { if (elements.Length == 0 && text == null) @@ -149,6 +161,7 @@ private void WriteArray(object o, object? choiceSource, ElementAccessor[] elemen WriteArrayItems(elements, text, choice, arrayTypeDesc, o); } + [RequiresUnreferencedCode("calls WriteElements")] private void WriteArrayItems(ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, TypeDesc? arrayTypeDesc, object o) { var arr = o as IList; @@ -178,6 +191,7 @@ private void WriteArrayItems(ElementAccessor[] elements, TextAccessor? text, Cho } } + [RequiresUnreferencedCode("calls CreateUnknownTypeException")] private void WriteElements(object? o, object? enumSource, ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, bool writeAccessors, bool isNullable) { if (elements.Length == 0 && text == null) @@ -309,6 +323,7 @@ private void WriteText(object o, TextAccessor text) } } + [RequiresUnreferencedCode("calls WritePotentiallyReferencingElement")] private void WriteElement(object? o, ElementAccessor element, bool writeAccessor) { string name = writeAccessor ? element.Name : element.Mapping!.TypeName!; @@ -437,14 +452,17 @@ private void WriteElement(object? o, ElementAccessor element, bool writeAccessor } } + [RequiresUnreferencedCode("calls WriteStructMethod")] private XmlSerializationWriteCallback CreateXmlSerializationWriteCallback(TypeMapping mapping, string name, string? ns, bool isNullable) { if (mapping is StructMapping structMapping) { - return (o) => + return Wrapper; + [RequiresUnreferencedCode("calls WriteStructMethod")] + void Wrapper(object o) { WriteStructMethod(structMapping, name, ns, o, isNullable, needType: false); - }; + } } else if (mapping is EnumMapping enumMapping) { @@ -489,6 +507,7 @@ private void WriteQualifiedNameElement(string name, string ns, object? defaultVa } } + [RequiresUnreferencedCode("calls WriteTypedPrimitive")] private void WriteStructMethod(StructMapping mapping, string n, string? ns, object? o, bool isNullable, bool needType) { if (mapping.IsSoap && mapping.TypeDesc!.IsRoot) return; @@ -635,6 +654,7 @@ private void WriteStructMethod(StructMapping mapping, string n, string? ns, obje } } + [RequiresUnreferencedCode("Calls GetType on object")] private object? GetMemberValue(object o, string memberName) { MemberInfo memberInfo = ReflectionXmlSerializationHelper.GetMember(o.GetType(), memberName); @@ -642,6 +662,7 @@ private void WriteStructMethod(StructMapping mapping, string n, string? ns, obje return memberValue; } + [RequiresUnreferencedCode("calls WriteMember")] private bool WriteEnumAndArrayTypes(StructMapping structMapping, object o, string n, string? ns) { if (o is Enum) @@ -913,6 +934,7 @@ private int FindXmlnsIndex(MemberMapping[] members) return -1; } + [RequiresUnreferencedCode("calls WriteStructMethod")] private bool WriteDerivedTypes(StructMapping mapping, string n, string? ns, object o, bool isNullable) { Type t = o.GetType(); @@ -1186,6 +1208,7 @@ private string ConvertPrimitiveToString(object o, TypeDesc typeDesc) return stringValue; } + [RequiresUnreferencedCode("calls WritePotentiallyReferencingElement")] private void GenerateMembersElement(object o, XmlMembersMapping xmlMembersMapping) { ElementAccessor element = xmlMembersMapping.Accessor; @@ -1340,6 +1363,7 @@ private enum WritePrimitiveMethodRequirement internal static class ReflectionXmlSerializationHelper { + [RequiresUnreferencedCode("Reflects over base members")] public static MemberInfo GetMember(Type declaringType, string memberName) { MemberInfo[] memberInfos = declaringType.GetMember(memberName); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SchemaImporter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SchemaImporter.cs index 2df97cbc0e73a1..1f511afd9af5f1 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SchemaImporter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SchemaImporter.cs @@ -13,6 +13,7 @@ namespace System.Xml.Serialization #if DEBUG using System.Diagnostics; + using System.Diagnostics.CodeAnalysis; #endif public abstract class SchemaImporter @@ -26,6 +27,7 @@ public abstract class SchemaImporter private NameTable? _typesInUse; private NameTable? _groupsInUse; + [RequiresUnreferencedCode("calls SetCache")] internal SchemaImporter(XmlSchemas schemas, CodeGenerationOptions options, ImportContext context) { if (!schemas.Contains(XmlSchema.Namespace)) @@ -114,6 +116,7 @@ internal CodeGenerationOptions Options get { return _options; } } + [RequiresUnreferencedCode("calls GetTypeDesc")] internal void MakeDerived(StructMapping structMapping, Type? baseType, bool baseTypeCanBeIndirect) { structMapping.ReferencedByTopLevelElement = true; @@ -144,6 +147,7 @@ internal string GenerateUniqueTypeName(string typeName) return TypeIdentifiers.AddUnique(typeName, typeName); } + [RequiresUnreferencedCode("calls GetTypeDesc")] private StructMapping CreateRootMapping() { TypeDesc typeDesc = Scope.GetTypeDesc(typeof(object)); @@ -157,6 +161,7 @@ private StructMapping CreateRootMapping() return mapping; } + [RequiresUnreferencedCode("calls CreateRootMapping")] internal StructMapping GetRootMapping() { if (_root == null) @@ -164,6 +169,7 @@ internal StructMapping GetRootMapping() return _root; } + [RequiresUnreferencedCode("calls GetRootMapping")] internal StructMapping ImportRootMapping() { if (!_rootImported) @@ -174,6 +180,7 @@ internal StructMapping ImportRootMapping() return GetRootMapping(); } + [RequiresUnreferencedCode("calls ImportType")] internal abstract void ImportDerivedTypes(XmlQualifiedName baseName); internal void AddReference(XmlQualifiedName name, NameTable references, string error) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SoapReflectionImporter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SoapReflectionImporter.cs index 2878eeb604c19a..3d2d65df34c8d8 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SoapReflectionImporter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SoapReflectionImporter.cs @@ -12,6 +12,7 @@ namespace System.Xml.Serialization using System.Threading; using System.Xml; using System.Xml.Serialization; + using System.Diagnostics.CodeAnalysis; public class SoapReflectionImporter { @@ -47,11 +48,13 @@ public SoapReflectionImporter(SoapAttributeOverrides? attributeOverrides, string _modelScope = new ModelScope(_typeScope); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void IncludeTypes(ICustomAttributeProvider provider) { IncludeTypes(provider, new RecursionLimiter()); } + [RequiresUnreferencedCode("calls IncludeType")] private void IncludeTypes(ICustomAttributeProvider provider, RecursionLimiter limiter) { object[] attrs = provider.GetCustomAttributes(typeof(SoapIncludeAttribute), false); @@ -61,21 +64,25 @@ private void IncludeTypes(ICustomAttributeProvider provider, RecursionLimiter li } } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void IncludeType(Type type) { IncludeType(type, new RecursionLimiter()); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] private void IncludeType(Type type, RecursionLimiter limiter) { ImportTypeMapping(_modelScope.GetTypeModel(type), limiter); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlTypeMapping ImportTypeMapping(Type type) { return ImportTypeMapping(type, null); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlTypeMapping ImportTypeMapping(Type type, string? defaultNamespace) { ElementAccessor element = new ElementAccessor(); @@ -91,21 +98,25 @@ public XmlTypeMapping ImportTypeMapping(Type type, string? defaultNamespace) return xmlMapping; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members) { return ImportMembersMapping(elementName, ns, members, true, true, false); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors) { return ImportMembersMapping(elementName, ns, members, hasWrapperElement, writeAccessors, false); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors, bool validate) { return ImportMembersMapping(elementName, ns, members, hasWrapperElement, writeAccessors, validate, XmlMappingAccess.Read | XmlMappingAccess.Write); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors, bool validate, XmlMappingAccess access) { ElementAccessor element = new ElementAccessor(); @@ -141,11 +152,13 @@ private SoapAttributes GetAttributes(MemberInfo memberInfo) return new SoapAttributes(memberInfo); } + [RequiresUnreferencedCode("calls ImportTypeMapping")] private TypeMapping ImportTypeMapping(TypeModel model, RecursionLimiter limiter) { return ImportTypeMapping(model, string.Empty, limiter); } + [RequiresUnreferencedCode("Calls TypeDesc")] private TypeMapping ImportTypeMapping(TypeModel model, string dataType, RecursionLimiter limiter) { if (dataType.Length > 0) @@ -206,6 +219,7 @@ private TypeMapping ImportTypeMapping(TypeModel model, string dataType, Recursio } } + [RequiresUnreferencedCode("calls GetTypeDesc")] private StructMapping CreateRootMapping() { TypeDesc typeDesc = _typeScope.GetTypeDesc(typeof(object)); @@ -219,6 +233,7 @@ private StructMapping CreateRootMapping() return mapping; } + [RequiresUnreferencedCode("calls CreateRootMapping")] private StructMapping GetRootMapping() { if (_root == null) @@ -238,7 +253,8 @@ private StructMapping GetRootMapping() return mapping; } - private NullableMapping CreateNullableMapping(TypeMapping baseMapping, Type type) + private NullableMapping CreateNullableMapping(TypeMapping baseMapping, + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type) { TypeDesc typeDesc = baseMapping.TypeDesc!.GetNullableTypeDesc(type); TypeMapping? existingMapping = (TypeMapping?)_nullables[baseMapping.TypeName!, baseMapping.Namespace]; @@ -275,6 +291,7 @@ private NullableMapping CreateNullableMapping(TypeMapping baseMapping, Type type return mapping; } + [RequiresUnreferencedCode("calls GetRootMapping")] private StructMapping ImportStructLikeMapping(StructModel model, RecursionLimiter limiter) { if (model.TypeDesc.Kind == TypeKind.Root) return GetRootMapping(); @@ -332,7 +349,7 @@ private StructMapping ImportStructLikeMapping(StructModel model, RecursionLimite return mapping; } - + [RequiresUnreferencedCode("calls GetTypeModel")] private bool InitializeStructMembers(StructMapping mapping, StructModel model, RecursionLimiter limiter) { if (mapping.IsFullyInitialized) @@ -397,7 +414,7 @@ private bool InitializeStructMembers(StructMapping mapping, StructModel model, R return true; } - + [RequiresUnreferencedCode("calls IncludeTypes")] private ArrayMapping ImportArrayLikeMapping(ArrayModel model, RecursionLimiter limiter) { ArrayMapping mapping = new ArrayMapping(); @@ -534,6 +551,7 @@ private PrimitiveMapping ImportPrimitiveMapping(PrimitiveModel model, string dat return mapping; } + [RequiresUnreferencedCode("calls XsdTypeName")] private EnumMapping ImportEnumMapping(EnumModel model) { SoapAttributes a = GetAttributes(model.Type); @@ -585,6 +603,7 @@ private EnumMapping ImportEnumMapping(EnumModel model) return constant; } + [RequiresUnreferencedCode("calls GetTypeDesc")] private MembersMapping ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, string? ns, bool hasWrapperElement, bool writeAccessors, bool validateWrapperElement, RecursionLimiter limiter) { MembersMapping members = new MembersMapping(); @@ -625,6 +644,7 @@ private MembersMapping ImportMembersMapping(XmlReflectionMember[] xmlReflectionM return members; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] private MemberMapping? ImportMemberMapping(XmlReflectionMember xmlReflectionMember, string? ns, XmlReflectionMember[] xmlReflectionMembers, XmlSchemaForm form, RecursionLimiter limiter) { SoapAttributes a = xmlReflectionMember.SoapAttributes; @@ -643,6 +663,7 @@ private MembersMapping ImportMembersMapping(XmlReflectionMember[] xmlReflectionM return member; } + [RequiresUnreferencedCode("calls ImportAccessorMapping")] private MemberMapping? ImportFieldMapping(FieldModel model, SoapAttributes a, string ns, RecursionLimiter limiter) { if (a.SoapIgnore) return null; @@ -659,6 +680,7 @@ private MembersMapping ImportMembersMapping(XmlReflectionMember[] xmlReflectionM return member; } + [RequiresUnreferencedCode("calls GetTypeDesc")] private void ImportAccessorMapping(MemberMapping accessor, FieldModel model, SoapAttributes a, string? ns, XmlSchemaForm form, RecursionLimiter limiter) { Type accessorType = model.FieldType; @@ -714,6 +736,7 @@ private static ElementAccessor CreateElementAccessor(TypeMapping mapping, string return element; } + [RequiresUnreferencedCode("calls GetTypeDesc")] private object? GetDefaultValue(TypeDesc fieldTypeDesc, SoapAttributes a) { if (a.SoapDefaultValue == null || a.SoapDefaultValue == DBNull.Value) return null; @@ -736,6 +759,7 @@ private static ElementAccessor CreateElementAccessor(TypeMapping mapping, string return a.SoapDefaultValue; } + [RequiresUnreferencedCode("calls GetTypeDesc")] internal string XsdTypeName(Type type) { if (type == typeof(object)) return Soap.UrType; @@ -744,6 +768,8 @@ internal string XsdTypeName(Type type) return typeDesc.DataType.Name; return XsdTypeName(type, GetAttributes(type), typeDesc.Name); } + + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] internal string XsdTypeName(Type type, SoapAttributes a, string name) { string typeName = name; diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SourceInfo.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SourceInfo.cs index ec3f4d5a9c7ea2..5b4e7fec3459e4 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SourceInfo.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SourceInfo.cs @@ -32,10 +32,13 @@ internal sealed class SourceInfo public string Source; public readonly string Arg; public readonly MemberInfo? MemberInfo; + + [DynamicallyAccessedMembers(TrimmerConstants.AllMethods)] public readonly Type? Type; public readonly CodeGenerator ILG; - public SourceInfo(string source, string? arg, MemberInfo? memberInfo, Type? type, CodeGenerator ilg) + public SourceInfo(string source, string? arg, MemberInfo? memberInfo, + [DynamicallyAccessedMembers(TrimmerConstants.AllMethods)] Type? type, CodeGenerator ilg) { this.Source = source; this.Arg = arg ?? source; @@ -49,16 +52,19 @@ public SourceInfo CastTo(TypeDesc td) return new SourceInfo("((" + td.CSharpName + ")" + Source + ")", Arg, MemberInfo, td.Type!, ILG); } + [RequiresUnreferencedCode("calls InternalLoad")] public void LoadAddress(Type? elementType) { InternalLoad(elementType, asAddress: true); } + [RequiresUnreferencedCode("calls InternalLoad")] public void Load(Type? elementType) { InternalLoad(elementType); } + [RequiresUnreferencedCode("calls LoadMemberAddress")] private void InternalLoad(Type? elementType, bool asAddress = false) { Match match = s_regex.Match(Arg); @@ -209,7 +215,9 @@ private void Convert(Type sourceType, Type? targetType, bool asAddress) } } - private void ConvertNullableValue(Type nullableType, Type targetType) + private void ConvertNullableValue( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods + | DynamicallyAccessedMemberTypes.NonPublicMethods)] Type nullableType, Type targetType) { System.Diagnostics.Debug.Assert(targetType == nullableType || targetType.IsAssignableFrom(nullableType.GetGenericArguments()[0])); if (targetType != nullableType) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/TypeExtensions.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/TypeExtensions.cs index f84d014c93ae65..9685b64ebdd0d3 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/TypeExtensions.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/TypeExtensions.cs @@ -4,13 +4,16 @@ namespace System.Xml.Serialization { using System; + using System.Diagnostics.CodeAnalysis; using System.Reflection; internal static class TypeExtensions { private const string ImplicitCastOperatorName = "op_Implicit"; - public static bool TryConvertTo(this Type targetType, object? data, out object? returnValue) + public static bool TryConvertTo( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods + | DynamicallyAccessedMemberTypes.NonPublicMethods)] this Type targetType, object? data, out object? returnValue) { if (targetType == null) { diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Types.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Types.cs index 83b660d0cccb21..23faef393a2ba8 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Types.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Types.cs @@ -7,6 +7,7 @@ namespace System.Xml.Serialization using System.Collections; using System.Collections.Generic; using System.Diagnostics; + using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Text; using System.Xml; @@ -62,6 +63,21 @@ internal enum TypeFlags Unsupported = 0x100000, } + // Shorthands for common trimmer constants + internal static class TrimmerConstants + { + public const DynamicallyAccessedMemberTypes AllMethods = DynamicallyAccessedMemberTypes.PublicMethods + | DynamicallyAccessedMemberTypes.NonPublicMethods + | DynamicallyAccessedMemberTypes.PublicConstructors + | DynamicallyAccessedMemberTypes.NonPublicConstructors; + public const DynamicallyAccessedMemberTypes PublicMembers = DynamicallyAccessedMemberTypes.PublicConstructors + | DynamicallyAccessedMemberTypes.PublicMethods + | DynamicallyAccessedMemberTypes.PublicFields + | DynamicallyAccessedMemberTypes.PublicNestedTypes + | DynamicallyAccessedMemberTypes.PublicProperties + | DynamicallyAccessedMemberTypes.PublicEvents; + } + internal sealed class TypeDesc { private readonly string _name; @@ -72,6 +88,7 @@ internal sealed class TypeDesc private TypeDesc? _nullableTypeDesc; private readonly TypeKind _kind; private readonly XmlSchemaType? _dataType; + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] private Type? _type; private TypeDesc? _baseTypeDesc; private TypeFlags _flags; @@ -105,13 +122,15 @@ internal TypeDesc(string name, string fullName, TypeKind kind, TypeDesc? baseTyp : this(name, fullName, (XmlSchemaType?)null, kind, baseTypeDesc, flags, null) { } - internal TypeDesc(Type type, bool isXsdType, XmlSchemaType dataType, string formatterName, TypeFlags flags) + internal TypeDesc( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, bool isXsdType, XmlSchemaType dataType, string formatterName, TypeFlags flags) : this(type!.Name, type.FullName!, dataType, TypeKind.Primitive, (TypeDesc?)null, flags, formatterName) { _isXsdType = isXsdType; _type = type; } - internal TypeDesc(Type? type, string name, string fullName, TypeKind kind, TypeDesc? baseTypeDesc, TypeFlags flags, TypeDesc? arrayElementTypeDesc) + internal TypeDesc( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type? type, string name, string fullName, TypeKind kind, TypeDesc? baseTypeDesc, TypeFlags flags, TypeDesc? arrayElementTypeDesc) : this(name, fullName, null, kind, baseTypeDesc, flags, null) { _arrayElementTypeDesc = arrayElementTypeDesc; @@ -165,6 +184,7 @@ internal XmlSchemaType? DataType get { return _dataType; } } + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] internal Type? Type { get { return _type; } @@ -347,7 +367,8 @@ internal Exception? Exception set { _exception = value; } } - internal TypeDesc GetNullableTypeDesc(Type type) + internal TypeDesc GetNullableTypeDesc( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type) { if (IsOptionalValue) return this; @@ -622,7 +643,9 @@ private static void AddSoapEncodedTypes(string ns) AddSoapEncodedPrimitive(typeof(byte[]), "base64", ns, "ByteArrayBase64", new XmlQualifiedName("base64Binary", XmlSchema.Namespace), TypeFlags.CanBeAttributeValue | TypeFlags.CanBeElementValue | TypeFlags.IgnoreDefault | TypeFlags.Reference); } - private static void AddPrimitive(Type type, string dataTypeName, string formatterName, TypeFlags flags) + private static void AddPrimitive( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, + string dataTypeName, string formatterName, TypeFlags flags) { XmlSchemaSimpleType dataType = new XmlSchemaSimpleType(); dataType.Name = dataTypeName; @@ -633,7 +656,9 @@ private static void AddPrimitive(Type type, string dataTypeName, string formatte s_primitiveNames.Add(dataTypeName, XmlSchema.Namespace, typeDesc); } - private static void AddNonXsdPrimitive(Type type, string dataTypeName, string ns, string formatterName, XmlQualifiedName baseTypeName, XmlSchemaFacet[] facets, TypeFlags flags) + private static void AddNonXsdPrimitive( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, + string dataTypeName, string ns, string formatterName, XmlQualifiedName baseTypeName, XmlSchemaFacet[] facets, TypeFlags flags) { XmlSchemaSimpleType dataType = new XmlSchemaSimpleType(); dataType.Name = dataTypeName; @@ -651,7 +676,9 @@ private static void AddNonXsdPrimitive(Type type, string dataTypeName, string ns s_primitiveNames.Add(dataTypeName, ns, typeDesc); } - private static void AddSoapEncodedPrimitive(Type type, string dataTypeName, string ns, string formatterName, XmlQualifiedName baseTypeName, TypeFlags flags) + private static void AddSoapEncodedPrimitive( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, + string dataTypeName, string ns, string formatterName, XmlQualifiedName baseTypeName, TypeFlags flags) { AddNonXsdPrimitive(type, dataTypeName, ns, formatterName, baseTypeName, Array.Empty(), flags); } @@ -679,16 +706,19 @@ private static void AddSoapEncodedPrimitive(Type type, string dataTypeName, stri return (TypeDesc?)s_primitiveDataTypes[dataType]; } + [RequiresUnreferencedCode("calls GetTypeDesc")] internal TypeDesc GetTypeDesc(Type type) { return GetTypeDesc(type, null, true, true); } + [RequiresUnreferencedCode("calls GetTypeDesc")] internal TypeDesc GetTypeDesc(Type type, MemberInfo? source, bool directReference) { return GetTypeDesc(type, source, directReference, true); } + [RequiresUnreferencedCode("calls ImportTypeDesc")] internal TypeDesc GetTypeDesc(Type type, MemberInfo? source, bool directReference, bool throwOnError) { if (type.ContainsGenericParameters) @@ -711,6 +741,7 @@ internal TypeDesc GetTypeDesc(Type type, MemberInfo? source, bool directReferenc return typeDesc; } + [RequiresUnreferencedCode("calls ImportTypeDesc")] internal TypeDesc GetArrayTypeDesc(Type type) { TypeDesc? typeDesc = (TypeDesc?)_arrayTypeDescs[type]; @@ -747,6 +778,7 @@ internal TypeDesc GetArrayTypeDesc(Type type) return null; } + [RequiresUnreferencedCode("calls GetEnumeratorElementType")] private TypeDesc ImportTypeDesc(Type type, MemberInfo? memberInfo, bool directReference) { TypeDesc? typeDesc = null; @@ -1012,6 +1044,7 @@ internal static string TypeName(Type t) return t.Name; } + [RequiresUnreferencedCode("calls GetEnumeratorElementType")] internal static Type? GetArrayElementType(Type type, string? memberInfo) { if (type.IsArray) @@ -1160,7 +1193,13 @@ private static void PopulateMemberInfos(StructMapping structMapping, MemberMappi } } - private static bool ShouldBeReplaced(MemberInfo memberInfoToBeReplaced, Type derivedType, out MemberInfo replacedInfo) + private static bool ShouldBeReplaced( + MemberInfo memberInfoToBeReplaced, + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties + | DynamicallyAccessedMemberTypes.NonPublicProperties + | DynamicallyAccessedMemberTypes.PublicFields + | DynamicallyAccessedMemberTypes.NonPublicFields)] Type derivedType, + out MemberInfo replacedInfo) { replacedInfo = memberInfoToBeReplaced; Type currentType = derivedType; @@ -1214,7 +1253,10 @@ private static bool ShouldBeReplaced(MemberInfo memberInfoToBeReplaced, Type der return false; } - private static TypeFlags GetConstructorFlags(Type type, ref Exception? exception) + private static TypeFlags GetConstructorFlags( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors + | DynamicallyAccessedMemberTypes.NonPublicConstructors)] Type type, + ref Exception? exception) { ConstructorInfo? ctor = type.GetConstructor(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic, Type.EmptyTypes); if (ctor != null) @@ -1239,6 +1281,7 @@ private static TypeFlags GetConstructorFlags(Type type, ref Exception? exception return 0; } + [RequiresUnreferencedCode("creates XmlAttributes")] private static Type? GetEnumeratorElementType(Type type, ref TypeFlags flags) { if (typeof(IEnumerable).IsAssignableFrom(type)) @@ -1299,7 +1342,8 @@ private static TypeFlags GetConstructorFlags(Type type, ref Exception? exception } } - internal static PropertyInfo GetDefaultIndexer(Type type, string? memberInfo) + internal static PropertyInfo GetDefaultIndexer( + [DynamicallyAccessedMembers(TrimmerConstants.PublicMembers)] Type type, string? memberInfo) { if (typeof(IDictionary).IsAssignableFrom(type)) { @@ -1349,7 +1393,13 @@ internal static PropertyInfo GetDefaultIndexer(Type type, string? memberInfo) } return indexer; } - private static Type GetCollectionElementType(Type type, string? memberInfo) + private static Type GetCollectionElementType( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors + | DynamicallyAccessedMemberTypes.PublicMethods + | DynamicallyAccessedMemberTypes.PublicFields + | DynamicallyAccessedMemberTypes.PublicNestedTypes + | DynamicallyAccessedMemberTypes.PublicProperties + | DynamicallyAccessedMemberTypes.PublicEvents)] Type type, string? memberInfo) { return GetDefaultIndexer(type, memberInfo).PropertyType; } diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlAttributes.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlAttributes.cs index 06c999cc2b86ae..cc13bb842597e3 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlAttributes.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlAttributes.cs @@ -3,6 +3,7 @@ using System.Reflection; using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; namespace System.Xml.Serialization { @@ -74,6 +75,7 @@ internal XmlAttributeFlags XmlFlags private static Type IgnoreAttribute { + [RequiresUnreferencedCode("calls GetType")] get { if (s_ignoreAttributeType == null) @@ -91,6 +93,7 @@ private static Type IgnoreAttribute /// /// [To be supplied.] /// + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlAttributes(ICustomAttributeProvider provider) { object[] attrs = provider.GetCustomAttributes(false); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs index dc29d7c74230f4..c2f1ca0b393af0 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs @@ -15,6 +15,8 @@ namespace System.Xml.Serialization using System.Xml.Extensions; using System.Xml; using System.Xml.Serialization; + using System.Diagnostics.CodeAnalysis; + using System.Runtime.CompilerServices; /// /// @@ -86,11 +88,13 @@ public XmlReflectionImporter(XmlAttributeOverrides? attributeOverrides, string? /// /// [To be supplied.] /// + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void IncludeTypes(ICustomAttributeProvider provider) { IncludeTypes(provider, new RecursionLimiter()); } + [RequiresUnreferencedCode("calls IncludeType")] private void IncludeTypes(ICustomAttributeProvider provider, RecursionLimiter limiter) { object[] attrs = provider.GetCustomAttributes(typeof(XmlIncludeAttribute), false); @@ -104,11 +108,13 @@ private void IncludeTypes(ICustomAttributeProvider provider, RecursionLimiter li /// /// [To be supplied.] /// + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void IncludeType(Type type) { IncludeType(type, new RecursionLimiter()); } + [RequiresUnreferencedCode("calls ImportTypeMapping")] private void IncludeType(Type type, RecursionLimiter limiter) { int previousNestingLevel = _arrayNestingLevel; @@ -132,6 +138,7 @@ private void IncludeType(Type type, RecursionLimiter limiter) /// /// [To be supplied.] /// + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlTypeMapping ImportTypeMapping(Type type) { return ImportTypeMapping(type, null, null); @@ -140,6 +147,7 @@ public XmlTypeMapping ImportTypeMapping(Type type) /// /// [To be supplied.] /// + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlTypeMapping ImportTypeMapping(Type type, string? defaultNamespace) { return ImportTypeMapping(type, null, defaultNamespace); @@ -148,6 +156,7 @@ public XmlTypeMapping ImportTypeMapping(Type type, string? defaultNamespace) /// /// [To be supplied.] /// + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlTypeMapping ImportTypeMapping(Type type, XmlRootAttribute? root) { return ImportTypeMapping(type, root, null); @@ -156,6 +165,7 @@ public XmlTypeMapping ImportTypeMapping(Type type, XmlRootAttribute? root) /// /// [To be supplied.] /// + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlTypeMapping ImportTypeMapping(Type type, XmlRootAttribute? root, string? defaultNamespace) { if (type == null) @@ -169,6 +179,7 @@ public XmlTypeMapping ImportTypeMapping(Type type, XmlRootAttribute? root, strin /// /// [To be supplied.] /// + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement) { return ImportMembersMapping(elementName, ns, members, hasWrapperElement, false); @@ -177,6 +188,7 @@ public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, X /// /// [To be supplied.] /// + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement, bool rpc) { return ImportMembersMapping(elementName, ns, members, hasWrapperElement, rpc, false); @@ -186,6 +198,7 @@ public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, X /// [To be supplied.] /// /// + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement, bool rpc, bool openModel) { return ImportMembersMapping(elementName, ns, members, hasWrapperElement, rpc, openModel, XmlMappingAccess.Read | XmlMappingAccess.Write); @@ -195,6 +208,7 @@ public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, X /// [To be supplied.] /// /// + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement, bool rpc, bool openModel, XmlMappingAccess access) { ElementAccessor element = new ElementAccessor(); @@ -224,6 +238,7 @@ public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, X return xmlMapping; } + [RequiresUnreferencedCode("Creates XmlAttributes")] private XmlAttributes GetAttributes(Type type, bool canBeSimpleType) { XmlAttributes? attrs = _attributeOverrides[type]; @@ -235,6 +250,7 @@ private XmlAttributes GetAttributes(Type type, bool canBeSimpleType) return new XmlAttributes(type); } + [RequiresUnreferencedCode("Creates XmlAttributes")] private XmlAttributes GetAttributes(MemberInfo memberInfo) { XmlAttributes? attrs = _attributeOverrides[memberInfo.DeclaringType!, memberInfo.Name]; @@ -242,6 +258,7 @@ private XmlAttributes GetAttributes(MemberInfo memberInfo) return new XmlAttributes(memberInfo); } + [RequiresUnreferencedCode("calls GetAttributes")] private ElementAccessor ImportElement(TypeModel model, XmlRootAttribute? root, string? defaultNamespace, RecursionLimiter limiter) { XmlAttributes a = GetAttributes(model.Type, true); @@ -366,11 +383,13 @@ private Exception CreateMemberReflectionException(FieldModel model, Exception e) return new InvalidOperationException(SR.Format(model.IsProperty ? SR.XmlPropertyReflectionError : SR.XmlFieldReflectionError, model.Name), e); } + [RequiresUnreferencedCode("calls ImportTypeMapping")] private TypeMapping ImportTypeMapping(TypeModel model, string? ns, ImportContext context, string dataType, XmlAttributes? a, RecursionLimiter limiter) { return ImportTypeMapping(model, ns, context, dataType, a, false, false, limiter); } + [RequiresUnreferencedCode("calls GetAttributes")] private TypeMapping ImportTypeMapping(TypeModel model, string? ns, ImportContext context, string dataType, XmlAttributes? a, bool repeats, bool openModel, RecursionLimiter limiter) { try @@ -460,7 +479,8 @@ private TypeMapping ImportTypeMapping(TypeModel model, string? ns, ImportContext } } - internal static MethodInfo? GetMethodFromSchemaProvider(XmlSchemaProviderAttribute provider, Type type) + internal static MethodInfo? GetMethodFromSchemaProvider(XmlSchemaProviderAttribute provider, + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] Type type) { if (provider.IsAny) { @@ -484,6 +504,7 @@ private TypeMapping ImportTypeMapping(TypeModel model, string? ns, ImportContext return getMethod; } + [RequiresUnreferencedCode("calls IncludeTypes")] private SpecialMapping ImportSpecialMapping(Type type, TypeDesc typeDesc, string? ns, ImportContext context, RecursionLimiter limiter) { if (_specials == null) @@ -609,6 +630,7 @@ private static Exception UnsupportedException(TypeDesc typeDesc, ImportContext c return new InvalidOperationException(SR.Format(SR.XmlIllegalTypeContext, typeDesc.FullName, GetContextName(context))); } + [RequiresUnreferencedCode("calls GetTypeDesc")] private StructMapping CreateRootMapping() { TypeDesc typeDesc = _typeScope.GetTypeDesc(typeof(object)); @@ -621,7 +643,8 @@ private StructMapping CreateRootMapping() return mapping; } - private NullableMapping CreateNullableMapping(TypeMapping baseMapping, Type type) + private NullableMapping CreateNullableMapping(TypeMapping baseMapping, + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type) { TypeDesc typeDesc = baseMapping.TypeDesc!.GetNullableTypeDesc(type); TypeMapping? existingMapping; @@ -675,6 +698,7 @@ private NullableMapping CreateNullableMapping(TypeMapping baseMapping, Type type return mapping; } + [RequiresUnreferencedCode("calls CreateRootMapping")] private StructMapping GetRootMapping() { if (_root == null) @@ -699,6 +723,7 @@ private StructMapping GetRootMapping() return mapping; } + [RequiresUnreferencedCode("calls GetAttributes")] private StructMapping ImportStructLikeMapping(StructModel model, string? ns, bool openModel, XmlAttributes? a, RecursionLimiter limiter) { if (model.TypeDesc.Kind == TypeKind.Root) return GetRootMapping(); @@ -764,6 +789,7 @@ private StructMapping ImportStructLikeMapping(StructModel model, string? ns, boo return mapping; } + [RequiresUnreferencedCode("calls GetAttributes")] private bool InitializeStructMembers(StructMapping mapping, StructModel model, bool openModel, string? typeName, RecursionLimiter limiter) { if (mapping.IsFullyInitialized) @@ -926,6 +952,7 @@ private static bool IsAnonymousType(XmlAttributes a, string? contextNs) return false; } + [RequiresUnreferencedCode("Calls GetAttributes")] internal string XsdTypeName(Type type) { if (type == typeof(object)) return Soap.UrType; @@ -935,6 +962,7 @@ internal string XsdTypeName(Type type) return XsdTypeName(type, GetAttributes(type, false), typeDesc.Name); } + [RequiresUnreferencedCode("Calls XsdTypeName")] internal string XsdTypeName(Type type, XmlAttributes a, string name) { string typeName = name; @@ -971,6 +999,7 @@ private static int CountAtLevel(XmlArrayItemAttributes attributes, int level) return sum; } + [RequiresUnreferencedCode("calls GetAttributes")] private void SetArrayMappingType(ArrayMapping mapping, string? defaultNs, Type type) { XmlAttributes a = GetAttributes(type, false); @@ -1061,6 +1090,7 @@ private void SetArrayMappingType(ArrayMapping mapping, string? defaultNs, Type t mapping.Namespace = ns; } + [RequiresUnreferencedCode("calls SetArrayMappingType")] private ArrayMapping ImportArrayLikeMapping(ArrayModel model, string? ns, RecursionLimiter limiter) { ArrayMapping mapping = new ArrayMapping(); @@ -1156,6 +1186,7 @@ private PrimitiveMapping ImportPrimitiveMapping(PrimitiveModel model, ImportCont return mapping; } + [RequiresUnreferencedCode("calls GetAttributes")] private EnumMapping ImportEnumMapping(EnumModel model, string? ns, bool repeats) { XmlAttributes a = GetAttributes(model.Type, false); @@ -1198,6 +1229,7 @@ private EnumMapping ImportEnumMapping(EnumModel model, string? ns, bool repeats) return mapping; } + [RequiresUnreferencedCode("calls GetAttributes")] private ConstantMapping? ImportConstantMapping(ConstantModel model) { XmlAttributes a = GetAttributes(model.FieldInfo); @@ -1214,6 +1246,7 @@ private EnumMapping ImportEnumMapping(EnumModel model, string? ns, bool repeats) return constant; } + [RequiresUnreferencedCode("calls ImportMemberMapping")] private MembersMapping ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, string? ns, bool hasWrapperElement, bool rpc, bool openModel, RecursionLimiter limiter) { MembersMapping members = new MembersMapping(); @@ -1291,6 +1324,7 @@ private MembersMapping ImportMembersMapping(XmlReflectionMember[] xmlReflectionM return members; } + [RequiresUnreferencedCode("calls .ctor")] private MemberMapping ImportMemberMapping(XmlReflectionMember xmlReflectionMember, string? ns, XmlReflectionMember[] xmlReflectionMembers, bool rpc, bool openModel, RecursionLimiter limiter) { XmlSchemaForm form = rpc ? XmlSchemaForm.Unqualified : XmlSchemaForm.Qualified; @@ -1371,6 +1405,7 @@ private MemberMapping ImportMemberMapping(XmlReflectionMember xmlReflectionMembe return null; } + [RequiresUnreferencedCode("calls ImportAccessorMapping")] private MemberMapping ImportFieldMapping(StructModel parent, FieldModel model, XmlAttributes a, string? ns, RecursionLimiter limiter) { MemberMapping member = new MemberMapping(); @@ -1428,6 +1463,7 @@ private Type GetChoiceIdentifierType(XmlChoiceIdentifierAttribute choice, XmlRef throw new InvalidOperationException(SR.Format(SR.XmlChoiceIdentiferMemberMissing, choice.MemberName, accessorName)); } + [RequiresUnreferencedCode("calls GetFieldModel")] private Type GetChoiceIdentifierType(XmlChoiceIdentifierAttribute choice, StructModel structModel, bool isArrayLike, string accessorName) { // check that the choice field exists @@ -1463,6 +1499,7 @@ private Type GetChoiceIdentifierType(XmlChoiceIdentifierAttribute choice, Struct return enumType; } + [RequiresUnreferencedCode("calls ImportTypeMapping")] private void CreateArrayElementsFromAttributes(ArrayMapping arrayMapping, XmlArrayItemAttributes attributes, Type arrayElementType, string? arrayElementNs, RecursionLimiter limiter) { NameTable arrayItemElements = new NameTable(); // xmlelementname + xmlns -> ElementAccessor @@ -1487,6 +1524,7 @@ private void CreateArrayElementsFromAttributes(ArrayMapping arrayMapping, XmlArr arrayMapping.Elements = (ElementAccessor[])arrayItemElements.ToArray(typeof(ElementAccessor)); } + [RequiresUnreferencedCode("calls GetArrayElementType")] private void ImportAccessorMapping(MemberMapping accessor, FieldModel model, XmlAttributes a, string? ns, Type? choiceIdentifierType, bool rpc, bool openModel, RecursionLimiter limiter) { XmlSchemaForm elementFormDefault = XmlSchemaForm.Qualified; @@ -2219,6 +2257,7 @@ private static ElementAccessor CreateElementAccessor(TypeMapping mapping, string } // will create a shallow type mapping for a top-level type + [RequiresUnreferencedCode("calls .ctor")] internal static XmlTypeMapping GetTopLevelMapping(Type type, string? defaultNamespace) { defaultNamespace = defaultNamespace ?? string.Empty; diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemaImporter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemaImporter.cs index 4eb4259c7daea8..3f541cf9138c3e 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemaImporter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemaImporter.cs @@ -15,14 +15,18 @@ namespace System.Xml.Serialization #if DEBUG using System.Diagnostics; + using System.Diagnostics.CodeAnalysis; #endif public class XmlSchemaImporter : SchemaImporter { + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSchemaImporter(XmlSchemas schemas) : base(schemas, CodeGenerationOptions.GenerateProperties, new ImportContext()) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSchemaImporter(XmlSchemas schemas, CodeIdentifiers? typeIdentifiers) : base(schemas, CodeGenerationOptions.GenerateProperties, new ImportContext(typeIdentifiers, false)) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlTypeMapping ImportDerivedTypeMapping(XmlQualifiedName name, Type? baseType) { return ImportDerivedTypeMapping(name, baseType, false); @@ -42,6 +46,7 @@ internal TypeMapping GetDefaultMapping(TypeFlags flags) return mapping; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlTypeMapping ImportDerivedTypeMapping(XmlQualifiedName name, Type? baseType, bool baseTypeCanBeIndirect) { ElementAccessor element = ImportElement(name, typeof(TypeMapping), baseType); @@ -67,16 +72,19 @@ public XmlTypeMapping ImportDerivedTypeMapping(XmlQualifiedName name, Type? base return new XmlTypeMapping(Scope, element); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlTypeMapping ImportSchemaType(XmlQualifiedName typeName) { return ImportSchemaType(typeName, null, false); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlTypeMapping ImportSchemaType(XmlQualifiedName typeName, Type? baseType) { return ImportSchemaType(typeName, baseType, false); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlTypeMapping ImportSchemaType(XmlQualifiedName typeName, Type? baseType, bool baseTypeCanBeIndirect) { TypeMapping typeMapping = ImportType(typeName, typeof(TypeMapping), baseType, TypeFlags.CanBeElementValue, true)!; @@ -114,16 +122,19 @@ public XmlTypeMapping ImportSchemaType(XmlQualifiedName typeName, Type? baseType return new XmlTypeMapping(Scope, accessor); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlTypeMapping ImportTypeMapping(XmlQualifiedName name) { return ImportDerivedTypeMapping(name, null); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping ImportMembersMapping(XmlQualifiedName name) { return new XmlMembersMapping(Scope, ImportElement(name, typeof(MembersMapping), null), XmlMappingAccess.Read | XmlMappingAccess.Write); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping? ImportAnyType(XmlQualifiedName typeName, string elementName) { TypeMapping? typeMapping = ImportType(typeName, typeof(MembersMapping), null, TypeFlags.CanBeElementValue, true); @@ -163,11 +174,13 @@ public XmlMembersMapping ImportMembersMapping(XmlQualifiedName name) return members; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping ImportMembersMapping(XmlQualifiedName[] names) { return ImportMembersMapping(names, null, false); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping ImportMembersMapping(XmlQualifiedName[] names, Type? baseType, bool baseTypeCanBeIndirect) { CodeIdentifiers memberScope = new CodeIdentifiers(); @@ -196,6 +209,7 @@ public XmlMembersMapping ImportMembersMapping(XmlQualifiedName[] names, Type? ba return new XmlMembersMapping(Scope, element, XmlMappingAccess.Read | XmlMappingAccess.Write); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlMembersMapping ImportMembersMapping(string name, string? ns, SoapSchemaMember[] members) { XmlSchemaComplexType type = new XmlSchemaComplexType(); @@ -219,6 +233,7 @@ public XmlMembersMapping ImportMembersMapping(string name, string? ns, SoapSchem return new XmlMembersMapping(Scope, accessor, XmlMappingAccess.Read | XmlMappingAccess.Write); } + [RequiresUnreferencedCode("calls ImportElement")] private ElementAccessor ImportElement(XmlQualifiedName name, Type desiredMappingType, Type? baseType) { XmlSchemaElement element = FindElement(name); @@ -234,6 +249,7 @@ private ElementAccessor ImportElement(XmlQualifiedName name, Type desiredMapping return accessor; } + [RequiresUnreferencedCode("calls ImportElementType")] private ElementAccessor ImportElement(XmlSchemaElement element, string identifier, Type desiredMappingType, Type? baseType, string? ns, bool topLevelElement) { if (!element.RefName.IsEmpty) @@ -292,6 +308,7 @@ private ElementAccessor ImportElement(XmlSchemaElement element, string identifie return accessor; } + [RequiresUnreferencedCode("calls ImportMembersType")] private TypeMapping ImportElementType(XmlSchemaElement element, string identifier, Type desiredMappingType, Type? baseType, string? ns) { TypeMapping? mapping; @@ -366,6 +383,7 @@ private string GenerateUniqueTypeName(string desiredName, string? ns) return TypeIdentifiers.AddUnique(typeName, typeName); } + [RequiresUnreferencedCode("calls ImportType")] internal override void ImportDerivedTypes(XmlQualifiedName baseName) { foreach (XmlSchema schema in Schemas) @@ -387,6 +405,7 @@ internal override void ImportDerivedTypes(XmlQualifiedName baseName) } } + [RequiresUnreferencedCode("calls FindType")] private TypeMapping? ImportType(XmlQualifiedName name, Type desiredMappingType, Type? baseType, TypeFlags flags, bool addref) { if (name.Name == Soap.UrType && name.Namespace == XmlSchema.Namespace) @@ -414,6 +433,7 @@ internal override void ImportDerivedTypes(XmlQualifiedName baseName) return mapping; } + [RequiresUnreferencedCode("calls ImportMembersType")] private TypeMapping? ImportType(XmlSchemaComplexType type, string? typeNs, string identifier, Type desiredMappingType, Type? baseType, TypeFlags flags) { if (type.Redefined != null) @@ -447,6 +467,7 @@ internal override void ImportDerivedTypes(XmlQualifiedName baseName) throw new ArgumentException(SR.XmlInternalError, nameof(desiredMappingType)); } + [RequiresUnreferencedCode("calls GetTypeDesc")] private MembersMapping ImportMembersType(XmlSchemaType type, string? typeNs, string identifier) { if (!type.DerivedFrom.IsEmpty) throw new InvalidOperationException(SR.XmlMembersDeriveError); @@ -461,6 +482,7 @@ private MembersMapping ImportMembersType(XmlSchemaType type, string? typeNs, str return mappings; } + [RequiresUnreferencedCode("calls GetTypeDesc")] private StructMapping ImportStructType(XmlSchemaType type, string? typeNs, string identifier, Type? baseType, bool arrayLike) { TypeDesc? baseTypeDesc = null; @@ -570,6 +592,7 @@ private bool IsAllGroup(XmlSchemaType type) return (items.Particle != null) && (items.Particle is XmlSchemaAll); } + [RequiresUnreferencedCode("calls GetTypeDesc")] private StructMapping ImportStructDataType(XmlSchemaSimpleType dataType, string? typeNs, string identifier, Type baseType) { identifier = Accessor.UnescapeName(identifier); @@ -600,6 +623,7 @@ private sealed class TypeItems internal bool IsUnbounded; } + [RequiresUnreferencedCode("calls FindType")] private MemberMapping[] ImportTypeMembers(XmlSchemaType type, string? typeNs, string identifier, CodeIdentifiers members, CodeIdentifiers membersScope, INameScope elementsScope, ref bool needExplicitOrder, bool order, bool allowUnboundedElements) { TypeItems items = GetTypeItems(type); @@ -718,6 +742,7 @@ private TypeItems GetTypeItems(XmlSchemaType type) return items; } + [RequiresUnreferencedCode("calls ImportChoiceGroup")] private void ImportGroup(XmlSchemaGroupBase group, string identifier, CodeIdentifiers members, CodeIdentifiers membersScope, INameScope elementsScope, string? ns, bool mixed, ref bool needExplicitOrder, bool allowDuplicates, bool groupRepeats, bool allowUnboundedElements) { if (group is XmlSchemaChoice) @@ -731,6 +756,7 @@ private void ImportGroup(XmlSchemaGroupBase group, string identifier, CodeIdenti } } + [RequiresUnreferencedCode("calls GetTypeDesc")] private MemberMapping ImportChoiceGroup(XmlSchemaGroupBase group, string identifier, CodeIdentifiers? members, CodeIdentifiers? membersScope, INameScope? elementsScope, string? ns, bool groupRepeats, ref bool needExplicitOrder, bool allowDuplicates) { NameTable choiceElements = new NameTable(); @@ -872,11 +898,13 @@ private bool IsNeedXmlSerializationAttributes(ArrayMapping arrayMapping) return false; } + [RequiresUnreferencedCode("calls GatherGroupChoices")] private bool GatherGroupChoices(XmlSchemaGroup group, NameTable choiceElements, string identifier, string? ns, ref bool needExplicitOrder, bool allowDuplicates) { return GatherGroupChoices(group.Particle, choiceElements, identifier, ns, ref needExplicitOrder, allowDuplicates); } + [RequiresUnreferencedCode("Calls ImportAny")] private bool GatherGroupChoices(XmlSchemaParticle? particle, NameTable choiceElements, string identifier, string? ns, ref bool needExplicitOrder, bool allowDuplicates) { if (particle is XmlSchemaGroupRef) @@ -980,6 +1008,7 @@ private void AddScopeElements(INameScope? scope, ElementAccessor[] elements, ref } } + [RequiresUnreferencedCode("calls ImportChoiceGroup")] private void ImportGroupMembers(XmlSchemaParticle? particle, string identifier, CodeIdentifiers members, CodeIdentifiers membersScope, INameScope elementsScope, string? ns, bool groupRepeats, ref bool mixed, ref bool needExplicitOrder, bool allowDuplicates, bool allowUnboundedElements) { if (particle is XmlSchemaGroupRef) @@ -1057,6 +1086,7 @@ private XmlSchemaElement[] GetEquivalentElements(XmlSchemaElement element) return (XmlSchemaElement[])equivalentElements.ToArray(typeof(XmlSchemaElement)); } + [RequiresUnreferencedCode("calls ImportChoiceGroup")] private bool ImportSubstitutionGroupMember(XmlSchemaElement element, string identifier, CodeIdentifiers members, CodeIdentifiers membersScope, string? ns, bool repeats, ref bool needExplicitOrder, bool allowDuplicates) { XmlSchemaElement[] elements = GetEquivalentElements(element); @@ -1076,6 +1106,7 @@ private bool ImportSubstitutionGroupMember(XmlSchemaElement element, string iden return true; } + [RequiresUnreferencedCode("calls ImportType")] private void ImportTextMember(CodeIdentifiers members, CodeIdentifiers membersScope, XmlQualifiedName? simpleContentType) { TypeMapping? mapping; @@ -1128,6 +1159,7 @@ private void ImportTextMember(CodeIdentifiers members, CodeIdentifiers membersSc members.Add(member.Name, member); } + [RequiresUnreferencedCode("calls GetTypeDesc")] private MemberMapping ImportAnyMember(XmlSchemaAny any, string identifier, CodeIdentifiers members, CodeIdentifiers membersScope, INameScope elementsScope, string? ns, ref bool mixed, ref bool needExplicitOrder, bool allowDuplicates) { ElementAccessor[] accessors = ImportAny(any, !mixed, ns); @@ -1160,6 +1192,8 @@ private MemberMapping ImportAnyMember(XmlSchemaAny any, string identifier, CodeI } return member; } + + [RequiresUnreferencedCode("calls GetTypeDesc")] private ElementAccessor[] ImportAny(XmlSchemaAny any, bool makeElement, string? targetNamespace) { SpecialMapping mapping = new SpecialMapping(); @@ -1205,6 +1239,7 @@ private ElementAccessor[] ImportAny(XmlSchemaAny any, bool makeElement, string? return new ElementAccessor[] { anyAccessor }; } + [RequiresUnreferencedCode("calls ImportArrayMapping")] private ElementAccessor? ImportArray(XmlSchemaElement element, string identifier, string? ns, bool repeats) { if (repeats) return null; @@ -1223,6 +1258,7 @@ private ElementAccessor[] ImportAny(XmlSchemaAny any, bool makeElement, string? return arrayAccessor; } + [RequiresUnreferencedCode("calls ImportChoiceGroup")] private ArrayMapping? ImportArrayMapping(XmlSchemaType type, string identifier, string? ns, bool repeats) { if (!(type is XmlSchemaComplexType)) return null; @@ -1327,6 +1363,7 @@ private bool IsCyclicReferencedType(XmlSchemaElement element, List ident return false; } + [RequiresUnreferencedCode("calls GetTypeDesc")] private SpecialMapping? ImportAnyMapping(XmlSchemaType? type, string identifier, string? ns, bool repeats) { if (type == null) return null; @@ -1373,6 +1410,7 @@ private bool IsCyclicReferencedType(XmlSchemaElement element, List ident return mapping; } + [RequiresUnreferencedCode("calls ImportSubstitutionGroupMember")] private void ImportElementMember(XmlSchemaElement element, string identifier, CodeIdentifiers members, CodeIdentifiers membersScope, INameScope elementsScope, string? ns, bool repeats, ref bool needExplicitOrder, bool allowDuplicates, bool allowUnboundedElements) { repeats = repeats | element.IsMultipleOccurrence; @@ -1429,6 +1467,7 @@ private void ImportElementMember(XmlSchemaElement element, string identifier, Co } } + [RequiresUnreferencedCode("calls ImportAttribute")] private void ImportAttributeMember(XmlSchemaAttribute attribute, string identifier, CodeIdentifiers members, CodeIdentifiers membersScope, string? ns) { AttributeAccessor? accessor = ImportAttribute(attribute, identifier, ns, attribute); @@ -1453,6 +1492,7 @@ private void ImportAttributeMember(XmlSchemaAttribute attribute, string identifi } } + [RequiresUnreferencedCode("calls GetTypeDesc")] private void ImportAnyAttributeMember(XmlSchemaAnyAttribute any, CodeIdentifiers members, CodeIdentifiers membersScope) { SpecialMapping mapping = new SpecialMapping(); @@ -1509,6 +1549,7 @@ private bool KeepXmlnsDeclarations(XmlSchemaType type, out string? xmlnsMemberNa return false; } + [RequiresUnreferencedCode("calls GetTypeDesc")] private void ImportXmlnsDeclarationsMember(XmlSchemaType type, CodeIdentifiers members, CodeIdentifiers membersScope) { string? xmlnsMemberName; @@ -1536,6 +1577,7 @@ private void ImportXmlnsDeclarationsMember(XmlSchemaType type, CodeIdentifiers m member.Ignore = true; } + [RequiresUnreferencedCode("calls ImportAnyAttributeMember")] private void ImportAttributeGroupMembers(XmlSchemaAttributeGroup group, string identifier, CodeIdentifiers members, CodeIdentifiers membersScope, string ns) { for (int i = 0; i < group.Attributes.Count; i++) @@ -1550,6 +1592,7 @@ private void ImportAttributeGroupMembers(XmlSchemaAttributeGroup group, string i ImportAnyAttributeMember(group.AnyAttribute, members, membersScope); } + [RequiresUnreferencedCode("calls GetTypeDesc")] private AttributeAccessor ImportSpecialAttribute(XmlQualifiedName name, string identifier) { PrimitiveMapping mapping = new PrimitiveMapping(); @@ -1563,6 +1606,7 @@ private AttributeAccessor ImportSpecialAttribute(XmlQualifiedName name, string i return accessor; } + [RequiresUnreferencedCode("calls ImportSpecialAttribute")] private AttributeAccessor? ImportAttribute(XmlSchemaAttribute attribute, string identifier, string? ns, XmlSchemaAttribute defaultValueProvider) { if (attribute.Use == XmlSchemaUse.Prohibited) return null; @@ -1626,6 +1670,7 @@ private AttributeAccessor ImportSpecialAttribute(XmlQualifiedName name, string i return accessor; } + [RequiresUnreferencedCode("calls ImportStructDataType")] private TypeMapping? ImportDataType(XmlSchemaSimpleType dataType, string? typeNs, string identifier, Type? baseType, TypeFlags flags, bool isList) { if (baseType != null) @@ -1688,6 +1733,7 @@ private AttributeAccessor ImportSpecialAttribute(XmlQualifiedName name, string i return ImportPrimitiveDataType(dataType, flags); } + [RequiresUnreferencedCode("calls FindType")] private TypeMapping? ImportEnumeratedDataType(XmlSchemaSimpleType dataType, string? typeNs, string identifier, TypeFlags flags, bool isList) { TypeMapping? mapping = (TypeMapping?)ImportedMappings[dataType]; @@ -1789,6 +1835,7 @@ private EnumMapping ImportEnumeratedChoice(ElementAccessor[] choice, string? typ return enumMapping; } + [RequiresUnreferencedCode("calls GetDataTypeSource")] private PrimitiveMapping ImportPrimitiveDataType(XmlSchemaSimpleType dataType, TypeFlags flags) { TypeDesc sourceTypeDesc = GetDataTypeSource(dataType, flags); @@ -1855,6 +1902,7 @@ internal static XmlQualifiedName BaseTypeName(XmlSchemaSimpleType dataType) return new XmlQualifiedName("string", XmlSchema.Namespace); } + [RequiresUnreferencedCode("calls FindDataType")] private TypeDesc GetDataTypeSource(XmlSchemaSimpleType dataType, TypeFlags flags) { TypeDesc? typeDesc = null; @@ -1872,6 +1920,7 @@ private TypeDesc GetDataTypeSource(XmlSchemaSimpleType dataType, TypeFlags flags return typeDesc; } + [RequiresUnreferencedCode("calls GetTypeDesc")] private XmlSchemaSimpleType? FindDataType(XmlQualifiedName? name, TypeFlags flags) { if (name == null || name.IsEmpty) @@ -1906,6 +1955,7 @@ private TypeDesc GetDataTypeSource(XmlSchemaSimpleType dataType, TypeFlags flags } } + [RequiresUnreferencedCode("calls GetTypeDesc")] private XmlSchemaType? FindType(XmlQualifiedName? name, TypeFlags flags) { if (name == null || name.IsEmpty) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemas.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemas.cs index 78ea35dc32cbbb..714675a587a241 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemas.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemas.cs @@ -343,6 +343,7 @@ public static bool IsDataSet(XmlSchema schema) return false; } + [RequiresUnreferencedCode("calls Merge")] private void Merge(XmlSchema schema) { if (MergedSchemas[schema] != null) @@ -382,6 +383,7 @@ private void AddImport(IList schemas, string? ns) } } + [RequiresUnreferencedCode("Calls MergeFailedMessage")] private void Merge(IList originals, XmlSchema schema) { foreach (XmlSchema s in originals) @@ -593,6 +595,7 @@ internal static XmlQualifiedName GetParentName(XmlSchemaObject item) return item; } + [RequiresUnreferencedCode("Creates XmlSerializer")] private static string Dump(XmlSchemaObject o) { XmlWriterSettings settings = new XmlWriterSettings(); @@ -606,6 +609,8 @@ private static string Dump(XmlSchemaObject o) s.Serialize(xmlWriter, o, ns); return sw.ToString(); } + + [RequiresUnreferencedCode("calls Dump")] private static string MergeFailedMessage(XmlSchemaObject src, XmlSchemaObject dest, string? ns) { string err = SR.Format(SR.XmlSerializableMergeItem, ns, GetSchemaItem(src, ns, null)); @@ -640,6 +645,7 @@ public bool IsCompiled get { return _isCompiled; } } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Compile(ValidationEventHandler? handler, bool fullCompile) { if (_isCompiled) @@ -779,6 +785,7 @@ private static XmlSchema CreateFakeXsdSchema(string ns, string name) return schema; } + [RequiresUnreferencedCode("calls GenerateSchemaGraph")] internal void SetCache(SchemaObjectCache cache, bool shareTypes) { _shareTypes = shareTypes; diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationGeneratedCode.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationGeneratedCode.cs index 48744786703479..60b8eb8a408199 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationGeneratedCode.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationGeneratedCode.cs @@ -11,6 +11,7 @@ namespace System.Xml.Serialization using System.Reflection; using System.Security; using System.Globalization; + using System.Diagnostics.CodeAnalysis; /// public abstract class XmlSerializationGeneratedCode @@ -39,6 +40,7 @@ internal class XmlSerializationCodeGen private int _references; private readonly Hashtable _generatedMethods = new Hashtable(); + [RequiresUnreferencedCode("Calls GetTypeDesc")] internal XmlSerializationCodeGen(IndentedWriter writer, TypeScope[] scopes, string access, string className) { _writer = writer; @@ -64,8 +66,10 @@ internal XmlSerializationCodeGen(IndentedWriter writer, TypeScope[] scopes, stri internal Hashtable MethodNames { get { return _methodNames; } } internal Hashtable GeneratedMethods { get { return _generatedMethods; } } + [RequiresUnreferencedCode("calls WriteStructMethod")] internal virtual void GenerateMethod(TypeMapping mapping) { } + [RequiresUnreferencedCode("calls GenerateMethod")] internal void GenerateReferencedMethods() { while (_references > 0) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationILGen.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationILGen.cs index 6ff443ee3c6f95..dfee0a19dbdb33 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationILGen.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationILGen.cs @@ -35,6 +35,7 @@ internal class XmlSerializationILGen protected TypeBuilder typeBuilder = null!; protected CodeGenerator ilg = null!; + [RequiresUnreferencedCode("Calls GetTypeDesc")] internal XmlSerializationILGen(TypeScope[] scopes, string access, string className) { _scopes = scopes; @@ -108,8 +109,10 @@ internal MethodBuilderInfo GetMethodBuilder(string methodName) System.Diagnostics.Debug.Assert(_methodBuilders.ContainsKey(methodName)); return _methodBuilders[methodName]; } + [RequiresUnreferencedCode("calls WriteStructMethod")] internal virtual void GenerateMethod(TypeMapping mapping) { } + [RequiresUnreferencedCode("calls GenerateMethod")] internal void GenerateReferencedMethods() { while (_references > 0) @@ -147,6 +150,7 @@ private TypeMapping[] EnsureArrayIndex(TypeMapping[]? a, int index) return ReflectionAwareILGen.GetCSharpString(value); } + [RequiresUnreferencedCode("calls LoadMember")] internal FieldBuilder GenerateHashtableGetBegin(string privateName, string publicName, TypeBuilder serializerContractTypeBuilder) { FieldBuilder fieldBuilder = serializerContractTypeBuilder.DefineField( @@ -187,6 +191,7 @@ internal FieldBuilder GenerateHashtableGetBegin(string privateName, string publi return fieldBuilder; } + [RequiresUnreferencedCode("calls LoadMember")] internal void GenerateHashtableGetEnd(FieldBuilder fieldBuilder) { ilg!.Ldarg(0); @@ -208,6 +213,8 @@ internal void GenerateHashtableGetEnd(FieldBuilder fieldBuilder) ilg.EndMethod(); } + + [RequiresUnreferencedCode("calls GenerateHashtableGetBegin")] internal FieldBuilder GeneratePublicMethods(string privateName, string publicName, string[] methods, XmlMapping[] xmlMappings, TypeBuilder serializerContractTypeBuilder) { FieldBuilder fieldBuilder = GenerateHashtableGetBegin(privateName, publicName, serializerContractTypeBuilder); @@ -268,6 +275,7 @@ internal void GenerateSupportedTypes(Type[] types, TypeBuilder serializerContrac ilg.EndMethod(); } + [RequiresUnreferencedCode("Uses CreatedTypes Dictionary")] internal string GenerateBaseSerializer(string baseSerializer, string readerClass, string writerClass, CodeIdentifiers classes) { baseSerializer = CodeIdentifier.MakeValid(baseSerializer); @@ -313,6 +321,7 @@ internal string GenerateBaseSerializer(string baseSerializer, string readerClass return baseSerializer; } + [RequiresUnreferencedCode("uses CreatedTypes dictionary")] internal string GenerateTypedSerializer(string readMethod, string writeMethod, XmlMapping mapping, CodeIdentifiers classes, string baseSerializer, string readerClass, string writerClass) { string serializerName = CodeIdentifier.MakeValid(Accessor.UnescapeName(mapping.Accessor.Mapping!.TypeDesc!.Name)); @@ -409,6 +418,7 @@ internal string GenerateTypedSerializer(string readMethod, string writeMethod, X return typedSerializerType.Name; } + [RequiresUnreferencedCode("calls GetConstructor")] private FieldBuilder GenerateTypedSerializers(Dictionary serializers, TypeBuilder serializerContractTypeBuilder) { string privateName = "typedSerializers"; @@ -435,6 +445,7 @@ private FieldBuilder GenerateTypedSerializers(Dictionary seriali } //GenerateGetSerializer(serializers, xmlMappings); + [RequiresUnreferencedCode("Uses CreatedTypes Dictionary")] private void GenerateGetSerializer(Dictionary serializers, XmlMapping[] xmlMappings, TypeBuilder serializerContractTypeBuilder) { ilg = new CodeGenerator(serializerContractTypeBuilder); @@ -480,6 +491,7 @@ private void GenerateGetSerializer(Dictionary serializers, XmlMa ilg.EndMethod(); } + [RequiresUnreferencedCode("calls GenerateTypedSerializers")] internal void GenerateSerializerContract(string className, XmlMapping[] xmlMappings, Type[] types, string readerType, string[] readMethods, string writerType, string[] writerMethods, Dictionary serializers) { TypeBuilder serializerContractTypeBuilder = CodeGenerator.CreateTypeBuilder( @@ -572,10 +584,14 @@ internal static bool IsWildcard(SpecialMapping mapping) return ((SerializableMapping)mapping).IsAny; return mapping.TypeDesc!.CanBeElementValue; } + + [RequiresUnreferencedCode("calls ILGenLoad")] internal void ILGenLoad(string source) { ILGenLoad(source, null); } + + [RequiresUnreferencedCode("calls LoadMember")] internal void ILGenLoad(string source, Type? type) { if (source.StartsWith("o.@", StringComparison.Ordinal)) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReader.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReader.cs index 008643d9156317..8296a3e883172a 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReader.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReader.cs @@ -1557,6 +1557,7 @@ protected void FixupArrayRefs(object fixup) } } + [RequiresUnreferencedCode("calls GetArrayElementType")] private object? ReadArray(string? typeName, string? typeNs) { SoapArrayInfo arrayInfo; @@ -1756,8 +1757,10 @@ protected void FixupArrayRefs(object fixup) return array; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected abstract void InitCallbacks(); + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void ReadReferencedElements() { _r.MoveToContent(); @@ -1772,28 +1775,33 @@ protected void ReadReferencedElements() HandleUnreferencedObjects(); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencedElement() { return ReadReferencedElement(null, null); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencedElement(string? name, string? ns) { string? dummy; return ReadReferencingElement(name, ns, out dummy); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencingElement(out string? fixupReference) { return ReadReferencingElement(null, null, out fixupReference); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencingElement(string? name, string? ns, out string? fixupReference) { return ReadReferencingElement(name, ns, false, out fixupReference); } [MemberNotNull(nameof(_callbacks))] + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencingElement(string? name, string? ns, bool elementCanBeType, out string? fixupReference) { object? o = null; @@ -1832,6 +1840,7 @@ protected void ReadReferencedElements() } [MemberNotNull(nameof(_callbacks))] + [RequiresUnreferencedCode("calls InitCallbacks")] internal void EnsureCallbackTables() { if (_callbacks == null) @@ -2226,10 +2235,12 @@ internal string? ChoiceArraySource } } + [RequiresUnreferencedCode("creates XmlSerializationCodeGen")] internal XmlSerializationReaderCodeGen(IndentedWriter writer, TypeScope[] scopes, string access, string className) : base(writer, scopes, access, className) { } + [RequiresUnreferencedCode("calls WriteReflectionInit")] internal void GenerateBegin() { Writer.Write(Access); @@ -2267,6 +2278,7 @@ internal void GenerateBegin() } } + [RequiresUnreferencedCode("calls WriteStructMethod")] internal override void GenerateMethod(TypeMapping mapping) { if (GeneratedMethods.Contains(mapping)) @@ -2287,6 +2299,7 @@ internal override void GenerateMethod(TypeMapping mapping) } } + [RequiresUnreferencedCode("calls GenerateReferencedMethods")] internal void GenerateEnd(string?[] methods, XmlMapping[] xmlMappings, Type?[]? types) { GenerateReferencedMethods(); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReaderILGen.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReaderILGen.cs index e80a951c76d37e..ba0cff833e7d05 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReaderILGen.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReaderILGen.cs @@ -15,6 +15,7 @@ namespace System.Xml.Serialization using System.Xml; using System.Xml.Schema; using System.Xml.Extensions; + using System.Diagnostics.CodeAnalysis; internal sealed class XmlSerializationReaderILGen : XmlSerializationILGen { @@ -181,11 +182,13 @@ internal string? ChoiceArraySource } } + [RequiresUnreferencedCode("Creates XmlSerializationILGen")] internal XmlSerializationReaderILGen(TypeScope[] scopes, string access, string className) : base(scopes, access, className) { } + [RequiresUnreferencedCode("calls WriteReflectionInit")] internal void GenerateBegin() { this.typeBuilder = CodeGenerator.CreateTypeBuilder( @@ -205,6 +208,7 @@ internal void GenerateBegin() } } + [RequiresUnreferencedCode("calls WriteStructMethod")] internal override void GenerateMethod(TypeMapping mapping) { if (!GeneratedMethods.Add(mapping)) @@ -224,6 +228,7 @@ internal override void GenerateMethod(TypeMapping mapping) } } + [RequiresUnreferencedCode("calls GenerateReferencedMethods")] internal void GenerateEnd(string[] methods, XmlMapping[] xmlMappings, Type[] types) { GenerateReferencedMethods(); @@ -266,6 +271,7 @@ internal void GenerateEnd(string[] methods, XmlMapping[] xmlMappings, Type[] typ CreatedTypes.Add(readerType.Name, readerType); } + [RequiresUnreferencedCode("calls GenerateMembersElement")] internal string? GenerateElement(XmlMapping xmlMapping) { if (!xmlMapping.IsReadable) @@ -280,6 +286,7 @@ internal void GenerateEnd(string[] methods, XmlMapping[] xmlMappings, Type[] typ throw new ArgumentException(SR.XmlInternalError, nameof(xmlMapping)); } + [RequiresUnreferencedCode("calls LoadMember")] private void WriteIsStartTag(string? name, string? ns) { WriteID(name); @@ -304,6 +311,7 @@ private void WriteIsStartTag(string? name, string? ns) ilg.If(); } + [RequiresUnreferencedCode("XmlSerializationReader methods have RequiresUnreferencedCode")] private void WriteUnknownNode(string func, string node, ElementAccessor? e, bool anyIfs) { if (anyIfs) @@ -350,6 +358,7 @@ private void GenerateInitCallbacksMethod() ilg.EndMethod(); } + [RequiresUnreferencedCode("calls GenerateLiteralMembersElement")] private string GenerateMembersElement(XmlMembersMapping xmlMembersMapping) { return GenerateLiteralMembersElement(xmlMembersMapping); @@ -384,6 +393,7 @@ private string GetChoiceIdentifierSource(MemberMapping mapping, string parent, T return RaCodeGen.GetStringForMember(parent, mapping.ChoiceIdentifier.MemberName, parentTypeDesc); } + [RequiresUnreferencedCode("calls InitializeValueTypes")] private string GenerateLiteralMembersElement(XmlMembersMapping xmlMembersMapping) { ElementAccessor element = xmlMembersMapping.Accessor; @@ -613,6 +623,7 @@ private string GenerateLiteralMembersElement(XmlMembersMapping xmlMembersMapping return methodName; } + [RequiresUnreferencedCode("calls ILGenForCreateInstance")] private void InitializeValueTypes(string arrayName, MemberMapping[] mappings) { for (int i = 0; i < mappings.Length; i++) @@ -628,6 +639,7 @@ private void InitializeValueTypes(string arrayName, MemberMapping[] mappings) } } + [RequiresUnreferencedCode("calls WriteMemberElements")] private string GenerateTypeElement(XmlTypeMapping xmlTypeMapping) { ElementAccessor element = xmlTypeMapping.Accessor; @@ -683,6 +695,7 @@ private string NextIdName(string name) return "id" + (++_nextIdNumber).ToString(CultureInfo.InvariantCulture) + "_" + CodeIdentifier.MakeValidInternal(name); } + [RequiresUnreferencedCode("XmlSerializationReader methods have RequiresUnreferencedCode")] private void WritePrimitive(TypeMapping mapping, string source) { System.Diagnostics.Debug.Assert(source == "Reader.ReadElementString()" || source == "Reader.ReadString()" @@ -943,6 +956,7 @@ private void WritePrimitive(TypeMapping mapping, string source) return uniqueName; } + [RequiresUnreferencedCode("calls LoadMember")] private string WriteHashtable(EnumMapping mapping, string typeName, out MethodBuilder? get_TableName) { get_TableName = null; @@ -1020,6 +1034,7 @@ private string WriteHashtable(EnumMapping mapping, string typeName, out MethodBu return propName; } + [RequiresUnreferencedCode("calls WriteHashtable")] private void WriteEnumMethod(EnumMapping mapping) { MethodBuilder? get_TableName = null; @@ -1136,6 +1151,7 @@ private void WriteEnumMethod(EnumMapping mapping) ilg.EndMethod(); } + [RequiresUnreferencedCode("calls WriteQNameEqual")] private void WriteDerivedTypes(StructMapping mapping, bool isTypedReturn, string returnTypeName) { for (StructMapping? derived = mapping.DerivedMappings; derived != null; derived = derived.NextDerivedMapping) @@ -1175,6 +1191,7 @@ private void WriteDerivedTypes(StructMapping mapping, bool isTypedReturn, string } } + [RequiresUnreferencedCode("calls ILGenForCreateInstance")] private void WriteEnumAndArrayTypes() { foreach (TypeScope scope in Scopes) @@ -1281,6 +1298,7 @@ private void WriteEnumAndArrayTypes() } } + [RequiresUnreferencedCode("calls WriteElement")] private void WriteNullableMethod(NullableMapping nullableMapping) { string? methodName; @@ -1326,11 +1344,13 @@ private void WriteNullableMethod(NullableMapping nullableMapping) ilg.EndMethod(); } + [RequiresUnreferencedCode("calls WriteLiteralStructMethod")] private void WriteStructMethod(StructMapping structMapping) { WriteLiteralStructMethod(structMapping); } + [RequiresUnreferencedCode("calls WriteEnumAndArrayTypes")] private void WriteLiteralStructMethod(StructMapping structMapping) { string? methodName; @@ -1701,6 +1721,7 @@ private void WriteLiteralStructMethod(StructMapping structMapping) ilg.EndMethod(); } + [RequiresUnreferencedCode("calls LoadMember")] private void WriteQNameEqual(string source, string? name, string? ns) { WriteID(name); @@ -1736,10 +1757,12 @@ private void WriteQNameEqual(string source, string? name, string? ns) ilg.MarkLabel(labelEnd); } + [RequiresUnreferencedCode("XmlSerializationReader methods have RequiresUnreferencedCode")] private void WriteXmlNodeEqual(string source, string name, string? ns) { WriteXmlNodeEqual(source, name, ns, true); } + [RequiresUnreferencedCode("XmlSerializationReader methods have RequiresUnreferencedCode")] private void WriteXmlNodeEqual(string source, string name, string? ns, bool doAndIf) { bool isNameNullOrEmpty = string.IsNullOrEmpty(name); @@ -1814,6 +1837,7 @@ private void WriteID(string? name) } } + [RequiresUnreferencedCode("calls WriteSourceEnd")] private void WriteAttributes(Member[] members, Member? anyAttribute, string elseCall, LocalBuilder firstParam) { int count = 0; @@ -2044,6 +2068,7 @@ private void WriteAttributes(Member[] members, Member? anyAttribute, string else ilg.WhileEnd(); } + [RequiresUnreferencedCode("calls WriteSourceEnd")] private void WriteAttribute(Member member) { AttributeAccessor attribute = member.Mapping.Attribute!; @@ -2136,6 +2161,7 @@ private void WriteAttribute(Member member) } } + [RequiresUnreferencedCode("calls ILGenForCreateInstance")] private void WriteMemberBegin(Member[] members) { for (int i = 0; i < members.Length; i++) @@ -2242,6 +2268,7 @@ private string ExpectedElements(Member[] members) return ReflectionAwareILGen.GetQuotedCSharpString(qnames); } + [RequiresUnreferencedCode("calls WriteMemberElementsIf")] private void WriteMemberElements(Member[] members, string elementElseString, string elseString, Member? anyElement, Member? anyText) { if (anyText != null) @@ -2277,6 +2304,7 @@ private void WriteMemberElements(Member[] members, string elementElseString, str ilg.EndIf(); } + [RequiresUnreferencedCode("calls WriteText")] private void WriteMemberText(Member anyText, string elseString) { ilg.InitElseIf(); @@ -2328,6 +2356,7 @@ private void WriteMemberText(Member anyText, string elseString) Debug.Assert(anyText != null); } + [RequiresUnreferencedCode("calls WriteSourceEnd")] private void WriteText(Member member) { TextAccessor text = member.Mapping.Text!; @@ -2435,7 +2464,7 @@ private void WriteText(Member member) } } - + [RequiresUnreferencedCode("calls WriteElement")] private void WriteMemberElementsElse(Member? anyElement, string elementElseString) { if (anyElement != null) @@ -2466,6 +2495,8 @@ private bool IsSequence(Member[] members) } return false; } + + [RequiresUnreferencedCode("calls WriteElement")] private void WriteMemberElementsIf(Member[] members, Member? anyElement, string elementElseString) { int count = 0; @@ -2630,12 +2661,13 @@ private string GetArraySource(TypeDesc typeDesc, string arrayName, bool multiRef } } - + [RequiresUnreferencedCode("calls WriteMemberEnd")] private void WriteMemberEnd(Member[] members) { WriteMemberEnd(members, false); } + [RequiresUnreferencedCode("calls WriteSourceEnd")] private void WriteMemberEnd(Member[] members, bool soapRefs) { for (int i = 0; i < members.Length; i++) @@ -2780,10 +2812,12 @@ private void WriteSourceBegin(string source) throw Globals.NotSupported("Unexpected: " + source); } + [RequiresUnreferencedCode("calls WriteSourceEnd")] private void WriteSourceEnd(string source, Type elementType) { WriteSourceEnd(source, elementType, elementType); } + [RequiresUnreferencedCode("string-based IL generation")] private void WriteSourceEnd(string source, Type elementType, Type stackType) { object? variable; @@ -2864,6 +2898,7 @@ private void WriteSourceEnd(string source, Type elementType, Type stackType) throw Globals.NotSupported("Unexpected: " + source); } + [RequiresUnreferencedCode("calls WriteMemberBegin")] private void WriteArray(string source, string? arrayName, ArrayMapping arrayMapping, bool readOnly, bool isNullable, int fixupIndex, int elementIndex) { MethodInfo XmlSerializationReader_ReadNull = typeof(XmlSerializationReader).GetMethod( @@ -2976,6 +3011,7 @@ private void WriteArray(string source, string? arrayName, ArrayMapping arrayMapp ilg.EndIf(); } + [RequiresUnreferencedCode("calls ILGenForCreateInstance")] private void WriteElement(string source, string? arrayName, string? choiceSource, ElementAccessor element, ChoiceIdentifierAccessor? choice, string? checkSpecified, bool checkForNull, bool readOnly, int fixupIndex, int elementIndex) { if (checkSpecified != null && checkSpecified.Length > 0) @@ -3285,6 +3321,7 @@ private void WriteElement(string source, string? arrayName, string? choiceSource } } + [RequiresUnreferencedCode("calls ILGenForCreateInstance")] private void WriteDerivedSerializable(SerializableMapping head, SerializableMapping? mapping, string source, bool isWrappedAny) { if (mapping == null) @@ -3432,6 +3469,7 @@ private void WriteParamsRead(int length) ilg.Stloc(paramsRead); } + [RequiresUnreferencedCode("calls ILGenForCreateInstance")] private void WriteCreateMapping(TypeMapping mapping, string local) { string fullTypeName = mapping.TypeDesc!.CSharpName; @@ -3482,14 +3520,19 @@ private void WriteCatchException(Type exceptionType) ilg.Pop(); } + [RequiresUnreferencedCode("calls WriteArrayLocalDecl")] private void WriteArrayLocalDecl(string typeName, string variableName, string initValue, TypeDesc arrayTypeDesc) { RaCodeGen.WriteArrayLocalDecl(typeName, variableName, new SourceInfo(initValue, initValue, null, arrayTypeDesc.Type, ilg), arrayTypeDesc); } + + [RequiresUnreferencedCode("calls WriteCreateInstance")] private void WriteCreateInstance(string source, bool ctorInaccessible, Type type) { RaCodeGen.WriteCreateInstance(source, ctorInaccessible, type, ilg); } + + [RequiresUnreferencedCode("calls WriteLocalDecl")] private void WriteLocalDecl(string variableName, SourceInfo initValue) { RaCodeGen.WriteLocalDecl(variableName, initValue); @@ -3600,6 +3643,8 @@ private void ILGenElementElseString(string elementElseString) } throw Globals.NotSupported("Unexpected: " + elementElseString); } + + [RequiresUnreferencedCode("calls WriteSourceEnd")] private void ILGenSet(string source, object value) { WriteSourceBegin(source); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriter.cs index 0a975b1c5cb0b7..436a4fba444a7e 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriter.cs @@ -174,11 +174,13 @@ protected void WriteXsiType(string name, string? ns) WriteAttribute("type", XmlSchema.InstanceNamespace, GetQualifiedName(name, ns)); } + [RequiresUnreferencedCode("calls GetPrimitiveTypeName")] private XmlQualifiedName GetPrimitiveTypeName(Type type) { return GetPrimitiveTypeName(type, true)!; } + [RequiresUnreferencedCode("calls CreateUnknownTypeException")] private XmlQualifiedName? GetPrimitiveTypeName(Type type, bool throwIfUnknown) { XmlQualifiedName? qname = GetPrimitiveTypeNameInternal(type); @@ -236,6 +238,7 @@ private XmlQualifiedName GetPrimitiveTypeName(Type type) return new XmlQualifiedName(typeName, typeNs); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WriteTypedPrimitive(string? name, string? ns, object o, bool xsiType) { string? value = null; @@ -770,11 +773,13 @@ private void WriteElement(XmlNode node, string name, string? ns, bool isNullable _w.WriteEndElement(); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected Exception CreateUnknownTypeException(object o) { return CreateUnknownTypeException(o.GetType()); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected Exception CreateUnknownTypeException(Type type) { if (typeof(IXmlSerializable).IsAssignableFrom(type)) return new InvalidOperationException(SR.Format(SR.XmlInvalidSerializable, type.FullName)); @@ -1145,6 +1150,7 @@ protected void AddWriteCallback(Type type, string typeName, string? typeNs, XmlS _typeEntries![type] = entry; } + [RequiresUnreferencedCode("calls GetArrayElementType")] private void WriteArray(string name, string? ns, object o, Type type) { Type elementType = TypeScope.GetArrayElementType(type, null)!; @@ -1269,21 +1275,25 @@ private void WriteArray(string name, string? ns, object o, Type type) } _w.WriteEndElement(); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o) { WritePotentiallyReferencingElement(n, ns, o, null, false, false); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o, Type? ambientType) { WritePotentiallyReferencingElement(n, ns, o, ambientType, false, false); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WritePotentiallyReferencingElement(string n, string? ns, object? o, Type? ambientType, bool suppressReference) { WritePotentiallyReferencingElement(n, ns, o, ambientType, suppressReference, false); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o, Type? ambientType, bool suppressReference, bool isNullable) { if (o == null) @@ -1332,12 +1342,13 @@ protected void WritePotentiallyReferencingElement(string? n, string? ns, object? } } - + [RequiresUnreferencedCode("calls WriteReferencedElement")] private void WriteReferencedElement(object o, Type? ambientType) { WriteReferencedElement(null, null, o, ambientType); } + [RequiresUnreferencedCode("calls WriteArray")] private void WriteReferencedElement(string? name, string? ns, object o, Type? ambientType) { if (name == null) name = string.Empty; @@ -1358,6 +1369,7 @@ private void WriteReferencedElement(string? name, string? ns, object o, Type? am } } + [RequiresUnreferencedCode("calls InitCallbacks")] private TypeEntry? GetTypeEntry(Type t) { if (_typeEntries == null) @@ -1368,8 +1380,10 @@ private void WriteReferencedElement(string? name, string? ns, object o, Type? am return (TypeEntry?)_typeEntries[t]; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected abstract void InitCallbacks(); + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WriteReferencedElements() { if (_referencesToWrite == null) return; @@ -1559,6 +1573,7 @@ internal ReflectionAwareCodeGen(IndentedWriter writer) _writer = writer; } + [RequiresUnreferencedCode("calls GetTypeDesc")] internal void WriteReflectionInit(TypeScope scope) { foreach (Type type in scope.Types) @@ -1569,6 +1584,7 @@ internal void WriteReflectionInit(TypeScope scope) } } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] private string WriteTypeInfo(TypeScope scope, TypeDesc typeDesc, Type type) { InitTheFirstTime(); @@ -1643,7 +1659,8 @@ private void InitTheFirstTime() } } - private void WriteMappingInfo(TypeMapping mapping, string typeVariable, Type type) + private void WriteMappingInfo(TypeMapping mapping, string typeVariable, + [DynamicallyAccessedMembers(TrimmerConstants.PublicMembers)] Type type) { string typeFullName = mapping.TypeDesc!.CSharpName; if (mapping is StructMapping) @@ -1679,7 +1696,8 @@ private void WriteMappingInfo(TypeMapping mapping, string typeVariable, Type typ } } } - private void WriteCollectionInfo(string typeVariable, TypeDesc typeDesc, Type type) + private void WriteCollectionInfo(string typeVariable, TypeDesc typeDesc, + [DynamicallyAccessedMembers(TrimmerConstants.PublicMembers)] Type type) { string typeFullName = CodeIdentifier.GetCSharpName(type); string elementTypeFullName = typeDesc.ArrayElementTypeDesc!.CSharpName; @@ -1720,7 +1738,8 @@ private string WriteAssemblyInfo(Type type) return assemblyVariable; } - private string WriteMemberInfo(Type type, string escapedName, string typeVariable, string memberName) + private string WriteMemberInfo( + [DynamicallyAccessedMembers(TrimmerConstants.PublicMembers)] Type type, string escapedName, string typeVariable, string memberName) { MemberInfo[] memberInfos = type.GetMember(memberName); for (int i = 0; i < memberInfos.Length; i++) @@ -1781,7 +1800,8 @@ private string WriteMethodInfo(string escapedName, string typeVariable, string m return methodVariable; } - private string WriteDefaultIndexerInit(Type type, string escapedName, bool collectionUseReflection, bool elementUseReflection) + private string WriteDefaultIndexerInit( + [DynamicallyAccessedMembers(TrimmerConstants.PublicMembers)] Type type, string escapedName, bool collectionUseReflection, bool elementUseReflection) { string itemVariable = GenerateVariableName("item", escapedName); PropertyInfo defaultIndexer = TypeScope.GetDefaultIndexer(type, null); @@ -2189,10 +2209,12 @@ public XSArrayInfo({4} propInfo){{ internal sealed class XmlSerializationWriterCodeGen : XmlSerializationCodeGen { + [RequiresUnreferencedCode("creates XmlSerializationCodeGen")] internal XmlSerializationWriterCodeGen(IndentedWriter writer, TypeScope[] scopes, string access, string className) : base(writer, scopes, access, className) { } + [RequiresUnreferencedCode("calls WriteStructMethod")] internal void GenerateBegin() { Writer.Write(Access); @@ -2232,6 +2254,7 @@ internal void GenerateBegin() } } + [RequiresUnreferencedCode("calls WriteStructMethod")] internal override void GenerateMethod(TypeMapping mapping) { if (GeneratedMethods.Contains(mapping)) @@ -2247,6 +2270,8 @@ internal override void GenerateMethod(TypeMapping mapping) WriteEnumMethod((EnumMapping)mapping); } } + + [RequiresUnreferencedCode("calls GenerateReferencedMethods")] internal void GenerateEnd() { GenerateReferencedMethods(); @@ -2255,6 +2280,7 @@ internal void GenerateEnd() Writer.WriteLine("}"); } + [RequiresUnreferencedCode("calls GenerateMembersElement")] internal string? GenerateElement(XmlMapping xmlMapping) { if (!xmlMapping.IsWriteable) @@ -2303,6 +2329,7 @@ private void GenerateInitCallbacksMethod() Writer.WriteLine("}"); } + [RequiresUnreferencedCode("calls WriteCheckDefault")] private void WriteQualifiedNameElement(string name, string? ns, object? defaultValue, string source, bool nullable, bool IsSoap, TypeMapping mapping) { bool hasDefault = defaultValue != null && defaultValue != DBNull.Value; @@ -2385,6 +2412,7 @@ private void WritePrimitiveValue(TypeDesc typeDesc, string source, bool isElemen } } + [RequiresUnreferencedCode("calls WriteCheckDefault")] private void WritePrimitive(string method, string name, string? ns, object? defaultValue, string source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable) { TypeDesc typeDesc = mapping.TypeDesc!; @@ -2540,6 +2568,7 @@ private void WriteEmptyTag(string name, string? ns) WriteTag("WriteEmptyTag", name, ns); } + [RequiresUnreferencedCode("calls WriteMember")] private string GenerateMembersElement(XmlMembersMapping xmlMembersMapping) { ElementAccessor element = xmlMembersMapping.Accessor; @@ -2749,6 +2778,7 @@ private string GenerateMembersElement(XmlMembersMapping xmlMembersMapping) return methodName; } + [RequiresUnreferencedCode("calls WriteMember")] private string GenerateTypeElement(XmlTypeMapping xmlTypeMapping) { ElementAccessor element = xmlTypeMapping.Accessor; @@ -2943,6 +2973,7 @@ private void WriteDerivedTypes(StructMapping mapping) } } + [RequiresUnreferencedCode("calls WriteMember")] private void WriteEnumAndArrayTypes() { foreach (TypeScope scope in Scopes) @@ -3011,6 +3042,7 @@ private void WriteEnumAndArrayTypes() } } + [RequiresUnreferencedCode("calls WriteMember")] private void WriteStructMethod(StructMapping mapping) { if (mapping.IsSoap && mapping.TypeDesc!.IsRoot) return; @@ -3222,6 +3254,7 @@ private bool CanOptimizeWriteListSequence(TypeDesc? listElementTypeDesc) return (listElementTypeDesc != null && listElementTypeDesc != QnameTypeDesc); } + [RequiresUnreferencedCode("calls WriteAttribute")] private void WriteMember(string source, AttributeAccessor attribute, TypeDesc memberTypeDesc, string parent) { if (memberTypeDesc.IsAbstract) return; @@ -3393,6 +3426,7 @@ private void WriteMember(string source, AttributeAccessor attribute, TypeDesc me } } + [RequiresUnreferencedCode("calls WritePrimitive")] private void WriteAttribute(string source, AttributeAccessor attribute, string parent) { if (attribute.Mapping is SpecialMapping) @@ -3417,6 +3451,7 @@ private void WriteAttribute(string source, AttributeAccessor attribute, string p } } + [RequiresUnreferencedCode("calls WriteElements")] private void WriteMember(string source, string? choiceSource, ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, TypeDesc memberTypeDesc, bool writeAccessors) { if (memberTypeDesc.IsArrayLike && @@ -3426,7 +3461,7 @@ private void WriteMember(string source, string? choiceSource, ElementAccessor[] WriteElements(source, choiceSource, elements, text, choice, "a", writeAccessors, memberTypeDesc.IsNullable); } - + [RequiresUnreferencedCode("calls WriteArrayItems")] private void WriteArray(string source, string? choiceSource, ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, TypeDesc arrayTypeDesc) { if (elements.Length == 0 && text == null) return; @@ -3466,6 +3501,7 @@ private void WriteArray(string source, string? choiceSource, ElementAccessor[] e Writer.WriteLine("}"); } + [RequiresUnreferencedCode("calls WriteElements")] private void WriteArrayItems(ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, TypeDesc arrayTypeDesc, string arrayName, string? choiceName) { TypeDesc arrayElementTypeDesc = arrayTypeDesc.ArrayElementTypeDesc!; @@ -3567,11 +3603,13 @@ private void WriteArrayItems(ElementAccessor[] elements, TextAccessor? text, Cho Writer.WriteLine("}"); } + [RequiresUnreferencedCode("calls WriteElements")] private void WriteElements(string source, ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, string arrayName, bool writeAccessors, bool isNullable) { WriteElements(source, null, elements, text, choice, arrayName, writeAccessors, isNullable); } + [RequiresUnreferencedCode("calls WriteElement")] private void WriteElements(string source, string? enumSource, ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, string arrayName, bool writeAccessors, bool isNullable) { if (elements.Length == 0 && text == null) return; @@ -3837,6 +3875,7 @@ private void WriteText(string source, TextAccessor text) } } + [RequiresUnreferencedCode("calls WritePrimitive")] private void WriteElement(string source, ElementAccessor element, string arrayName, bool writeAccessor) { string name = writeAccessor ? element.Name : element.Mapping!.TypeName!; @@ -4125,6 +4164,7 @@ private void WriteElementCall(string func, Type cast, string source, string name Writer.WriteLine(");"); } + [RequiresUnreferencedCode("calls GetType")] private void WriteCheckDefault(TypeMapping mapping, string source, object value, bool isNullable) { Writer.Write("if ("); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriterILGen.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriterILGen.cs index b8e125165ac202..c7d39ddd5a1ff2 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriterILGen.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriterILGen.cs @@ -17,11 +17,13 @@ namespace System.Xml.Serialization { internal sealed class XmlSerializationWriterILGen : XmlSerializationILGen { + [RequiresUnreferencedCode("creates XmlSerializationILGen")] internal XmlSerializationWriterILGen(TypeScope[] scopes, string access, string className) : base(scopes, access, className) { } + [RequiresUnreferencedCode("calls WriteReflectionInit")] internal void GenerateBegin() { this.typeBuilder = CodeGenerator.CreateTypeBuilder( @@ -44,6 +46,7 @@ internal void GenerateBegin() } } + [RequiresUnreferencedCode("calls WriteStructMethod")] internal override void GenerateMethod(TypeMapping mapping) { if (!GeneratedMethods.Add(mapping)) @@ -58,6 +61,8 @@ internal override void GenerateMethod(TypeMapping mapping) WriteEnumMethod((EnumMapping)mapping); } } + + [RequiresUnreferencedCode("calls GenerateReferencedMethods")] internal Type GenerateEnd() { GenerateReferencedMethods(); @@ -67,6 +72,7 @@ internal Type GenerateEnd() return this.typeBuilder.CreateTypeInfo()!.AsType(); } + [RequiresUnreferencedCode("calls GenerateTypeElement")] internal string? GenerateElement(XmlMapping xmlMapping) { if (!xmlMapping.IsWriteable) @@ -89,6 +95,7 @@ private void GenerateInitCallbacksMethod() ilg.EndMethod(); } + [RequiresUnreferencedCode("calls Load")] private void WriteQualifiedNameElement(string name, string? ns, object? defaultValue, SourceInfo source, bool nullable, TypeMapping mapping) { bool hasDefault = defaultValue != null && defaultValue != DBNull.Value; @@ -121,6 +128,7 @@ private void WriteQualifiedNameElement(string name, string? ns, object? defaultV } } + [RequiresUnreferencedCode("calls Load")] private void WriteEnumValue(EnumMapping mapping, SourceInfo source, out Type returnType) { string? methodName = ReferenceMapping(mapping); @@ -143,6 +151,7 @@ private void WriteEnumValue(EnumMapping mapping, SourceInfo source, out Type ret returnType = typeof(string); } + [RequiresUnreferencedCode("calls Load")] private void WritePrimitiveValue(TypeDesc typeDesc, SourceInfo source, out Type returnType) { if (typeDesc == StringTypeDesc || typeDesc.FormatterName == "String") @@ -191,6 +200,7 @@ private void WritePrimitiveValue(TypeDesc typeDesc, SourceInfo source, out Type } } + [RequiresUnreferencedCode("Calls WriteCheckDefault")] private void WritePrimitive(string method, string name, string? ns, object? defaultValue, SourceInfo source, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable) { TypeDesc typeDesc = mapping.TypeDesc!; @@ -277,6 +287,7 @@ private void WritePrimitive(string method, string name, string? ns, object? defa } } + [RequiresUnreferencedCode("XmlSerializationWriter methods have RequiresUnreferencedCode")] private void WriteTag(string methodName, string name, string? ns) { MethodInfo XmlSerializationWriter_Method = typeof(XmlSerializationWriter).GetMethod( @@ -290,6 +301,7 @@ private void WriteTag(string methodName, string name, string? ns) ilg.Call(XmlSerializationWriter_Method); } + [RequiresUnreferencedCode("XmlSerializationWriter methods have RequiresUnreferencedCode")] private void WriteTag(string methodName, string name, string? ns, bool writePrefixed) { MethodInfo XmlSerializationWriter_Method = typeof(XmlSerializationWriter).GetMethod( @@ -305,6 +317,7 @@ private void WriteTag(string methodName, string name, string? ns, bool writePref ilg.Call(XmlSerializationWriter_Method); } + [RequiresUnreferencedCode("calls WriteTag")] private void WriteStartElement(string name, string? ns, bool writePrefixed) { WriteTag("WriteStartElement", name, ns, writePrefixed); @@ -334,16 +347,19 @@ private void WriteEndElement(string source) ilg.Call(XmlSerializationWriter_WriteEndElement); } + [RequiresUnreferencedCode("calls WriteTag")] private void WriteLiteralNullTag(string name, string? ns) { WriteTag("WriteNullTagLiteral", name, ns); } + [RequiresUnreferencedCode("calls WriteTag")] private void WriteEmptyTag(string name, string? ns) { WriteTag("WriteEmptyTag", name, ns); } + [RequiresUnreferencedCode("calls WriteMember")] private string GenerateMembersElement(XmlMembersMapping xmlMembersMapping) { ElementAccessor element = xmlMembersMapping.Accessor; @@ -537,6 +553,7 @@ private string GenerateMembersElement(XmlMembersMapping xmlMembersMapping) return methodName; } + [RequiresUnreferencedCode("calls WriteMember")] private string GenerateTypeElement(XmlTypeMapping xmlTypeMapping) { ElementAccessor element = xmlTypeMapping.Accessor; @@ -776,6 +793,7 @@ private void WriteDerivedTypes(StructMapping mapping) } } + [RequiresUnreferencedCode("calls WriteMember")] private void WriteEnumAndArrayTypes() { foreach (TypeScope scope in Scopes) @@ -904,6 +922,7 @@ private void WriteEnumAndArrayTypes() } } + [RequiresUnreferencedCode("Calls WriteMember")] private void WriteStructMethod(StructMapping mapping) { string? methodName; @@ -1147,6 +1166,7 @@ private bool CanOptimizeWriteListSequence(TypeDesc? listElementTypeDesc) return (listElementTypeDesc != null && listElementTypeDesc != QnameTypeDesc); } + [RequiresUnreferencedCode("calls WriteAttribute")] private void WriteMember(SourceInfo source, AttributeAccessor attribute, TypeDesc memberTypeDesc, string parent) { if (memberTypeDesc.IsAbstract) return; @@ -1348,6 +1368,7 @@ private void WriteMember(SourceInfo source, AttributeAccessor attribute, TypeDes } } + [RequiresUnreferencedCode("calls WritePrimitive")] private void WriteAttribute(SourceInfo source, AttributeAccessor attribute, string parent) { if (attribute.Mapping is SpecialMapping) @@ -1378,7 +1399,9 @@ private void WriteAttribute(SourceInfo source, AttributeAccessor attribute, stri } } - private static object? GetConvertedDefaultValue(Type? targetType, object? rawDefaultValue) + private static object? GetConvertedDefaultValue( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods + | DynamicallyAccessedMemberTypes.NonPublicMethods)] Type? targetType, object? rawDefaultValue) { if (targetType == null) { @@ -1394,6 +1417,7 @@ private void WriteAttribute(SourceInfo source, AttributeAccessor attribute, stri return convertedDefaultValue; } + [RequiresUnreferencedCode("Calls WriteElements")] private void WriteMember(SourceInfo source, string? choiceSource, ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, TypeDesc memberTypeDesc, bool writeAccessors) { if (memberTypeDesc.IsArrayLike && @@ -1404,7 +1428,7 @@ private void WriteMember(SourceInfo source, string? choiceSource, ElementAccesso WriteElements(source, choiceSource, elements, text, choice, "a" + memberTypeDesc.Name, writeAccessors, memberTypeDesc.IsNullable); } - + [RequiresUnreferencedCode("calls WriteArrayItems")] private void WriteArray(SourceInfo source, string? choiceSource, ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, TypeDesc arrayTypeDesc) { if (elements.Length == 0 && text == null) return; @@ -1463,6 +1487,7 @@ private void WriteArray(SourceInfo source, string? choiceSource, ElementAccessor } } + [RequiresUnreferencedCode("calls WriteElements")] private void WriteArrayItems(ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, TypeDesc arrayTypeDesc, string arrayName, string? choiceName) { TypeDesc arrayElementTypeDesc = arrayTypeDesc.ArrayElementTypeDesc!; @@ -1552,6 +1577,7 @@ private void WriteArrayItems(ElementAccessor[] elements, TextAccessor? text, Cho } } + [RequiresUnreferencedCode("Calls WriteElement")] private void WriteElements(SourceInfo source, string? enumSource, ElementAccessor[] elements, TextAccessor? text, ChoiceIdentifierAccessor? choice, string arrayName, bool writeAccessors, bool isNullable) { if (elements.Length == 0 && text == null) return; @@ -1834,6 +1860,7 @@ private void WriteElements(SourceInfo source, string? enumSource, ElementAccesso } } + [RequiresUnreferencedCode("calls Load")] private void WriteText(SourceInfo source, TextAccessor text) { if (text.Mapping is PrimitiveMapping) @@ -1883,6 +1910,7 @@ private void WriteText(SourceInfo source, TextAccessor text) } } + [RequiresUnreferencedCode("Calls WriteCheckDefault")] private void WriteElement(SourceInfo source, ElementAccessor element, string arrayName, bool writeAccessor) { string name = writeAccessor ? element.Name : element.Mapping!.TypeName!; @@ -2053,6 +2081,7 @@ private void WriteElement(SourceInfo source, ElementAccessor element, string arr } } + [RequiresUnreferencedCode("XmlSerializationWriter methods have RequiresUnreferencedCode")] private void WriteElementCall(string func, Type cast, SourceInfo source, string? name, string? ns, bool isNullable, bool isAny) { MethodInfo XmlSerializationWriter_func = typeof(XmlSerializationWriter).GetMethod( @@ -2069,6 +2098,7 @@ private void WriteElementCall(string func, Type cast, SourceInfo source, string? ilg.Call(XmlSerializationWriter_func); } + [RequiresUnreferencedCode("Dynamically looks for '!=' operator on 'value' parameter")] private void WriteCheckDefault(SourceInfo source, object value, bool isNullable) { if (value is string && ((string)value).Length == 0) @@ -2140,6 +2170,7 @@ private void WriteCheckDefault(SourceInfo source, object value, bool isNullable) } } + [RequiresUnreferencedCode("calls Load")] private void WriteChoiceTypeCheck(SourceInfo source, string fullTypeName, ChoiceIdentifierAccessor choice, string enumName, TypeDesc typeDesc) { Label labelFalse = ilg.DefineLabel(); @@ -2170,6 +2201,7 @@ private void WriteChoiceTypeCheck(SourceInfo source, string fullTypeName, Choice ilg.EndIf(); } + [RequiresUnreferencedCode("calls WriteLiteralNullTag")] private void WriteNullCheckBegin(string source, ElementAccessor element) { LocalBuilder local = ilg.GetLocal(source); @@ -2181,7 +2213,7 @@ private void WriteNullCheckBegin(string source, ElementAccessor element) ilg.Else(); } - + [RequiresUnreferencedCode("calls ILGenLoad")] private void WriteNamespaces(string source) { MethodInfo XmlSerializationWriter_WriteNamespaceDeclarations = typeof(XmlSerializationWriter).GetMethod( @@ -2205,12 +2237,13 @@ private int FindXmlnsIndex(MemberMapping[] members) return -1; } - + [RequiresUnreferencedCode("calls WriteLocalDecl")] private void WriteLocalDecl(string variableName, string initValue, Type type) { RaCodeGen.WriteLocalDecl(variableName, new SourceInfo(initValue, initValue, null, type, ilg)); } + [RequiresUnreferencedCode("calls WriteArrayLocalDecl")] private void WriteArrayLocalDecl(string typeName, string variableName, SourceInfo initValue, TypeDesc arrayTypeDesc) { RaCodeGen.WriteArrayLocalDecl(typeName, variableName, initValue, arrayTypeDesc); @@ -2219,6 +2252,8 @@ private void WriteTypeCompare(string variable, Type type) { RaCodeGen.WriteTypeCompare(variable, type, ilg); } + + [RequiresUnreferencedCode("calls WriteInstanceOf")] private void WriteInstanceOf(SourceInfo source, Type type) { RaCodeGen.WriteInstanceOf(source, type, ilg); @@ -2297,6 +2332,7 @@ internal sealed class ReflectionAwareILGen // ---------------------------------------------------------------------------------- internal ReflectionAwareILGen() { } + [RequiresUnreferencedCode("calls GetTypeDesc")] internal void WriteReflectionInit(TypeScope scope) { foreach (Type type in scope.Types) @@ -2345,6 +2381,8 @@ internal string GetStringForMethod(string obj, string typeFullName, string membe { return obj + "." + memberName + "("; } + + [RequiresUnreferencedCode("calls ILGenForCreateInstance")] internal void ILGenForCreateInstance(CodeGenerator ilg, Type type, bool ctorInaccessible, bool cast) { if (!ctorInaccessible) @@ -2368,6 +2406,7 @@ internal void ILGenForCreateInstance(CodeGenerator ilg, Type type, bool ctorInac ILGenForCreateInstance(ilg, type, cast ? type : null, ctorInaccessible); } + [RequiresUnreferencedCode("calls GetType")] internal void ILGenForCreateInstance(CodeGenerator ilg, Type type, Type? cast, bool nonPublic) { // Special case DBNull @@ -2476,6 +2515,7 @@ internal void ILGenForCreateInstance(CodeGenerator ilg, Type type, Type? cast, b ilg.ConvertValue(Activator_CreateInstance.ReturnType, cast); } + [RequiresUnreferencedCode("calls LoadMember")] internal void WriteLocalDecl(string variableName, SourceInfo initValue) { Type localType = initValue.Type!; @@ -2517,12 +2557,15 @@ internal void WriteLocalDecl(string variableName, SourceInfo initValue) } } + [RequiresUnreferencedCode("calls ILGenForCreateInstance")] internal void WriteCreateInstance(string source, bool ctorInaccessible, Type type, CodeGenerator ilg) { LocalBuilder sLoc = ilg.DeclareOrGetLocal(type, source); ILGenForCreateInstance(ilg, type, ctorInaccessible, ctorInaccessible); ilg.Stloc(sLoc); } + + [RequiresUnreferencedCode("calls Load")] internal void WriteInstanceOf(SourceInfo source, Type type, CodeGenerator ilg) { { @@ -2534,6 +2577,7 @@ internal void WriteInstanceOf(SourceInfo source, Type type, CodeGenerator ilg) } } + [RequiresUnreferencedCode("calls Load")] internal void WriteArrayLocalDecl(string typeName, string variableName, SourceInfo initValue, TypeDesc arrayTypeDesc) { Debug.Assert(typeName == arrayTypeDesc.CSharpName || typeName == arrayTypeDesc.CSharpName + "[]"); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs index 41d0d4f4af5382..d4e5db7bb7be69 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs @@ -150,29 +150,38 @@ private static XmlSerializerNamespaces DefaultNamespaces } } + // Linker warning messages + internal const string LinkerSerializationMessage = "Members from serialized types may be trimmed if not referenced directly"; + private const string s_deserializationMessage = "Members from deserialized types may be trimmed if not referenced directly"; + private static readonly Dictionary> s_xmlSerializerTable = new Dictionary>(); protected XmlSerializer() { } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public XmlSerializer(Type type, XmlAttributeOverrides? overrides, Type[]? extraTypes, XmlRootAttribute? root, string? defaultNamespace) : this(type, overrides, extraTypes, root, defaultNamespace, null) { } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public XmlSerializer(Type type, XmlRootAttribute? root) : this(type, null, Type.EmptyTypes, root, null, null) { } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public XmlSerializer(Type type, Type[]? extraTypes) : this(type, null, extraTypes, null, null, null) { } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public XmlSerializer(Type type, XmlAttributeOverrides? overrides) : this(type, overrides, Type.EmptyTypes, null, null, null) { } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public XmlSerializer(XmlTypeMapping xmlTypeMapping) { if (xmlTypeMapping == null) @@ -182,10 +191,12 @@ public XmlSerializer(XmlTypeMapping xmlTypeMapping) _mapping = xmlTypeMapping; } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public XmlSerializer(Type type) : this(type, (string?)null) { } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public XmlSerializer(Type type, string? defaultNamespace) { if (type == null) @@ -243,6 +254,7 @@ public XmlSerializer(Type type, string? defaultNamespace) } } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public XmlSerializer(Type type, XmlAttributeOverrides? overrides, Type[]? extraTypes, XmlRootAttribute? root, string? defaultNamespace, string? location) { if (type == null) @@ -254,6 +266,7 @@ public XmlSerializer(Type type, XmlAttributeOverrides? overrides, Type[]? extraT _tempAssembly = GenerateTempAssembly(_mapping, type, defaultNamespace, location); } + [RequiresUnreferencedCode("calls ImportTypeMapping")] private XmlTypeMapping GenerateXmlTypeMapping(Type type, XmlAttributeOverrides? overrides, Type[]? extraTypes, XmlRootAttribute? root, string? defaultNamespace) { XmlReflectionImporter importer = new XmlReflectionImporter(overrides, defaultNamespace); @@ -266,16 +279,19 @@ private XmlTypeMapping GenerateXmlTypeMapping(Type type, XmlAttributeOverrides? return importer.ImportTypeMapping(type, root, defaultNamespace); } + [RequiresUnreferencedCode("creates TempAssembly")] internal static TempAssembly? GenerateTempAssembly(XmlMapping xmlMapping) { return GenerateTempAssembly(xmlMapping, null, null); } + [RequiresUnreferencedCode("creates TempAssembly")] internal static TempAssembly? GenerateTempAssembly(XmlMapping xmlMapping, Type? type, string? defaultNamespace) { return GenerateTempAssembly(xmlMapping, type, defaultNamespace, null); } + [RequiresUnreferencedCode("creates TempAssembly")] internal static TempAssembly? GenerateTempAssembly(XmlMapping xmlMapping, Type? type, string? defaultNamespace, string? location) { if (xmlMapping == null) @@ -292,11 +308,13 @@ private XmlTypeMapping GenerateXmlTypeMapping(Type type, XmlAttributeOverrides? return new TempAssembly(new XmlMapping[] { xmlMapping }, new Type?[] { type }, defaultNamespace, location); } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Serialize(TextWriter textWriter, object? o) { Serialize(textWriter, o, null); } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Serialize(TextWriter textWriter, object? o, XmlSerializerNamespaces? namespaces) { XmlTextWriter xmlWriter = new XmlTextWriter(textWriter); @@ -305,11 +323,13 @@ public void Serialize(TextWriter textWriter, object? o, XmlSerializerNamespaces? Serialize(xmlWriter, o, namespaces); } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Serialize(Stream stream, object? o) { Serialize(stream, o, null); } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Serialize(Stream stream, object? o, XmlSerializerNamespaces? namespaces) { XmlTextWriter xmlWriter = new XmlTextWriter(stream, null); @@ -318,21 +338,25 @@ public void Serialize(Stream stream, object? o, XmlSerializerNamespaces? namespa Serialize(xmlWriter, o, namespaces); } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Serialize(XmlWriter xmlWriter, object? o) { Serialize(xmlWriter, o, null); } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Serialize(XmlWriter xmlWriter, object? o, XmlSerializerNamespaces? namespaces) { Serialize(xmlWriter, o, namespaces, null); } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Serialize(XmlWriter xmlWriter, object? o, XmlSerializerNamespaces? namespaces, string? encodingStyle) { Serialize(xmlWriter, o, namespaces, encodingStyle, null); } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Serialize(XmlWriter xmlWriter, object? o, XmlSerializerNamespaces? namespaces, string? encodingStyle, string? id) { try @@ -375,6 +399,7 @@ public void Serialize(XmlWriter xmlWriter, object? o, XmlSerializerNamespaces? n xmlWriter.Flush(); } + [RequiresUnreferencedCode("calls GetMapping")] private void SerializeUsingReflection(XmlWriter xmlWriter, object? o, XmlSerializerNamespaces? namespaces, string? encodingStyle, string? id) { XmlMapping mapping = GetMapping(); @@ -382,6 +407,7 @@ private void SerializeUsingReflection(XmlWriter xmlWriter, object? o, XmlSeriali writer.WriteObject(o); } + [RequiresUnreferencedCode("calls GenerateXmlTypeMapping")] private XmlMapping GetMapping() { if (_mapping == null || !_mapping.GenerateSerializer) @@ -392,6 +418,7 @@ private XmlMapping GetMapping() return _mapping; } + [RequiresUnreferencedCode(s_deserializationMessage)] public object? Deserialize(Stream stream) { XmlTextReader xmlReader = new XmlTextReader(stream); @@ -401,6 +428,7 @@ private XmlMapping GetMapping() return Deserialize(xmlReader, null); } + [RequiresUnreferencedCode(s_deserializationMessage)] public object? Deserialize(TextReader textReader) { XmlTextReader xmlReader = new XmlTextReader(textReader); @@ -410,21 +438,25 @@ private XmlMapping GetMapping() return Deserialize(xmlReader, null); } + [RequiresUnreferencedCode(s_deserializationMessage)] public object? Deserialize(XmlReader xmlReader) { return Deserialize(xmlReader, null); } + [RequiresUnreferencedCode(s_deserializationMessage)] public object? Deserialize(XmlReader xmlReader, XmlDeserializationEvents events) { return Deserialize(xmlReader, null, events); } + [RequiresUnreferencedCode(s_deserializationMessage)] public object? Deserialize(XmlReader xmlReader, string? encodingStyle) { return Deserialize(xmlReader, encodingStyle, _events); } + [RequiresUnreferencedCode(s_deserializationMessage)] public object? Deserialize(XmlReader xmlReader, string? encodingStyle, XmlDeserializationEvents events) { events.sender = this; @@ -477,6 +509,7 @@ private XmlMapping GetMapping() } } + [RequiresUnreferencedCode("calls GetMapping")] private object? DeserializeUsingReflection(XmlReader xmlReader, string? encodingStyle, XmlDeserializationEvents events) { XmlMapping mapping = GetMapping(); @@ -507,11 +540,13 @@ public virtual bool CanDeserialize(XmlReader xmlReader) } } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public static XmlSerializer[] FromMappings(XmlMapping[]? mappings) { return FromMappings(mappings, (Type?)null); } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public static XmlSerializer[] FromMappings(XmlMapping[]? mappings, Type? type) { if (mappings == null || mappings.Length == 0) return Array.Empty(); @@ -593,6 +628,7 @@ private static XmlSerializer[] GetReflectionBasedSerializers(XmlMapping[] mappin return serializers; } + [RequiresUnreferencedCode("calls GenerateSerializerToStream")] internal static bool GenerateSerializer(Type[]? types, XmlMapping[] mappings, Stream stream) { if (types == null || types.Length == 0) @@ -631,6 +667,7 @@ internal static bool GenerateSerializer(Type[]? types, XmlMapping[] mappings, St return TempAssembly.GenerateSerializerToStream(mappings, types, null, assembly, new Hashtable(), stream); } + [RequiresUnreferencedCode("calls Contract")] private static XmlSerializer[] GetSerializersFromCache(XmlMapping[] mappings, Type type) { XmlSerializer?[] serializers = new XmlSerializer?[mappings.Length]; @@ -683,6 +720,7 @@ private static XmlSerializer[] GetSerializersFromCache(XmlMapping[] mappings, Ty return serializers!; } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public static XmlSerializer[] FromTypes(Type[]? types) { if (types == null) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializerFactory.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializerFactory.cs index 746698cc209640..8b5aca9219fb93 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializerFactory.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializerFactory.cs @@ -14,44 +14,53 @@ namespace System.Xml.Serialization using System.Xml.Serialization.Configuration; using System.Diagnostics; using System.Xml.Serialization; + using System.Diagnostics.CodeAnalysis; public class XmlSerializerFactory { + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer CreateSerializer(Type type, XmlAttributeOverrides? overrides, Type[]? extraTypes, XmlRootAttribute? root, string? defaultNamespace) { return CreateSerializer(type, overrides, extraTypes, root, defaultNamespace, null); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer CreateSerializer(Type type, XmlRootAttribute? root) { return CreateSerializer(type, null, Type.EmptyTypes, root, null, null); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer CreateSerializer(Type type, Type[]? extraTypes) { return CreateSerializer(type, null, extraTypes, null, null, null); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer CreateSerializer(Type type, XmlAttributeOverrides? overrides) { return CreateSerializer(type, overrides, Type.EmptyTypes, null, null, null); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer CreateSerializer(XmlTypeMapping xmlTypeMapping) { return new XmlSerializer(xmlTypeMapping); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer CreateSerializer(Type type) { return CreateSerializer(type, (string?)null); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer CreateSerializer(Type type, string? defaultNamespace) { return new XmlSerializer(type, defaultNamespace); } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer CreateSerializer(Type type, XmlAttributeOverrides? overrides, Type[]? extraTypes, XmlRootAttribute? root, string? defaultNamespace, string? location) { return new XmlSerializer(type, overrides, extraTypes, root, defaultNamespace, location); diff --git a/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs b/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs index 479251eab45154..1a9674d33c6c7c 100644 --- a/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs +++ b/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs @@ -4,6 +4,8 @@ // Changes to this file must follow the https://aka.ms/api-review process. // ------------------------------------------------------------------------------ +using System.Diagnostics.CodeAnalysis; + namespace System.Xml { public enum ConformanceLevel @@ -1479,12 +1481,19 @@ public void Compile(System.Xml.Schema.ValidationEventHandler? validationEventHan public static System.Xml.Schema.XmlSchema? Read(System.IO.Stream stream, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } public static System.Xml.Schema.XmlSchema? Read(System.IO.TextReader reader, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } public static System.Xml.Schema.XmlSchema? Read(System.Xml.XmlReader reader, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Write(System.IO.Stream stream) { } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Write(System.IO.Stream stream, System.Xml.XmlNamespaceManager? namespaceManager) { } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Write(System.IO.TextWriter writer) { } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Write(System.IO.TextWriter writer, System.Xml.XmlNamespaceManager? namespaceManager) { } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Write(System.Xml.XmlWriter writer) { } + [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Write(System.Xml.XmlWriter writer, System.Xml.XmlNamespaceManager? namespaceManager) { } + internal const string LinkerSerializationMessage = "Members from serialized types may be trimmed if not referenced directly"; } public partial class XmlSchemaAll : System.Xml.Schema.XmlSchemaGroupBase { diff --git a/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs b/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs index 47b30000fefa66..4aaa061e0fe27b 100644 --- a/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs +++ b/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs @@ -4,6 +4,8 @@ // Changes to this file must follow the https://aka.ms/api-review process. // ------------------------------------------------------------------------------ +using System.Diagnostics.CodeAnalysis; + namespace System.Xml.Serialization { [System.FlagsAttribute] @@ -128,13 +130,21 @@ public SoapReflectionImporter() { } public SoapReflectionImporter(string? defaultNamespace) { } public SoapReflectionImporter(System.Xml.Serialization.SoapAttributeOverrides? attributeOverrides) { } public SoapReflectionImporter(System.Xml.Serialization.SoapAttributeOverrides? attributeOverrides, string? defaultNamespace) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors, bool validate) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors, bool validate, System.Xml.Serialization.XmlMappingAccess access) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type, string? defaultNamespace) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void IncludeType(System.Type type) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void IncludeTypes(System.Reflection.ICustomAttributeProvider provider) { } } public partial class SoapSchemaMember @@ -234,6 +244,7 @@ public void Add(System.Type type, System.Xml.Serialization.XmlAttributes attribu public partial class XmlAttributes { public XmlAttributes() { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlAttributes(System.Reflection.ICustomAttributeProvider provider) { } public System.Xml.Serialization.XmlAnyAttributeAttribute? XmlAnyAttribute { get { throw null; } set { } } public System.Xml.Serialization.XmlAnyElementAttributes XmlAnyElements { get { throw null; } } @@ -349,15 +360,25 @@ public XmlReflectionImporter() { } public XmlReflectionImporter(string? defaultNamespace) { } public XmlReflectionImporter(System.Xml.Serialization.XmlAttributeOverrides? attributeOverrides) { } public XmlReflectionImporter(System.Xml.Serialization.XmlAttributeOverrides? attributeOverrides, string? defaultNamespace) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool rpc) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool rpc, bool openModel) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool rpc, bool openModel, System.Xml.Serialization.XmlMappingAccess access) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type, string? defaultNamespace) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type, System.Xml.Serialization.XmlRootAttribute? root) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void IncludeType(System.Type type) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void IncludeTypes(System.Reflection.ICustomAttributeProvider provider) { } } public partial class XmlReflectionMember @@ -391,18 +412,31 @@ public void ExportTypeMapping(System.Xml.Serialization.XmlTypeMapping xmlTypeMap } public partial class XmlSchemaImporter : System.Xml.Serialization.SchemaImporter { + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSchemaImporter(System.Xml.Serialization.XmlSchemas schemas) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSchemaImporter(System.Xml.Serialization.XmlSchemas schemas, System.Xml.Serialization.CodeIdentifiers? typeIdentifiers) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping? ImportAnyType(System.Xml.XmlQualifiedName typeName, string elementName) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportDerivedTypeMapping(System.Xml.XmlQualifiedName name, System.Type? baseType) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportDerivedTypeMapping(System.Xml.XmlQualifiedName name, System.Type? baseType, bool baseTypeCanBeIndirect) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string name, string? ns, System.Xml.Serialization.SoapSchemaMember[] members) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(System.Xml.XmlQualifiedName name) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(System.Xml.XmlQualifiedName[] names) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(System.Xml.XmlQualifiedName[] names, System.Type? baseType, bool baseTypeCanBeIndirect) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportSchemaType(System.Xml.XmlQualifiedName typeName) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportSchemaType(System.Xml.XmlQualifiedName typeName, System.Type? baseType) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportSchemaType(System.Xml.XmlQualifiedName typeName, System.Type? baseType, bool baseTypeCanBeIndirect) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Xml.XmlQualifiedName name) { throw null; } } public partial class XmlSchemas : System.Collections.CollectionBase, System.Collections.Generic.IEnumerable, System.Collections.IEnumerable @@ -415,6 +449,7 @@ public XmlSchemas() { } public int Add(System.Xml.Schema.XmlSchema schema, System.Uri? baseUri) { throw null; } public void Add(System.Xml.Serialization.XmlSchemas schemas) { } public void AddReference(System.Xml.Schema.XmlSchema schema) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Compile(System.Xml.Schema.ValidationEventHandler? handler, bool fullCompile) { } public bool Contains(string? targetNamespace) { throw null; } public bool Contains(System.Xml.Schema.XmlSchema schema) { throw null; } @@ -470,6 +505,7 @@ protected void FixupArrayRefs(object fixup) { } protected bool GetNullAttr() { throw null; } protected object GetTarget(string id) { throw null; } protected System.Xml.XmlQualifiedName? GetXsiType() { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected abstract void InitCallbacks(); protected abstract void InitIDs(); protected bool IsXmlnsAttribute(string name) { throw null; } @@ -480,11 +516,17 @@ protected void ReadEndElement() { } protected System.Xml.XmlQualifiedName? ReadNullableQualifiedName() { throw null; } protected string? ReadNullableString() { throw null; } protected bool ReadReference([System.Diagnostics.CodeAnalysis.NotNullWhenAttribute(true)] out string? fixupReference) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencedElement() { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencedElement(string? name, string? ns) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void ReadReferencedElements() { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencingElement(string? name, string? ns, bool elementCanBeType, out string? fixupReference) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencingElement(string? name, string? ns, out string? fixupReference) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencingElement(out string? fixupReference) { throw null; } protected System.Xml.Serialization.IXmlSerializable ReadSerializable(System.Xml.Serialization.IXmlSerializable serializable) { throw null; } protected System.Xml.Serialization.IXmlSerializable ReadSerializable(System.Xml.Serialization.IXmlSerializable serializable, bool wrappedAny) { throw null; } @@ -557,7 +599,9 @@ protected void AddWriteCallback(System.Type type, string typeName, string? typeN protected System.Exception CreateInvalidEnumValueException(object value, string typeName) { throw null; } protected System.Exception CreateMismatchChoiceException(string value, string elementName, string enumValue) { throw null; } protected System.Exception CreateUnknownAnyElementException(string name, string ns) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected System.Exception CreateUnknownTypeException(object o) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected System.Exception CreateUnknownTypeException(System.Type type) { throw null; } protected static byte[] FromByteArrayBase64(byte[] value) { throw null; } [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute("value")] @@ -578,6 +622,7 @@ protected void AddWriteCallback(System.Type type, string typeName, string? typeN protected static string? FromXmlNmTokens(string? nmTokens) { throw null; } protected string? FromXmlQualifiedName(System.Xml.XmlQualifiedName? xmlQualifiedName) { throw null; } protected string? FromXmlQualifiedName(System.Xml.XmlQualifiedName? xmlQualifiedName, bool ignoreEmpty) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected abstract void InitCallbacks(); protected static System.Reflection.Assembly? ResolveDynamicAssembly(string assemblyFullName) { throw null; } protected void TopLevelElement() { } @@ -622,10 +667,15 @@ protected void WriteNullTagEncoded(string? name) { } protected void WriteNullTagEncoded(string? name, string? ns) { } protected void WriteNullTagLiteral(string? name) { } protected void WriteNullTagLiteral(string? name, string? ns) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o, System.Type? ambientType) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WritePotentiallyReferencingElement(string n, string? ns, object? o, System.Type? ambientType, bool suppressReference) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o, System.Type? ambientType, bool suppressReference, bool isNullable) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WriteReferencedElements() { } protected void WriteReferencingElement(string n, string? ns, object? o) { } protected void WriteReferencingElement(string n, string? ns, object? o, bool isNullable) { } @@ -639,6 +689,7 @@ protected void WriteStartElement(string name, string? ns, bool writePrefixed) { protected void WriteStartElement(string name, string? ns, object? o) { } protected void WriteStartElement(string name, string? ns, object? o, bool writePrefixed) { } protected void WriteStartElement(string name, string? ns, object? o, bool writePrefixed, System.Xml.Serialization.XmlSerializerNamespaces? xmlns) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WriteTypedPrimitive(string? name, string? ns, object o, bool xsiType) { } protected void WriteValue(byte[]? value) { } protected void WriteValue(string? value) { } @@ -649,13 +700,21 @@ protected void WriteXsiType(string name, string? ns) { } public partial class XmlSerializer { protected XmlSerializer() { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type, string? defaultNamespace) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type, System.Type[]? extraTypes) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides, System.Type[]? extraTypes, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides, System.Type[]? extraTypes, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace, string? location) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type, System.Xml.Serialization.XmlRootAttribute? root) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Xml.Serialization.XmlTypeMapping xmlTypeMapping) { } public event System.Xml.Serialization.XmlAttributeEventHandler UnknownAttribute { add { } remove { } } public event System.Xml.Serialization.XmlElementEventHandler UnknownElement { add { } remove { } } @@ -664,27 +723,46 @@ public event System.Xml.Serialization.UnreferencedObjectEventHandler Unreference public virtual bool CanDeserialize(System.Xml.XmlReader xmlReader) { throw null; } protected virtual System.Xml.Serialization.XmlSerializationReader CreateReader() { throw null; } protected virtual System.Xml.Serialization.XmlSerializationWriter CreateWriter() { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerDeserializationMessage)] public object? Deserialize(System.IO.Stream stream) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerDeserializationMessage)] public object? Deserialize(System.IO.TextReader textReader) { throw null; } protected virtual object Deserialize(System.Xml.Serialization.XmlSerializationReader reader) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerDeserializationMessage)] public object? Deserialize(System.Xml.XmlReader xmlReader) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerDeserializationMessage)] public object? Deserialize(System.Xml.XmlReader xmlReader, string? encodingStyle) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerDeserializationMessage)] public object? Deserialize(System.Xml.XmlReader xmlReader, string? encodingStyle, System.Xml.Serialization.XmlDeserializationEvents events) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerDeserializationMessage)] public object? Deserialize(System.Xml.XmlReader xmlReader, System.Xml.Serialization.XmlDeserializationEvents events) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public static System.Xml.Serialization.XmlSerializer[] FromMappings(System.Xml.Serialization.XmlMapping[]? mappings) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public static System.Xml.Serialization.XmlSerializer[] FromMappings(System.Xml.Serialization.XmlMapping[]? mappings, System.Type? type) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public static System.Xml.Serialization.XmlSerializer[] FromTypes(System.Type[]? types) { throw null; } public static string GetXmlSerializerAssemblyName(System.Type type) { throw null; } public static string GetXmlSerializerAssemblyName(System.Type type, string? defaultNamespace) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.IO.Stream stream, object? o) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.IO.Stream stream, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.IO.TextWriter textWriter, object? o) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.IO.TextWriter textWriter, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces) { } protected virtual void Serialize(object? o, System.Xml.Serialization.XmlSerializationWriter writer) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.Xml.XmlWriter xmlWriter, object? o) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.Xml.XmlWriter xmlWriter, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.Xml.XmlWriter xmlWriter, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces, string? encodingStyle) { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.Xml.XmlWriter xmlWriter, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces, string? encodingStyle, string? id) { } + internal const string LinkerSerializationMessage = "Members from serialized types may be trimmed if not referenced directly"; + internal const string LinkerDeserializationMessage = "Members from deserialized types may be trimmed if not referenced directly"; } [System.AttributeUsageAttribute(System.AttributeTargets.Class | System.AttributeTargets.Enum | System.AttributeTargets.Interface | System.AttributeTargets.Struct, AllowMultiple=false)] public sealed partial class XmlSerializerAssemblyAttribute : System.Attribute @@ -698,13 +776,21 @@ public XmlSerializerAssemblyAttribute(string? assemblyName, string? codeBase) { public partial class XmlSerializerFactory { public XmlSerializerFactory() { } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, string? defaultNamespace) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Type[]? extraTypes) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides, System.Type[]? extraTypes, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides, System.Type[]? extraTypes, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace, string? location) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Xml.Serialization.XmlRootAttribute? root) { throw null; } + [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Xml.Serialization.XmlTypeMapping xmlTypeMapping) { throw null; } } public abstract partial class XmlSerializerImplementation From 3343479138baeeb84600a2efefed4c654e24c653 Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Tue, 16 Mar 2021 20:19:32 -0700 Subject: [PATCH 02/12] Revert changes to ref files --- .../ref/System.Xml.ReaderWriter.cs | 9 -- .../ref/System.Xml.XmlSerializer.cs | 86 ------------------- 2 files changed, 95 deletions(-) diff --git a/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs b/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs index 1a9674d33c6c7c..479251eab45154 100644 --- a/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs +++ b/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs @@ -4,8 +4,6 @@ // Changes to this file must follow the https://aka.ms/api-review process. // ------------------------------------------------------------------------------ -using System.Diagnostics.CodeAnalysis; - namespace System.Xml { public enum ConformanceLevel @@ -1481,19 +1479,12 @@ public void Compile(System.Xml.Schema.ValidationEventHandler? validationEventHan public static System.Xml.Schema.XmlSchema? Read(System.IO.Stream stream, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } public static System.Xml.Schema.XmlSchema? Read(System.IO.TextReader reader, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } public static System.Xml.Schema.XmlSchema? Read(System.Xml.XmlReader reader, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } - [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Write(System.IO.Stream stream) { } - [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Write(System.IO.Stream stream, System.Xml.XmlNamespaceManager? namespaceManager) { } - [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Write(System.IO.TextWriter writer) { } - [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Write(System.IO.TextWriter writer, System.Xml.XmlNamespaceManager? namespaceManager) { } - [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Write(System.Xml.XmlWriter writer) { } - [RequiresUnreferencedCode(LinkerSerializationMessage)] public void Write(System.Xml.XmlWriter writer, System.Xml.XmlNamespaceManager? namespaceManager) { } - internal const string LinkerSerializationMessage = "Members from serialized types may be trimmed if not referenced directly"; } public partial class XmlSchemaAll : System.Xml.Schema.XmlSchemaGroupBase { diff --git a/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs b/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs index 4aaa061e0fe27b..47b30000fefa66 100644 --- a/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs +++ b/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs @@ -4,8 +4,6 @@ // Changes to this file must follow the https://aka.ms/api-review process. // ------------------------------------------------------------------------------ -using System.Diagnostics.CodeAnalysis; - namespace System.Xml.Serialization { [System.FlagsAttribute] @@ -130,21 +128,13 @@ public SoapReflectionImporter() { } public SoapReflectionImporter(string? defaultNamespace) { } public SoapReflectionImporter(System.Xml.Serialization.SoapAttributeOverrides? attributeOverrides) { } public SoapReflectionImporter(System.Xml.Serialization.SoapAttributeOverrides? attributeOverrides, string? defaultNamespace) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors, bool validate) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors, bool validate, System.Xml.Serialization.XmlMappingAccess access) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type, string? defaultNamespace) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void IncludeType(System.Type type) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void IncludeTypes(System.Reflection.ICustomAttributeProvider provider) { } } public partial class SoapSchemaMember @@ -244,7 +234,6 @@ public void Add(System.Type type, System.Xml.Serialization.XmlAttributes attribu public partial class XmlAttributes { public XmlAttributes() { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlAttributes(System.Reflection.ICustomAttributeProvider provider) { } public System.Xml.Serialization.XmlAnyAttributeAttribute? XmlAnyAttribute { get { throw null; } set { } } public System.Xml.Serialization.XmlAnyElementAttributes XmlAnyElements { get { throw null; } } @@ -360,25 +349,15 @@ public XmlReflectionImporter() { } public XmlReflectionImporter(string? defaultNamespace) { } public XmlReflectionImporter(System.Xml.Serialization.XmlAttributeOverrides? attributeOverrides) { } public XmlReflectionImporter(System.Xml.Serialization.XmlAttributeOverrides? attributeOverrides, string? defaultNamespace) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool rpc) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool rpc, bool openModel) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool rpc, bool openModel, System.Xml.Serialization.XmlMappingAccess access) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type, string? defaultNamespace) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type, System.Xml.Serialization.XmlRootAttribute? root) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void IncludeType(System.Type type) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void IncludeTypes(System.Reflection.ICustomAttributeProvider provider) { } } public partial class XmlReflectionMember @@ -412,31 +391,18 @@ public void ExportTypeMapping(System.Xml.Serialization.XmlTypeMapping xmlTypeMap } public partial class XmlSchemaImporter : System.Xml.Serialization.SchemaImporter { - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSchemaImporter(System.Xml.Serialization.XmlSchemas schemas) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSchemaImporter(System.Xml.Serialization.XmlSchemas schemas, System.Xml.Serialization.CodeIdentifiers? typeIdentifiers) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping? ImportAnyType(System.Xml.XmlQualifiedName typeName, string elementName) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportDerivedTypeMapping(System.Xml.XmlQualifiedName name, System.Type? baseType) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportDerivedTypeMapping(System.Xml.XmlQualifiedName name, System.Type? baseType, bool baseTypeCanBeIndirect) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string name, string? ns, System.Xml.Serialization.SoapSchemaMember[] members) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(System.Xml.XmlQualifiedName name) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(System.Xml.XmlQualifiedName[] names) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(System.Xml.XmlQualifiedName[] names, System.Type? baseType, bool baseTypeCanBeIndirect) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportSchemaType(System.Xml.XmlQualifiedName typeName) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportSchemaType(System.Xml.XmlQualifiedName typeName, System.Type? baseType) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportSchemaType(System.Xml.XmlQualifiedName typeName, System.Type? baseType, bool baseTypeCanBeIndirect) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Xml.XmlQualifiedName name) { throw null; } } public partial class XmlSchemas : System.Collections.CollectionBase, System.Collections.Generic.IEnumerable, System.Collections.IEnumerable @@ -449,7 +415,6 @@ public XmlSchemas() { } public int Add(System.Xml.Schema.XmlSchema schema, System.Uri? baseUri) { throw null; } public void Add(System.Xml.Serialization.XmlSchemas schemas) { } public void AddReference(System.Xml.Schema.XmlSchema schema) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Compile(System.Xml.Schema.ValidationEventHandler? handler, bool fullCompile) { } public bool Contains(string? targetNamespace) { throw null; } public bool Contains(System.Xml.Schema.XmlSchema schema) { throw null; } @@ -505,7 +470,6 @@ protected void FixupArrayRefs(object fixup) { } protected bool GetNullAttr() { throw null; } protected object GetTarget(string id) { throw null; } protected System.Xml.XmlQualifiedName? GetXsiType() { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected abstract void InitCallbacks(); protected abstract void InitIDs(); protected bool IsXmlnsAttribute(string name) { throw null; } @@ -516,17 +480,11 @@ protected void ReadEndElement() { } protected System.Xml.XmlQualifiedName? ReadNullableQualifiedName() { throw null; } protected string? ReadNullableString() { throw null; } protected bool ReadReference([System.Diagnostics.CodeAnalysis.NotNullWhenAttribute(true)] out string? fixupReference) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencedElement() { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencedElement(string? name, string? ns) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void ReadReferencedElements() { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencingElement(string? name, string? ns, bool elementCanBeType, out string? fixupReference) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencingElement(string? name, string? ns, out string? fixupReference) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected object? ReadReferencingElement(out string? fixupReference) { throw null; } protected System.Xml.Serialization.IXmlSerializable ReadSerializable(System.Xml.Serialization.IXmlSerializable serializable) { throw null; } protected System.Xml.Serialization.IXmlSerializable ReadSerializable(System.Xml.Serialization.IXmlSerializable serializable, bool wrappedAny) { throw null; } @@ -599,9 +557,7 @@ protected void AddWriteCallback(System.Type type, string typeName, string? typeN protected System.Exception CreateInvalidEnumValueException(object value, string typeName) { throw null; } protected System.Exception CreateMismatchChoiceException(string value, string elementName, string enumValue) { throw null; } protected System.Exception CreateUnknownAnyElementException(string name, string ns) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected System.Exception CreateUnknownTypeException(object o) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected System.Exception CreateUnknownTypeException(System.Type type) { throw null; } protected static byte[] FromByteArrayBase64(byte[] value) { throw null; } [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute("value")] @@ -622,7 +578,6 @@ protected void AddWriteCallback(System.Type type, string typeName, string? typeN protected static string? FromXmlNmTokens(string? nmTokens) { throw null; } protected string? FromXmlQualifiedName(System.Xml.XmlQualifiedName? xmlQualifiedName) { throw null; } protected string? FromXmlQualifiedName(System.Xml.XmlQualifiedName? xmlQualifiedName, bool ignoreEmpty) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected abstract void InitCallbacks(); protected static System.Reflection.Assembly? ResolveDynamicAssembly(string assemblyFullName) { throw null; } protected void TopLevelElement() { } @@ -667,15 +622,10 @@ protected void WriteNullTagEncoded(string? name) { } protected void WriteNullTagEncoded(string? name, string? ns) { } protected void WriteNullTagLiteral(string? name) { } protected void WriteNullTagLiteral(string? name, string? ns) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o, System.Type? ambientType) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WritePotentiallyReferencingElement(string n, string? ns, object? o, System.Type? ambientType, bool suppressReference) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o, System.Type? ambientType, bool suppressReference, bool isNullable) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WriteReferencedElements() { } protected void WriteReferencingElement(string n, string? ns, object? o) { } protected void WriteReferencingElement(string n, string? ns, object? o, bool isNullable) { } @@ -689,7 +639,6 @@ protected void WriteStartElement(string name, string? ns, bool writePrefixed) { protected void WriteStartElement(string name, string? ns, object? o) { } protected void WriteStartElement(string name, string? ns, object? o, bool writePrefixed) { } protected void WriteStartElement(string name, string? ns, object? o, bool writePrefixed, System.Xml.Serialization.XmlSerializerNamespaces? xmlns) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] protected void WriteTypedPrimitive(string? name, string? ns, object o, bool xsiType) { } protected void WriteValue(byte[]? value) { } protected void WriteValue(string? value) { } @@ -700,21 +649,13 @@ protected void WriteXsiType(string name, string? ns) { } public partial class XmlSerializer { protected XmlSerializer() { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type, string? defaultNamespace) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type, System.Type[]? extraTypes) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides, System.Type[]? extraTypes, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides, System.Type[]? extraTypes, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace, string? location) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Type type, System.Xml.Serialization.XmlRootAttribute? root) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlSerializer(System.Xml.Serialization.XmlTypeMapping xmlTypeMapping) { } public event System.Xml.Serialization.XmlAttributeEventHandler UnknownAttribute { add { } remove { } } public event System.Xml.Serialization.XmlElementEventHandler UnknownElement { add { } remove { } } @@ -723,46 +664,27 @@ public event System.Xml.Serialization.UnreferencedObjectEventHandler Unreference public virtual bool CanDeserialize(System.Xml.XmlReader xmlReader) { throw null; } protected virtual System.Xml.Serialization.XmlSerializationReader CreateReader() { throw null; } protected virtual System.Xml.Serialization.XmlSerializationWriter CreateWriter() { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerDeserializationMessage)] public object? Deserialize(System.IO.Stream stream) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerDeserializationMessage)] public object? Deserialize(System.IO.TextReader textReader) { throw null; } protected virtual object Deserialize(System.Xml.Serialization.XmlSerializationReader reader) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerDeserializationMessage)] public object? Deserialize(System.Xml.XmlReader xmlReader) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerDeserializationMessage)] public object? Deserialize(System.Xml.XmlReader xmlReader, string? encodingStyle) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerDeserializationMessage)] public object? Deserialize(System.Xml.XmlReader xmlReader, string? encodingStyle, System.Xml.Serialization.XmlDeserializationEvents events) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerDeserializationMessage)] public object? Deserialize(System.Xml.XmlReader xmlReader, System.Xml.Serialization.XmlDeserializationEvents events) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public static System.Xml.Serialization.XmlSerializer[] FromMappings(System.Xml.Serialization.XmlMapping[]? mappings) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public static System.Xml.Serialization.XmlSerializer[] FromMappings(System.Xml.Serialization.XmlMapping[]? mappings, System.Type? type) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public static System.Xml.Serialization.XmlSerializer[] FromTypes(System.Type[]? types) { throw null; } public static string GetXmlSerializerAssemblyName(System.Type type) { throw null; } public static string GetXmlSerializerAssemblyName(System.Type type, string? defaultNamespace) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.IO.Stream stream, object? o) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.IO.Stream stream, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.IO.TextWriter textWriter, object? o) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.IO.TextWriter textWriter, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces) { } protected virtual void Serialize(object? o, System.Xml.Serialization.XmlSerializationWriter writer) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.Xml.XmlWriter xmlWriter, object? o) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.Xml.XmlWriter xmlWriter, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.Xml.XmlWriter xmlWriter, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces, string? encodingStyle) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public void Serialize(System.Xml.XmlWriter xmlWriter, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces, string? encodingStyle, string? id) { } - internal const string LinkerSerializationMessage = "Members from serialized types may be trimmed if not referenced directly"; - internal const string LinkerDeserializationMessage = "Members from deserialized types may be trimmed if not referenced directly"; } [System.AttributeUsageAttribute(System.AttributeTargets.Class | System.AttributeTargets.Enum | System.AttributeTargets.Interface | System.AttributeTargets.Struct, AllowMultiple=false)] public sealed partial class XmlSerializerAssemblyAttribute : System.Attribute @@ -776,21 +698,13 @@ public XmlSerializerAssemblyAttribute(string? assemblyName, string? codeBase) { public partial class XmlSerializerFactory { public XmlSerializerFactory() { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, string? defaultNamespace) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Type[]? extraTypes) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides, System.Type[]? extraTypes, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides, System.Type[]? extraTypes, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace, string? location) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Xml.Serialization.XmlRootAttribute? root) { throw null; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Xml.Serialization.XmlTypeMapping xmlTypeMapping) { throw null; } } public abstract partial class XmlSerializerImplementation From d6546940b258091fb3b4d52f70f63e96853cc9f1 Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Tue, 16 Mar 2021 21:41:43 -0700 Subject: [PATCH 03/12] Add autogenerated ref assembly changes --- .../ref/System.Xml.XmlSerializer.cs | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs b/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs index 47b30000fefa66..75ae02042b73f7 100644 --- a/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs +++ b/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs @@ -128,13 +128,21 @@ public SoapReflectionImporter() { } public SoapReflectionImporter(string? defaultNamespace) { } public SoapReflectionImporter(System.Xml.Serialization.SoapAttributeOverrides? attributeOverrides) { } public SoapReflectionImporter(System.Xml.Serialization.SoapAttributeOverrides? attributeOverrides, string? defaultNamespace) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors, bool validate) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors, bool validate, System.Xml.Serialization.XmlMappingAccess access) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type, string? defaultNamespace) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void IncludeType(System.Type type) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void IncludeTypes(System.Reflection.ICustomAttributeProvider provider) { } } public partial class SoapSchemaMember @@ -234,6 +242,7 @@ public void Add(System.Type type, System.Xml.Serialization.XmlAttributes attribu public partial class XmlAttributes { public XmlAttributes() { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public XmlAttributes(System.Reflection.ICustomAttributeProvider provider) { } public System.Xml.Serialization.XmlAnyAttributeAttribute? XmlAnyAttribute { get { throw null; } set { } } public System.Xml.Serialization.XmlAnyElementAttributes XmlAnyElements { get { throw null; } } @@ -349,15 +358,25 @@ public XmlReflectionImporter() { } public XmlReflectionImporter(string? defaultNamespace) { } public XmlReflectionImporter(System.Xml.Serialization.XmlAttributeOverrides? attributeOverrides) { } public XmlReflectionImporter(System.Xml.Serialization.XmlAttributeOverrides? attributeOverrides, string? defaultNamespace) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool rpc) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool rpc, bool openModel) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, System.Xml.Serialization.XmlReflectionMember[] members, bool hasWrapperElement, bool rpc, bool openModel, System.Xml.Serialization.XmlMappingAccess access) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type, string? defaultNamespace) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type, System.Xml.Serialization.XmlRootAttribute? root) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Type type, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void IncludeType(System.Type type) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void IncludeTypes(System.Reflection.ICustomAttributeProvider provider) { } } public partial class XmlReflectionMember @@ -391,18 +410,31 @@ public void ExportTypeMapping(System.Xml.Serialization.XmlTypeMapping xmlTypeMap } public partial class XmlSchemaImporter : System.Xml.Serialization.SchemaImporter { + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public XmlSchemaImporter(System.Xml.Serialization.XmlSchemas schemas) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public XmlSchemaImporter(System.Xml.Serialization.XmlSchemas schemas, System.Xml.Serialization.CodeIdentifiers? typeIdentifiers) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping? ImportAnyType(System.Xml.XmlQualifiedName typeName, string elementName) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlTypeMapping ImportDerivedTypeMapping(System.Xml.XmlQualifiedName name, System.Type? baseType) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlTypeMapping ImportDerivedTypeMapping(System.Xml.XmlQualifiedName name, System.Type? baseType, bool baseTypeCanBeIndirect) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(string name, string? ns, System.Xml.Serialization.SoapSchemaMember[] members) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(System.Xml.XmlQualifiedName name) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(System.Xml.XmlQualifiedName[] names) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlMembersMapping ImportMembersMapping(System.Xml.XmlQualifiedName[] names, System.Type? baseType, bool baseTypeCanBeIndirect) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlTypeMapping ImportSchemaType(System.Xml.XmlQualifiedName typeName) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlTypeMapping ImportSchemaType(System.Xml.XmlQualifiedName typeName, System.Type? baseType) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlTypeMapping ImportSchemaType(System.Xml.XmlQualifiedName typeName, System.Type? baseType, bool baseTypeCanBeIndirect) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlTypeMapping ImportTypeMapping(System.Xml.XmlQualifiedName name) { throw null; } } public partial class XmlSchemas : System.Collections.CollectionBase, System.Collections.Generic.IEnumerable, System.Collections.IEnumerable @@ -415,6 +447,7 @@ public XmlSchemas() { } public int Add(System.Xml.Schema.XmlSchema schema, System.Uri? baseUri) { throw null; } public void Add(System.Xml.Serialization.XmlSchemas schemas) { } public void AddReference(System.Xml.Schema.XmlSchema schema) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Compile(System.Xml.Schema.ValidationEventHandler? handler, bool fullCompile) { } public bool Contains(string? targetNamespace) { throw null; } public bool Contains(System.Xml.Schema.XmlSchema schema) { throw null; } @@ -470,6 +503,7 @@ protected void FixupArrayRefs(object fixup) { } protected bool GetNullAttr() { throw null; } protected object GetTarget(string id) { throw null; } protected System.Xml.XmlQualifiedName? GetXsiType() { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected abstract void InitCallbacks(); protected abstract void InitIDs(); protected bool IsXmlnsAttribute(string name) { throw null; } @@ -480,11 +514,17 @@ protected void ReadEndElement() { } protected System.Xml.XmlQualifiedName? ReadNullableQualifiedName() { throw null; } protected string? ReadNullableString() { throw null; } protected bool ReadReference([System.Diagnostics.CodeAnalysis.NotNullWhenAttribute(true)] out string? fixupReference) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected object? ReadReferencedElement() { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected object? ReadReferencedElement(string? name, string? ns) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected void ReadReferencedElements() { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected object? ReadReferencingElement(string? name, string? ns, bool elementCanBeType, out string? fixupReference) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected object? ReadReferencingElement(string? name, string? ns, out string? fixupReference) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected object? ReadReferencingElement(out string? fixupReference) { throw null; } protected System.Xml.Serialization.IXmlSerializable ReadSerializable(System.Xml.Serialization.IXmlSerializable serializable) { throw null; } protected System.Xml.Serialization.IXmlSerializable ReadSerializable(System.Xml.Serialization.IXmlSerializable serializable, bool wrappedAny) { throw null; } @@ -557,7 +597,9 @@ protected void AddWriteCallback(System.Type type, string typeName, string? typeN protected System.Exception CreateInvalidEnumValueException(object value, string typeName) { throw null; } protected System.Exception CreateMismatchChoiceException(string value, string elementName, string enumValue) { throw null; } protected System.Exception CreateUnknownAnyElementException(string name, string ns) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected System.Exception CreateUnknownTypeException(object o) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected System.Exception CreateUnknownTypeException(System.Type type) { throw null; } protected static byte[] FromByteArrayBase64(byte[] value) { throw null; } [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute("value")] @@ -578,6 +620,7 @@ protected void AddWriteCallback(System.Type type, string typeName, string? typeN protected static string? FromXmlNmTokens(string? nmTokens) { throw null; } protected string? FromXmlQualifiedName(System.Xml.XmlQualifiedName? xmlQualifiedName) { throw null; } protected string? FromXmlQualifiedName(System.Xml.XmlQualifiedName? xmlQualifiedName, bool ignoreEmpty) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected abstract void InitCallbacks(); protected static System.Reflection.Assembly? ResolveDynamicAssembly(string assemblyFullName) { throw null; } protected void TopLevelElement() { } @@ -622,10 +665,15 @@ protected void WriteNullTagEncoded(string? name) { } protected void WriteNullTagEncoded(string? name, string? ns) { } protected void WriteNullTagLiteral(string? name) { } protected void WriteNullTagLiteral(string? name, string? ns) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o, System.Type? ambientType) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected void WritePotentiallyReferencingElement(string n, string? ns, object? o, System.Type? ambientType, bool suppressReference) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o, System.Type? ambientType, bool suppressReference, bool isNullable) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected void WriteReferencedElements() { } protected void WriteReferencingElement(string n, string? ns, object? o) { } protected void WriteReferencingElement(string n, string? ns, object? o, bool isNullable) { } @@ -639,6 +687,7 @@ protected void WriteStartElement(string name, string? ns, bool writePrefixed) { protected void WriteStartElement(string name, string? ns, object? o) { } protected void WriteStartElement(string name, string? ns, object? o, bool writePrefixed) { } protected void WriteStartElement(string name, string? ns, object? o, bool writePrefixed, System.Xml.Serialization.XmlSerializerNamespaces? xmlns) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] protected void WriteTypedPrimitive(string? name, string? ns, object o, bool xsiType) { } protected void WriteValue(byte[]? value) { } protected void WriteValue(string? value) { } @@ -649,13 +698,21 @@ protected void WriteXsiType(string name, string? ns) { } public partial class XmlSerializer { protected XmlSerializer() { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public XmlSerializer(System.Type type) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public XmlSerializer(System.Type type, string? defaultNamespace) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public XmlSerializer(System.Type type, System.Type[]? extraTypes) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public XmlSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public XmlSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides, System.Type[]? extraTypes, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public XmlSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides, System.Type[]? extraTypes, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace, string? location) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public XmlSerializer(System.Type type, System.Xml.Serialization.XmlRootAttribute? root) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public XmlSerializer(System.Xml.Serialization.XmlTypeMapping xmlTypeMapping) { } public event System.Xml.Serialization.XmlAttributeEventHandler UnknownAttribute { add { } remove { } } public event System.Xml.Serialization.XmlElementEventHandler UnknownElement { add { } remove { } } @@ -664,26 +721,43 @@ public event System.Xml.Serialization.UnreferencedObjectEventHandler Unreference public virtual bool CanDeserialize(System.Xml.XmlReader xmlReader) { throw null; } protected virtual System.Xml.Serialization.XmlSerializationReader CreateReader() { throw null; } protected virtual System.Xml.Serialization.XmlSerializationWriter CreateWriter() { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from deserialized types may be trimmed if not referenced directly")] public object? Deserialize(System.IO.Stream stream) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from deserialized types may be trimmed if not referenced directly")] public object? Deserialize(System.IO.TextReader textReader) { throw null; } protected virtual object Deserialize(System.Xml.Serialization.XmlSerializationReader reader) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from deserialized types may be trimmed if not referenced directly")] public object? Deserialize(System.Xml.XmlReader xmlReader) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from deserialized types may be trimmed if not referenced directly")] public object? Deserialize(System.Xml.XmlReader xmlReader, string? encodingStyle) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from deserialized types may be trimmed if not referenced directly")] public object? Deserialize(System.Xml.XmlReader xmlReader, string? encodingStyle, System.Xml.Serialization.XmlDeserializationEvents events) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from deserialized types may be trimmed if not referenced directly")] public object? Deserialize(System.Xml.XmlReader xmlReader, System.Xml.Serialization.XmlDeserializationEvents events) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public static System.Xml.Serialization.XmlSerializer[] FromMappings(System.Xml.Serialization.XmlMapping[]? mappings) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public static System.Xml.Serialization.XmlSerializer[] FromMappings(System.Xml.Serialization.XmlMapping[]? mappings, System.Type? type) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public static System.Xml.Serialization.XmlSerializer[] FromTypes(System.Type[]? types) { throw null; } public static string GetXmlSerializerAssemblyName(System.Type type) { throw null; } public static string GetXmlSerializerAssemblyName(System.Type type, string? defaultNamespace) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Serialize(System.IO.Stream stream, object? o) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Serialize(System.IO.Stream stream, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Serialize(System.IO.TextWriter textWriter, object? o) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Serialize(System.IO.TextWriter textWriter, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces) { } protected virtual void Serialize(object? o, System.Xml.Serialization.XmlSerializationWriter writer) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Serialize(System.Xml.XmlWriter xmlWriter, object? o) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Serialize(System.Xml.XmlWriter xmlWriter, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Serialize(System.Xml.XmlWriter xmlWriter, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces, string? encodingStyle) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Serialize(System.Xml.XmlWriter xmlWriter, object? o, System.Xml.Serialization.XmlSerializerNamespaces? namespaces, string? encodingStyle, string? id) { } } [System.AttributeUsageAttribute(System.AttributeTargets.Class | System.AttributeTargets.Enum | System.AttributeTargets.Interface | System.AttributeTargets.Struct, AllowMultiple=false)] @@ -698,13 +772,21 @@ public XmlSerializerAssemblyAttribute(string? assemblyName, string? codeBase) { public partial class XmlSerializerFactory { public XmlSerializerFactory() { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, string? defaultNamespace) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Type[]? extraTypes) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides, System.Type[]? extraTypes, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Xml.Serialization.XmlAttributeOverrides? overrides, System.Type[]? extraTypes, System.Xml.Serialization.XmlRootAttribute? root, string? defaultNamespace, string? location) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Type type, System.Xml.Serialization.XmlRootAttribute? root) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public System.Xml.Serialization.XmlSerializer CreateSerializer(System.Xml.Serialization.XmlTypeMapping xmlTypeMapping) { throw null; } } public abstract partial class XmlSerializerImplementation From 07445867d6395e67ba7121ffa4f21ae37f980692 Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Tue, 16 Mar 2021 21:54:51 -0700 Subject: [PATCH 04/12] Refactor to make code flow clearer --- .../ReflectionXmlSerializationReader.cs | 19 ++++++++++++------- .../ReflectionXmlSerializationWriter.cs | 19 ++++++++++++------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs index 2095e7eac073ee..ab420dca95534b 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs @@ -18,15 +18,20 @@ namespace System.Xml.Serialization internal sealed class ReflectionXmlSerializationReader : XmlSerializationReader { -#pragma warning disable IL2026 // Methods annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code - private static TypeDesc StringTypeDesc { get; set; } = (new TypeScope()).GetTypeDesc(typeof(string)); - private static TypeDesc QnameTypeDesc { get; set; } = (new TypeScope()).GetTypeDesc(typeof(XmlQualifiedName)); -#pragma warning restore IL2026 // Methods annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code - - private readonly XmlMapping _mapping; + private static readonly TypeDesc StringTypeDesc; + private static readonly TypeDesc QnameTypeDesc; [RequiresUnreferencedCode("Calls GetTypeDesc")] - static ReflectionXmlSerializationReader() { } + // Initialize in static constructor to suppress RequiresUnreferencedCode warning +#pragma warning disable CA1810 + static ReflectionXmlSerializationReader() + { + StringTypeDesc = (new TypeScope()).GetTypeDesc(typeof(string)); + QnameTypeDesc = (new TypeScope()).GetTypeDesc(typeof(XmlQualifiedName)); + } +#pragma warning restore CA1810 + + private readonly XmlMapping _mapping; public ReflectionXmlSerializationReader(XmlMapping mapping, XmlReader xmlReader, XmlDeserializationEvents events, string? encodingStyle) { diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs index 4d497430464331..a041a391150ffa 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs @@ -13,15 +13,20 @@ namespace System.Xml.Serialization { internal sealed class ReflectionXmlSerializationWriter : XmlSerializationWriter { - private readonly XmlMapping _mapping; - -#pragma warning disable IL2026 // Methods annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code - internal static TypeDesc StringTypeDesc { get; private set; } = (new TypeScope()).GetTypeDesc(typeof(string)); - internal static TypeDesc QnameTypeDesc { get; private set; } = (new TypeScope()).GetTypeDesc(typeof(XmlQualifiedName)); -#pragma warning restore IL2026 // Methods annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code + internal static readonly TypeDesc StringTypeDesc; + internal static readonly TypeDesc QnameTypeDesc; [RequiresUnreferencedCode("class GetTypeDesc")] - static ReflectionXmlSerializationWriter() { } + // Initialize in static constructor to suppress RequiresUnreferencedCode warning +#pragma warning disable CA1810 + static ReflectionXmlSerializationWriter() + { + StringTypeDesc = (new TypeScope()).GetTypeDesc(typeof(string)); + QnameTypeDesc = (new TypeScope()).GetTypeDesc(typeof(XmlQualifiedName)); + } +#pragma warning restore CA1810 + + private readonly XmlMapping _mapping; public ReflectionXmlSerializationWriter(XmlMapping xmlMapping, XmlWriter xmlWriter, XmlSerializerNamespaces namespaces, string? encodingStyle, string? id) { From 0060d8b33f19328ba4586e65392a1084a09b6998 Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Tue, 16 Mar 2021 22:57:15 -0700 Subject: [PATCH 05/12] Respond to PR comments --- .../src/System/Xml/Serialization/Mappings.cs | 3 +-- .../src/System/Xml/Serialization/Models.cs | 5 +++-- .../Xml/Serialization/SchemaImporter.cs | 2 +- .../src/System/Xml/Serialization/Types.cs | 8 ++----- .../System/Xml/Serialization/XmlAttributes.cs | 21 +------------------ .../Xml/Serialization/XmlSchemaImporter.cs | 2 +- 6 files changed, 9 insertions(+), 32 deletions(-) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Mappings.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Mappings.cs index 17a5111248294a..b6c770d672e3e3 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Mappings.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Mappings.cs @@ -1173,11 +1173,10 @@ internal SerializableMapping? Next set { _next = value; } } + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] internal Type? Type { - [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] get { return _type; } - [param: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] set { _type = value; } } diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Models.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Models.cs index 7fb61a8a8b9140..f81cf455a7b5e4 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Models.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Models.cs @@ -99,8 +99,9 @@ internal abstract class TypeModel private readonly ModelScope _scope; protected TypeModel( - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] - Type type, TypeDesc typeDesc, ModelScope scope) + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, + TypeDesc typeDesc, + ModelScope scope) { _scope = scope; _type = type; diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SchemaImporter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SchemaImporter.cs index 1f511afd9af5f1..7e5a4ac6572a6f 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SchemaImporter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SchemaImporter.cs @@ -7,13 +7,13 @@ namespace System.Xml.Serialization using System.Xml.Schema; using System.Collections; using System.ComponentModel; + using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Configuration; using System.Xml.Serialization.Configuration; #if DEBUG using System.Diagnostics; - using System.Diagnostics.CodeAnalysis; #endif public abstract class SchemaImporter diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Types.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Types.cs index 23faef393a2ba8..a354ebbd5d3216 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Types.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Types.cs @@ -1394,12 +1394,8 @@ internal static PropertyInfo GetDefaultIndexer( return indexer; } private static Type GetCollectionElementType( - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors - | DynamicallyAccessedMemberTypes.PublicMethods - | DynamicallyAccessedMemberTypes.PublicFields - | DynamicallyAccessedMemberTypes.PublicNestedTypes - | DynamicallyAccessedMemberTypes.PublicProperties - | DynamicallyAccessedMemberTypes.PublicEvents)] Type type, string? memberInfo) + [DynamicallyAccessedMembers(TrimmerConstants.PublicMembers)] Type type, + string? memberInfo) { return GetDefaultIndexer(type, memberInfo).PropertyType; } diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlAttributes.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlAttributes.cs index cc13bb842597e3..24587b0b7153d3 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlAttributes.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlAttributes.cs @@ -42,7 +42,6 @@ public class XmlAttributes private XmlTypeAttribute? _xmlType; private XmlAnyAttributeAttribute? _xmlAnyAttribute; private readonly XmlChoiceIdentifierAttribute? _xmlChoiceIdentifier; - private static volatile Type? s_ignoreAttributeType; /// @@ -73,27 +72,9 @@ internal XmlAttributeFlags XmlFlags } } - private static Type IgnoreAttribute - { - [RequiresUnreferencedCode("calls GetType")] - get - { - if (s_ignoreAttributeType == null) - { - s_ignoreAttributeType = typeof(object).Assembly.GetType("System.XmlIgnoreMemberAttribute"); - if (s_ignoreAttributeType == null) - { - s_ignoreAttributeType = typeof(XmlIgnoreAttribute); - } - } - return s_ignoreAttributeType; - } - } - /// /// [To be supplied.] /// - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] public XmlAttributes(ICustomAttributeProvider provider) { object[] attrs = provider.GetCustomAttributes(false); @@ -102,7 +83,7 @@ public XmlAttributes(ICustomAttributeProvider provider) XmlAnyElementAttribute? wildcard = null; for (int i = 0; i < attrs.Length; i++) { - if (attrs[i] is XmlIgnoreAttribute || attrs[i] is ObsoleteAttribute || attrs[i].GetType() == IgnoreAttribute) + if (attrs[i] is XmlIgnoreAttribute || attrs[i] is ObsoleteAttribute) { _xmlIgnore = true; break; diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemaImporter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemaImporter.cs index 3f541cf9138c3e..14d958df2133b6 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemaImporter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemaImporter.cs @@ -8,6 +8,7 @@ namespace System.Xml.Serialization using System.Collections; using System.Collections.Generic; using System.ComponentModel; + using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Xml.Serialization.Configuration; using System.Collections.Specialized; @@ -15,7 +16,6 @@ namespace System.Xml.Serialization #if DEBUG using System.Diagnostics; - using System.Diagnostics.CodeAnalysis; #endif public class XmlSchemaImporter : SchemaImporter From 6061761582973498250c71273fe3c97b695c9611 Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Thu, 18 Mar 2021 15:34:39 -0700 Subject: [PATCH 06/12] Give constant different name --- .../src/System/Xml/Schema/XmlSchema.cs | 12 ++--- .../Serialization/PrimitiveXmlSerializers.cs | 4 +- .../ReflectionXmlSerializationReader.cs | 2 +- .../ReflectionXmlSerializationWriter.cs | 2 +- .../Serialization/SoapReflectionImporter.cs | 22 ++++---- .../src/System/Xml/Serialization/Types.cs | 2 +- .../Serialization/XmlReflectionImporter.cs | 20 +++---- .../Xml/Serialization/XmlSchemaImporter.cs | 26 ++++----- .../System/Xml/Serialization/XmlSchemas.cs | 2 +- .../Serialization/XmlSerializationReader.cs | 14 ++--- .../Serialization/XmlSerializationWriter.cs | 20 +++---- .../System/Xml/Serialization/XmlSerializer.cs | 54 +++++++++---------- .../Xml/Serialization/XmlSerializerFactory.cs | 16 +++--- 13 files changed, 98 insertions(+), 98 deletions(-) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs b/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs index 8b521d8d1f9537..4386f04fa34b12 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs @@ -89,13 +89,13 @@ public XmlSchema() { } return parser.XmlSchema; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(Stream stream) { Write(stream, null); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(Stream stream, XmlNamespaceManager? namespaceManager) { XmlTextWriter xmlWriter = new XmlTextWriter(stream, null); @@ -103,13 +103,13 @@ public void Write(Stream stream, XmlNamespaceManager? namespaceManager) Write(xmlWriter, namespaceManager); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(TextWriter writer) { Write(writer, null); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(TextWriter writer, XmlNamespaceManager? namespaceManager) { XmlTextWriter xmlWriter = new XmlTextWriter(writer); @@ -117,13 +117,13 @@ public void Write(TextWriter writer, XmlNamespaceManager? namespaceManager) Write(xmlWriter, namespaceManager); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(XmlWriter writer) { Write(writer, null); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(XmlWriter writer, XmlNamespaceManager? namespaceManager) { XmlSerializer serializer = new XmlSerializer(typeof(XmlSchema)); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/PrimitiveXmlSerializers.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/PrimitiveXmlSerializers.cs index 993376e946462e..e06311de6d61c9 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/PrimitiveXmlSerializers.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/PrimitiveXmlSerializers.cs @@ -225,7 +225,7 @@ internal void Write_QName(object? o) WriteNullableQualifiedNameLiteral(@"QName", @"", ((global::System.Xml.XmlQualifiedName)o)); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected override void InitCallbacks() { } @@ -710,7 +710,7 @@ internal sealed class XmlSerializationPrimitiveReader : System.Xml.Serialization return (object?)o; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected override void InitCallbacks() { } diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs index ab420dca95534b..439c732080c736 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs @@ -39,7 +39,7 @@ public ReflectionXmlSerializationReader(XmlMapping mapping, XmlReader xmlReader, _mapping = mapping; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected override void InitCallbacks() { TypeScope scope = _mapping.Scope!; diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs index a041a391150ffa..38b552fe0d93e5 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs @@ -47,7 +47,7 @@ public ReflectionXmlSerializationWriter(XmlMapping xmlMapping, XmlWriter xmlWrit } } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected override void InitCallbacks() { TypeScope scope = _mapping.Scope!; diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SoapReflectionImporter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SoapReflectionImporter.cs index 3d2d65df34c8d8..39310b9a26f63f 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SoapReflectionImporter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/SoapReflectionImporter.cs @@ -48,7 +48,7 @@ public SoapReflectionImporter(SoapAttributeOverrides? attributeOverrides, string _modelScope = new ModelScope(_typeScope); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void IncludeTypes(ICustomAttributeProvider provider) { IncludeTypes(provider, new RecursionLimiter()); @@ -64,25 +64,25 @@ private void IncludeTypes(ICustomAttributeProvider provider, RecursionLimiter li } } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void IncludeType(Type type) { IncludeType(type, new RecursionLimiter()); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private void IncludeType(Type type, RecursionLimiter limiter) { ImportTypeMapping(_modelScope.GetTypeModel(type), limiter); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlTypeMapping ImportTypeMapping(Type type) { return ImportTypeMapping(type, null); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlTypeMapping ImportTypeMapping(Type type, string? defaultNamespace) { ElementAccessor element = new ElementAccessor(); @@ -98,25 +98,25 @@ public XmlTypeMapping ImportTypeMapping(Type type, string? defaultNamespace) return xmlMapping; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members) { return ImportMembersMapping(elementName, ns, members, true, true, false); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors) { return ImportMembersMapping(elementName, ns, members, hasWrapperElement, writeAccessors, false); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors, bool validate) { return ImportMembersMapping(elementName, ns, members, hasWrapperElement, writeAccessors, validate, XmlMappingAccess.Read | XmlMappingAccess.Write); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement, bool writeAccessors, bool validate, XmlMappingAccess access) { ElementAccessor element = new ElementAccessor(); @@ -644,7 +644,7 @@ private MembersMapping ImportMembersMapping(XmlReflectionMember[] xmlReflectionM return members; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private MemberMapping? ImportMemberMapping(XmlReflectionMember xmlReflectionMember, string? ns, XmlReflectionMember[] xmlReflectionMembers, XmlSchemaForm form, RecursionLimiter limiter) { SoapAttributes a = xmlReflectionMember.SoapAttributes; @@ -769,7 +769,7 @@ internal string XsdTypeName(Type type) return XsdTypeName(type, GetAttributes(type), typeDesc.Name); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] internal string XsdTypeName(Type type, SoapAttributes a, string name) { string typeName = name; diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Types.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Types.cs index a354ebbd5d3216..e2e92b3334f1a6 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Types.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/Types.cs @@ -1281,7 +1281,7 @@ private static TypeFlags GetConstructorFlags( return 0; } - [RequiresUnreferencedCode("creates XmlAttributes")] + [RequiresUnreferencedCode("Needs to mark members on the return type of the GetEnumerator method")] private static Type? GetEnumeratorElementType(Type type, ref TypeFlags flags) { if (typeof(IEnumerable).IsAssignableFrom(type)) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs index c2f1ca0b393af0..c7c6ccabacefd5 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs @@ -88,7 +88,7 @@ public XmlReflectionImporter(XmlAttributeOverrides? attributeOverrides, string? /// /// [To be supplied.] /// - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void IncludeTypes(ICustomAttributeProvider provider) { IncludeTypes(provider, new RecursionLimiter()); @@ -108,7 +108,7 @@ private void IncludeTypes(ICustomAttributeProvider provider, RecursionLimiter li /// /// [To be supplied.] /// - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void IncludeType(Type type) { IncludeType(type, new RecursionLimiter()); @@ -138,7 +138,7 @@ private void IncludeType(Type type, RecursionLimiter limiter) /// /// [To be supplied.] /// - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlTypeMapping ImportTypeMapping(Type type) { return ImportTypeMapping(type, null, null); @@ -147,7 +147,7 @@ public XmlTypeMapping ImportTypeMapping(Type type) /// /// [To be supplied.] /// - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlTypeMapping ImportTypeMapping(Type type, string? defaultNamespace) { return ImportTypeMapping(type, null, defaultNamespace); @@ -156,7 +156,7 @@ public XmlTypeMapping ImportTypeMapping(Type type, string? defaultNamespace) /// /// [To be supplied.] /// - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlTypeMapping ImportTypeMapping(Type type, XmlRootAttribute? root) { return ImportTypeMapping(type, root, null); @@ -165,7 +165,7 @@ public XmlTypeMapping ImportTypeMapping(Type type, XmlRootAttribute? root) /// /// [To be supplied.] /// - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlTypeMapping ImportTypeMapping(Type type, XmlRootAttribute? root, string? defaultNamespace) { if (type == null) @@ -179,7 +179,7 @@ public XmlTypeMapping ImportTypeMapping(Type type, XmlRootAttribute? root, strin /// /// [To be supplied.] /// - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement) { return ImportMembersMapping(elementName, ns, members, hasWrapperElement, false); @@ -188,7 +188,7 @@ public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, X /// /// [To be supplied.] /// - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement, bool rpc) { return ImportMembersMapping(elementName, ns, members, hasWrapperElement, rpc, false); @@ -198,7 +198,7 @@ public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, X /// [To be supplied.] /// /// - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement, bool rpc, bool openModel) { return ImportMembersMapping(elementName, ns, members, hasWrapperElement, rpc, openModel, XmlMappingAccess.Read | XmlMappingAccess.Write); @@ -208,7 +208,7 @@ public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, X /// [To be supplied.] /// /// - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, XmlReflectionMember[] members, bool hasWrapperElement, bool rpc, bool openModel, XmlMappingAccess access) { ElementAccessor element = new ElementAccessor(); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemaImporter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemaImporter.cs index 14d958df2133b6..9aaf0a36c814a1 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemaImporter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemaImporter.cs @@ -20,13 +20,13 @@ namespace System.Xml.Serialization public class XmlSchemaImporter : SchemaImporter { - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlSchemaImporter(XmlSchemas schemas) : base(schemas, CodeGenerationOptions.GenerateProperties, new ImportContext()) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlSchemaImporter(XmlSchemas schemas, CodeIdentifiers? typeIdentifiers) : base(schemas, CodeGenerationOptions.GenerateProperties, new ImportContext(typeIdentifiers, false)) { } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlTypeMapping ImportDerivedTypeMapping(XmlQualifiedName name, Type? baseType) { return ImportDerivedTypeMapping(name, baseType, false); @@ -46,7 +46,7 @@ internal TypeMapping GetDefaultMapping(TypeFlags flags) return mapping; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlTypeMapping ImportDerivedTypeMapping(XmlQualifiedName name, Type? baseType, bool baseTypeCanBeIndirect) { ElementAccessor element = ImportElement(name, typeof(TypeMapping), baseType); @@ -72,19 +72,19 @@ public XmlTypeMapping ImportDerivedTypeMapping(XmlQualifiedName name, Type? base return new XmlTypeMapping(Scope, element); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlTypeMapping ImportSchemaType(XmlQualifiedName typeName) { return ImportSchemaType(typeName, null, false); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlTypeMapping ImportSchemaType(XmlQualifiedName typeName, Type? baseType) { return ImportSchemaType(typeName, baseType, false); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlTypeMapping ImportSchemaType(XmlQualifiedName typeName, Type? baseType, bool baseTypeCanBeIndirect) { TypeMapping typeMapping = ImportType(typeName, typeof(TypeMapping), baseType, TypeFlags.CanBeElementValue, true)!; @@ -122,19 +122,19 @@ public XmlTypeMapping ImportSchemaType(XmlQualifiedName typeName, Type? baseType return new XmlTypeMapping(Scope, accessor); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlTypeMapping ImportTypeMapping(XmlQualifiedName name) { return ImportDerivedTypeMapping(name, null); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping ImportMembersMapping(XmlQualifiedName name) { return new XmlMembersMapping(Scope, ImportElement(name, typeof(MembersMapping), null), XmlMappingAccess.Read | XmlMappingAccess.Write); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping? ImportAnyType(XmlQualifiedName typeName, string elementName) { TypeMapping? typeMapping = ImportType(typeName, typeof(MembersMapping), null, TypeFlags.CanBeElementValue, true); @@ -174,13 +174,13 @@ public XmlMembersMapping ImportMembersMapping(XmlQualifiedName name) return members; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping ImportMembersMapping(XmlQualifiedName[] names) { return ImportMembersMapping(names, null, false); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping ImportMembersMapping(XmlQualifiedName[] names, Type? baseType, bool baseTypeCanBeIndirect) { CodeIdentifiers memberScope = new CodeIdentifiers(); @@ -209,7 +209,7 @@ public XmlMembersMapping ImportMembersMapping(XmlQualifiedName[] names, Type? ba return new XmlMembersMapping(Scope, element, XmlMappingAccess.Read | XmlMappingAccess.Write); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlMembersMapping ImportMembersMapping(string name, string? ns, SoapSchemaMember[] members) { XmlSchemaComplexType type = new XmlSchemaComplexType(); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemas.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemas.cs index 714675a587a241..fc4804211b704a 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemas.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSchemas.cs @@ -645,7 +645,7 @@ public bool IsCompiled get { return _isCompiled; } } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Compile(ValidationEventHandler? handler, bool fullCompile) { if (_isCompiled) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReader.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReader.cs index 8296a3e883172a..73e92ab645b965 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReader.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationReader.cs @@ -1757,10 +1757,10 @@ protected void FixupArrayRefs(object fixup) return array; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected abstract void InitCallbacks(); - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected void ReadReferencedElements() { _r.MoveToContent(); @@ -1775,33 +1775,33 @@ protected void ReadReferencedElements() HandleUnreferencedObjects(); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected object? ReadReferencedElement() { return ReadReferencedElement(null, null); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected object? ReadReferencedElement(string? name, string? ns) { string? dummy; return ReadReferencingElement(name, ns, out dummy); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected object? ReadReferencingElement(out string? fixupReference) { return ReadReferencingElement(null, null, out fixupReference); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected object? ReadReferencingElement(string? name, string? ns, out string? fixupReference) { return ReadReferencingElement(name, ns, false, out fixupReference); } [MemberNotNull(nameof(_callbacks))] - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected object? ReadReferencingElement(string? name, string? ns, bool elementCanBeType, out string? fixupReference) { object? o = null; diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriter.cs index 436a4fba444a7e..35bda1cbb11f23 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriter.cs @@ -238,7 +238,7 @@ private XmlQualifiedName GetPrimitiveTypeName(Type type) return new XmlQualifiedName(typeName, typeNs); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected void WriteTypedPrimitive(string? name, string? ns, object o, bool xsiType) { string? value = null; @@ -773,13 +773,13 @@ private void WriteElement(XmlNode node, string name, string? ns, bool isNullable _w.WriteEndElement(); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected Exception CreateUnknownTypeException(object o) { return CreateUnknownTypeException(o.GetType()); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected Exception CreateUnknownTypeException(Type type) { if (typeof(IXmlSerializable).IsAssignableFrom(type)) return new InvalidOperationException(SR.Format(SR.XmlInvalidSerializable, type.FullName)); @@ -1275,25 +1275,25 @@ private void WriteArray(string name, string? ns, object o, Type type) } _w.WriteEndElement(); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o) { WritePotentiallyReferencingElement(n, ns, o, null, false, false); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o, Type? ambientType) { WritePotentiallyReferencingElement(n, ns, o, ambientType, false, false); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected void WritePotentiallyReferencingElement(string n, string? ns, object? o, Type? ambientType, bool suppressReference) { WritePotentiallyReferencingElement(n, ns, o, ambientType, suppressReference, false); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected void WritePotentiallyReferencingElement(string? n, string? ns, object? o, Type? ambientType, bool suppressReference, bool isNullable) { if (o == null) @@ -1380,10 +1380,10 @@ private void WriteReferencedElement(string? name, string? ns, object o, Type? am return (TypeEntry?)_typeEntries[t]; } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected abstract void InitCallbacks(); - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] protected void WriteReferencedElements() { if (_referencesToWrite == null) return; @@ -1584,7 +1584,7 @@ internal void WriteReflectionInit(TypeScope scope) } } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private string WriteTypeInfo(TypeScope scope, TypeDesc typeDesc, Type type) { InitTheFirstTime(); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs index d4e5db7bb7be69..00426fda96b804 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs @@ -151,8 +151,8 @@ private static XmlSerializerNamespaces DefaultNamespaces } // Linker warning messages - internal const string LinkerSerializationMessage = "Members from serialized types may be trimmed if not referenced directly"; - private const string s_deserializationMessage = "Members from deserialized types may be trimmed if not referenced directly"; + internal const string TrimSerializationWarning = "Members from serialized types may be trimmed if not referenced directly"; + private const string s_trimDeserializationWarning = "Members from deserialized types may be trimmed if not referenced directly"; private static readonly Dictionary> s_xmlSerializerTable = new Dictionary>(); @@ -160,28 +160,28 @@ protected XmlSerializer() { } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public XmlSerializer(Type type, XmlAttributeOverrides? overrides, Type[]? extraTypes, XmlRootAttribute? root, string? defaultNamespace) : this(type, overrides, extraTypes, root, defaultNamespace, null) { } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public XmlSerializer(Type type, XmlRootAttribute? root) : this(type, null, Type.EmptyTypes, root, null, null) { } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public XmlSerializer(Type type, Type[]? extraTypes) : this(type, null, extraTypes, null, null, null) { } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public XmlSerializer(Type type, XmlAttributeOverrides? overrides) : this(type, overrides, Type.EmptyTypes, null, null, null) { } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public XmlSerializer(XmlTypeMapping xmlTypeMapping) { if (xmlTypeMapping == null) @@ -191,12 +191,12 @@ public XmlSerializer(XmlTypeMapping xmlTypeMapping) _mapping = xmlTypeMapping; } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public XmlSerializer(Type type) : this(type, (string?)null) { } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public XmlSerializer(Type type, string? defaultNamespace) { if (type == null) @@ -254,7 +254,7 @@ public XmlSerializer(Type type, string? defaultNamespace) } } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public XmlSerializer(Type type, XmlAttributeOverrides? overrides, Type[]? extraTypes, XmlRootAttribute? root, string? defaultNamespace, string? location) { if (type == null) @@ -308,13 +308,13 @@ private XmlTypeMapping GenerateXmlTypeMapping(Type type, XmlAttributeOverrides? return new TempAssembly(new XmlMapping[] { xmlMapping }, new Type?[] { type }, defaultNamespace, location); } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public void Serialize(TextWriter textWriter, object? o) { Serialize(textWriter, o, null); } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public void Serialize(TextWriter textWriter, object? o, XmlSerializerNamespaces? namespaces) { XmlTextWriter xmlWriter = new XmlTextWriter(textWriter); @@ -323,13 +323,13 @@ public void Serialize(TextWriter textWriter, object? o, XmlSerializerNamespaces? Serialize(xmlWriter, o, namespaces); } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public void Serialize(Stream stream, object? o) { Serialize(stream, o, null); } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public void Serialize(Stream stream, object? o, XmlSerializerNamespaces? namespaces) { XmlTextWriter xmlWriter = new XmlTextWriter(stream, null); @@ -338,25 +338,25 @@ public void Serialize(Stream stream, object? o, XmlSerializerNamespaces? namespa Serialize(xmlWriter, o, namespaces); } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public void Serialize(XmlWriter xmlWriter, object? o) { Serialize(xmlWriter, o, null); } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public void Serialize(XmlWriter xmlWriter, object? o, XmlSerializerNamespaces? namespaces) { Serialize(xmlWriter, o, namespaces, null); } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public void Serialize(XmlWriter xmlWriter, object? o, XmlSerializerNamespaces? namespaces, string? encodingStyle) { Serialize(xmlWriter, o, namespaces, encodingStyle, null); } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public void Serialize(XmlWriter xmlWriter, object? o, XmlSerializerNamespaces? namespaces, string? encodingStyle, string? id) { try @@ -418,7 +418,7 @@ private XmlMapping GetMapping() return _mapping; } - [RequiresUnreferencedCode(s_deserializationMessage)] + [RequiresUnreferencedCode(s_trimDeserializationWarning)] public object? Deserialize(Stream stream) { XmlTextReader xmlReader = new XmlTextReader(stream); @@ -428,7 +428,7 @@ private XmlMapping GetMapping() return Deserialize(xmlReader, null); } - [RequiresUnreferencedCode(s_deserializationMessage)] + [RequiresUnreferencedCode(s_trimDeserializationWarning)] public object? Deserialize(TextReader textReader) { XmlTextReader xmlReader = new XmlTextReader(textReader); @@ -438,25 +438,25 @@ private XmlMapping GetMapping() return Deserialize(xmlReader, null); } - [RequiresUnreferencedCode(s_deserializationMessage)] + [RequiresUnreferencedCode(s_trimDeserializationWarning)] public object? Deserialize(XmlReader xmlReader) { return Deserialize(xmlReader, null); } - [RequiresUnreferencedCode(s_deserializationMessage)] + [RequiresUnreferencedCode(s_trimDeserializationWarning)] public object? Deserialize(XmlReader xmlReader, XmlDeserializationEvents events) { return Deserialize(xmlReader, null, events); } - [RequiresUnreferencedCode(s_deserializationMessage)] + [RequiresUnreferencedCode(s_trimDeserializationWarning)] public object? Deserialize(XmlReader xmlReader, string? encodingStyle) { return Deserialize(xmlReader, encodingStyle, _events); } - [RequiresUnreferencedCode(s_deserializationMessage)] + [RequiresUnreferencedCode(s_trimDeserializationWarning)] public object? Deserialize(XmlReader xmlReader, string? encodingStyle, XmlDeserializationEvents events) { events.sender = this; @@ -540,13 +540,13 @@ public virtual bool CanDeserialize(XmlReader xmlReader) } } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public static XmlSerializer[] FromMappings(XmlMapping[]? mappings) { return FromMappings(mappings, (Type?)null); } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public static XmlSerializer[] FromMappings(XmlMapping[]? mappings, Type? type) { if (mappings == null || mappings.Length == 0) return Array.Empty(); @@ -720,7 +720,7 @@ private static XmlSerializer[] GetSerializersFromCache(XmlMapping[] mappings, Ty return serializers!; } - [RequiresUnreferencedCode(LinkerSerializationMessage)] + [RequiresUnreferencedCode(TrimSerializationWarning)] public static XmlSerializer[] FromTypes(Type[]? types) { if (types == null) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializerFactory.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializerFactory.cs index 8b5aca9219fb93..301f3c48ef0283 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializerFactory.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializerFactory.cs @@ -18,49 +18,49 @@ namespace System.Xml.Serialization public class XmlSerializerFactory { - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlSerializer CreateSerializer(Type type, XmlAttributeOverrides? overrides, Type[]? extraTypes, XmlRootAttribute? root, string? defaultNamespace) { return CreateSerializer(type, overrides, extraTypes, root, defaultNamespace, null); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlSerializer CreateSerializer(Type type, XmlRootAttribute? root) { return CreateSerializer(type, null, Type.EmptyTypes, root, null, null); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlSerializer CreateSerializer(Type type, Type[]? extraTypes) { return CreateSerializer(type, null, extraTypes, null, null, null); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlSerializer CreateSerializer(Type type, XmlAttributeOverrides? overrides) { return CreateSerializer(type, overrides, Type.EmptyTypes, null, null, null); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlSerializer CreateSerializer(XmlTypeMapping xmlTypeMapping) { return new XmlSerializer(xmlTypeMapping); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlSerializer CreateSerializer(Type type) { return CreateSerializer(type, (string?)null); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlSerializer CreateSerializer(Type type, string? defaultNamespace) { return new XmlSerializer(type, defaultNamespace); } - [RequiresUnreferencedCode(XmlSerializer.LinkerSerializationMessage)] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public XmlSerializer CreateSerializer(Type type, XmlAttributeOverrides? overrides, Type[]? extraTypes, XmlRootAttribute? root, string? defaultNamespace, string? location) { return new XmlSerializer(type, overrides, extraTypes, root, defaultNamespace, location); From 59ec64b3ada02f4256ddbfccc1c7fac4e51b6d69 Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Thu, 18 Mar 2021 15:42:54 -0700 Subject: [PATCH 07/12] Replace out-of-date attributes --- .../Serialization/XmlReflectionImporter.cs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs index c7c6ccabacefd5..01912a8d3a1b57 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs @@ -238,7 +238,6 @@ public XmlMembersMapping ImportMembersMapping(string? elementName, string? ns, X return xmlMapping; } - [RequiresUnreferencedCode("Creates XmlAttributes")] private XmlAttributes GetAttributes(Type type, bool canBeSimpleType) { XmlAttributes? attrs = _attributeOverrides[type]; @@ -250,7 +249,6 @@ private XmlAttributes GetAttributes(Type type, bool canBeSimpleType) return new XmlAttributes(type); } - [RequiresUnreferencedCode("Creates XmlAttributes")] private XmlAttributes GetAttributes(MemberInfo memberInfo) { XmlAttributes? attrs = _attributeOverrides[memberInfo.DeclaringType!, memberInfo.Name]; @@ -258,7 +256,7 @@ private XmlAttributes GetAttributes(MemberInfo memberInfo) return new XmlAttributes(memberInfo); } - [RequiresUnreferencedCode("calls GetAttributes")] + [RequiresUnreferencedCode("calls ImportTypeMapping")] private ElementAccessor ImportElement(TypeModel model, XmlRootAttribute? root, string? defaultNamespace, RecursionLimiter limiter) { XmlAttributes a = GetAttributes(model.Type, true); @@ -389,7 +387,7 @@ private TypeMapping ImportTypeMapping(TypeModel model, string? ns, ImportContext return ImportTypeMapping(model, ns, context, dataType, a, false, false, limiter); } - [RequiresUnreferencedCode("calls GetAttributes")] + [RequiresUnreferencedCode("calls ImportEnumMapping")] private TypeMapping ImportTypeMapping(TypeModel model, string? ns, ImportContext context, string dataType, XmlAttributes? a, bool repeats, bool openModel, RecursionLimiter limiter) { try @@ -723,7 +721,7 @@ private StructMapping GetRootMapping() return mapping; } - [RequiresUnreferencedCode("calls GetAttributes")] + [RequiresUnreferencedCode("calls GetRootMapping")] private StructMapping ImportStructLikeMapping(StructModel model, string? ns, bool openModel, XmlAttributes? a, RecursionLimiter limiter) { if (model.TypeDesc.Kind == TypeKind.Root) return GetRootMapping(); @@ -789,7 +787,7 @@ private StructMapping ImportStructLikeMapping(StructModel model, string? ns, boo return mapping; } - [RequiresUnreferencedCode("calls GetAttributes")] + [RequiresUnreferencedCode("calls GetTypeModel")] private bool InitializeStructMembers(StructMapping mapping, StructModel model, bool openModel, string? typeName, RecursionLimiter limiter) { if (mapping.IsFullyInitialized) @@ -952,7 +950,7 @@ private static bool IsAnonymousType(XmlAttributes a, string? contextNs) return false; } - [RequiresUnreferencedCode("Calls GetAttributes")] + [RequiresUnreferencedCode("calls GetTypeDesc")] internal string XsdTypeName(Type type) { if (type == typeof(object)) return Soap.UrType; @@ -999,7 +997,7 @@ private static int CountAtLevel(XmlArrayItemAttributes attributes, int level) return sum; } - [RequiresUnreferencedCode("calls GetAttributes")] + [RequiresUnreferencedCode("calls XsdTypeName")] private void SetArrayMappingType(ArrayMapping mapping, string? defaultNs, Type type) { XmlAttributes a = GetAttributes(type, false); @@ -1186,7 +1184,7 @@ private PrimitiveMapping ImportPrimitiveMapping(PrimitiveModel model, ImportCont return mapping; } - [RequiresUnreferencedCode("calls GetAttributes")] + [RequiresUnreferencedCode("calls XsdTypeName")] private EnumMapping ImportEnumMapping(EnumModel model, string? ns, bool repeats) { XmlAttributes a = GetAttributes(model.Type, false); @@ -1229,7 +1227,6 @@ private EnumMapping ImportEnumMapping(EnumModel model, string? ns, bool repeats) return mapping; } - [RequiresUnreferencedCode("calls GetAttributes")] private ConstantMapping? ImportConstantMapping(ConstantModel model) { XmlAttributes a = GetAttributes(model.FieldInfo); @@ -1246,7 +1243,7 @@ private EnumMapping ImportEnumMapping(EnumModel model, string? ns, bool repeats) return constant; } - [RequiresUnreferencedCode("calls ImportMemberMapping")] + [RequiresUnreferencedCode("calls GetTypeDesc")] private MembersMapping ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, string? ns, bool hasWrapperElement, bool rpc, bool openModel, RecursionLimiter limiter) { MembersMapping members = new MembersMapping(); From db245e8f99b2fce61e3f0fa22a0d486b405d9d3a Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Thu, 18 Mar 2021 16:02:22 -0700 Subject: [PATCH 08/12] Re-add ref changes --- .../System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs b/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs index 479251eab45154..de6c76d5e58e6e 100644 --- a/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs +++ b/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs @@ -1479,11 +1479,17 @@ public void Compile(System.Xml.Schema.ValidationEventHandler? validationEventHan public static System.Xml.Schema.XmlSchema? Read(System.IO.Stream stream, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } public static System.Xml.Schema.XmlSchema? Read(System.IO.TextReader reader, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } public static System.Xml.Schema.XmlSchema? Read(System.Xml.XmlReader reader, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.IO.Stream stream) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.IO.Stream stream, System.Xml.XmlNamespaceManager? namespaceManager) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.IO.TextWriter writer) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.IO.TextWriter writer, System.Xml.XmlNamespaceManager? namespaceManager) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.Xml.XmlWriter writer) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.Xml.XmlWriter writer, System.Xml.XmlNamespaceManager? namespaceManager) { } } public partial class XmlSchemaAll : System.Xml.Schema.XmlSchemaGroupBase From b0d278c1536d7ead6f03133a04abe11afc258b63 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Sat, 27 Mar 2021 11:02:51 -0700 Subject: [PATCH 09/12] Addressing remaining PR Feedback --- .../System.Data.Common/System.Data.Common.sln | 177 +++++----- .../src/ILLink/ILLink.Suppressions.xml | 317 ------------------ .../src/System/Xml/Schema/XmlSchema.cs | 10 +- .../Xml/Serialization/TypeExtensions.cs | 5 +- .../System/Xml/Serialization/XmlAttributes.cs | 1 - .../XmlSerializationWriterILGen.cs | 5 +- .../System/Xml/Serialization/XmlSerializer.cs | 2 +- .../System.Private.Xml.TrimmingTests.proj | 1 + .../tests/TrimmingTests/XmlSchema.Write.cs | 50 +++ .../ref/System.Xml.ReaderWriter.cs | 6 - .../ref/System.Xml.XmlSerializer.cs | 1 - 11 files changed, 147 insertions(+), 428 deletions(-) delete mode 100644 src/libraries/System.Private.Xml/src/ILLink/ILLink.Suppressions.xml create mode 100644 src/libraries/System.Private.Xml/tests/TrimmingTests/XmlSchema.Write.cs diff --git a/src/libraries/System.Data.Common/System.Data.Common.sln b/src/libraries/System.Data.Common/System.Data.Common.sln index 8427d81f3b6c07..f1745ac2cbc0fe 100644 --- a/src/libraries/System.Data.Common/System.Data.Common.sln +++ b/src/libraries/System.Data.Common/System.Data.Common.sln @@ -1,8 +1,4 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31025.218 -MinimumVisualStudioVersion = 10.0.40219.1 +Microsoft Visual Studio Solution File, Format Version 12.00 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Private.CoreLib", "..\..\coreclr\System.Private.CoreLib\System.Private.CoreLib.csproj", "{F3DC1DF9-698A-4970-9A5E-AB946D6F763B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtilities", "..\Common\tests\TestUtilities\TestUtilities.csproj", "{0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}" @@ -25,7 +21,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Private.Uri", "..\Sy EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServices.Unsafe", "..\System.Runtime.CompilerServices.Unsafe\ref\System.Runtime.CompilerServices.Unsafe.csproj", "{A404332F-CCAA-4E22-94C1-635F7F19176F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServices.Unsafe", "..\System.Runtime.CompilerServices.Unsafe\src\System.Runtime.CompilerServices.Unsafe.ilproj", "{04BA3E3C-6979-4792-B19E-C797AD607F42}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServices.Unsafe", "..\System.Runtime.CompilerServices.Unsafe\src\System.Runtime.CompilerServices.Unsafe.ilproj", "{6E353933-8CBD-467D-8FF1-00133C3F2036}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.Extensions", "..\System.Runtime.Extensions\src\System.Runtime.Extensions.csproj", "{68D868F6-1311-47A2-9DDE-22B64B5FF85E}" EndProject @@ -42,27 +38,36 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{9A105AFB-AA36-46E1-BC68-6724F5644D0C}" EndProject Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - ..\System.Private.CoreLib\src\System.Private.CoreLib.Shared.projitems*{f3dc1df9-698a-4970-9a5e-ab946d6f763b}*SharedItemsImports = 5 + GlobalSection(NestedProjects) = preSolution + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {0FCF2BA6-A5B3-4E1C-A49A-424E77602313} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {C3F9A601-07D8-43A3-A3CA-7A002358A102} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {6E353933-8CBD-467D-8FF1-00133C3F2036} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {68D868F6-1311-47A2-9DDE-22B64B5FF85E} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {09129981-6B0D-44C7-9F0A-AD2426106332} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} + {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3} = {12B0E17A-6957-425E-98E1-5F245010893A} + {BEBD7B5B-9544-42EB-B878-F009560CAAF4} = {12B0E17A-6957-425E-98E1-5F245010893A} + {5305244F-C52B-4772-A13D-C034213F3833} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} + {F865C526-79F8-403B-B5E4-52A90ECE21E3} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} + {A404332F-CCAA-4E22-94C1-635F7F19176F} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} + {BF66C27C-D1B1-4F86-A1E1-EDC63584E818} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} + {649CA543-288D-4A8B-AED3-E470DC7FF866} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution - Checked|Any CPU = Checked|Any CPU - Checked|x64 = Checked|x64 - Checked|x86 = Checked|x86 Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 + Checked|Any CPU = Checked|Any CPU + Checked|x64 = Checked|x64 + Checked|x86 = Checked|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|Any CPU.ActiveCfg = Checked|x64 - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|Any CPU.Build.0 = Checked|x64 - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x64.ActiveCfg = Checked|x64 - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x64.Build.0 = Checked|x64 - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x86.ActiveCfg = Checked|x86 - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x86.Build.0 = Checked|x86 {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Debug|Any CPU.ActiveCfg = Debug|x64 {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Debug|Any CPU.Build.0 = Debug|x64 {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Debug|x64.ActiveCfg = Debug|x64 @@ -75,9 +80,12 @@ Global {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Release|x64.Build.0 = Release|x64 {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Release|x86.ActiveCfg = Release|x86 {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Release|x86.Build.0 = Release|x86 - {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Checked|x64.ActiveCfg = Debug|Any CPU - {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Checked|x86.ActiveCfg = Debug|Any CPU + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|Any CPU.ActiveCfg = Checked|x64 + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|Any CPU.Build.0 = Checked|x64 + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x64.ActiveCfg = Checked|x64 + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x64.Build.0 = Checked|x64 + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x86.ActiveCfg = Checked|x86 + {F3DC1DF9-698A-4970-9A5E-AB946D6F763B}.Checked|x86.Build.0 = Checked|x86 {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Debug|Any CPU.Build.0 = Debug|Any CPU {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -90,9 +98,9 @@ Global {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Release|x64.Build.0 = Release|Any CPU {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Release|x86.ActiveCfg = Release|Any CPU {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Release|x86.Build.0 = Release|Any CPU - {5305244F-C52B-4772-A13D-C034213F3833}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {5305244F-C52B-4772-A13D-C034213F3833}.Checked|x64.ActiveCfg = Debug|Any CPU - {5305244F-C52B-4772-A13D-C034213F3833}.Checked|x86.ActiveCfg = Debug|Any CPU + {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Checked|x64.ActiveCfg = Debug|Any CPU + {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3}.Checked|x86.ActiveCfg = Debug|Any CPU {5305244F-C52B-4772-A13D-C034213F3833}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5305244F-C52B-4772-A13D-C034213F3833}.Debug|Any CPU.Build.0 = Debug|Any CPU {5305244F-C52B-4772-A13D-C034213F3833}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -105,9 +113,9 @@ Global {5305244F-C52B-4772-A13D-C034213F3833}.Release|x64.Build.0 = Release|Any CPU {5305244F-C52B-4772-A13D-C034213F3833}.Release|x86.ActiveCfg = Release|Any CPU {5305244F-C52B-4772-A13D-C034213F3833}.Release|x86.Build.0 = Release|Any CPU - {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Checked|x64.ActiveCfg = Debug|Any CPU - {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Checked|x86.ActiveCfg = Debug|Any CPU + {5305244F-C52B-4772-A13D-C034213F3833}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {5305244F-C52B-4772-A13D-C034213F3833}.Checked|x64.ActiveCfg = Debug|Any CPU + {5305244F-C52B-4772-A13D-C034213F3833}.Checked|x86.ActiveCfg = Debug|Any CPU {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Debug|Any CPU.Build.0 = Debug|Any CPU {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -120,9 +128,9 @@ Global {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Release|x64.Build.0 = Release|Any CPU {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Release|x86.ActiveCfg = Release|Any CPU {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Release|x86.Build.0 = Release|Any CPU - {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Checked|x64.ActiveCfg = Debug|Any CPU - {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Checked|x86.ActiveCfg = Debug|Any CPU + {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Checked|x64.ActiveCfg = Debug|Any CPU + {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5}.Checked|x86.ActiveCfg = Debug|Any CPU {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Debug|Any CPU.Build.0 = Debug|Any CPU {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -135,9 +143,9 @@ Global {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Release|x64.Build.0 = Release|Any CPU {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Release|x86.ActiveCfg = Release|Any CPU {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Release|x86.Build.0 = Release|Any CPU - {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Checked|x64.ActiveCfg = Debug|Any CPU - {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Checked|x86.ActiveCfg = Debug|Any CPU + {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Checked|x64.ActiveCfg = Debug|Any CPU + {0FCF2BA6-A5B3-4E1C-A49A-424E77602313}.Checked|x86.ActiveCfg = Debug|Any CPU {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Debug|Any CPU.Build.0 = Debug|Any CPU {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -150,9 +158,9 @@ Global {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Release|x64.Build.0 = Release|Any CPU {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Release|x86.ActiveCfg = Release|Any CPU {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Release|x86.Build.0 = Release|Any CPU - {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Checked|x64.ActiveCfg = Debug|Any CPU - {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Checked|x86.ActiveCfg = Debug|Any CPU + {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Checked|x64.ActiveCfg = Debug|Any CPU + {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02}.Checked|x86.ActiveCfg = Debug|Any CPU {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Debug|Any CPU.Build.0 = Debug|Any CPU {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -165,9 +173,9 @@ Global {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Release|x64.Build.0 = Release|Any CPU {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Release|x86.ActiveCfg = Release|Any CPU {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Release|x86.Build.0 = Release|Any CPU - {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Checked|x64.ActiveCfg = Debug|Any CPU - {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Checked|x86.ActiveCfg = Debug|Any CPU + {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Checked|x64.ActiveCfg = Debug|Any CPU + {F865C526-79F8-403B-B5E4-52A90ECE21E3}.Checked|x86.ActiveCfg = Debug|Any CPU {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Debug|Any CPU.Build.0 = Debug|Any CPU {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -180,9 +188,9 @@ Global {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Release|x64.Build.0 = Release|Any CPU {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Release|x86.ActiveCfg = Release|Any CPU {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Release|x86.Build.0 = Release|Any CPU - {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Checked|x64.ActiveCfg = Debug|Any CPU - {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Checked|x86.ActiveCfg = Debug|Any CPU + {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Checked|x64.ActiveCfg = Debug|Any CPU + {C3F9A601-07D8-43A3-A3CA-7A002358A102}.Checked|x86.ActiveCfg = Debug|Any CPU {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Debug|Any CPU.Build.0 = Debug|Any CPU {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -195,9 +203,9 @@ Global {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Release|x64.Build.0 = Release|Any CPU {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Release|x86.ActiveCfg = Release|Any CPU {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Release|x86.Build.0 = Release|Any CPU - {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Checked|x64.ActiveCfg = Debug|Any CPU - {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Checked|x86.ActiveCfg = Debug|Any CPU + {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Checked|x64.ActiveCfg = Debug|Any CPU + {BEBD7B5B-9544-42EB-B878-F009560CAAF4}.Checked|x86.ActiveCfg = Debug|Any CPU {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Debug|Any CPU.Build.0 = Debug|Any CPU {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -210,9 +218,9 @@ Global {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Release|x64.Build.0 = Release|Any CPU {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Release|x86.ActiveCfg = Release|Any CPU {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Release|x86.Build.0 = Release|Any CPU - {A404332F-CCAA-4E22-94C1-635F7F19176F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {A404332F-CCAA-4E22-94C1-635F7F19176F}.Checked|x64.ActiveCfg = Debug|Any CPU - {A404332F-CCAA-4E22-94C1-635F7F19176F}.Checked|x86.ActiveCfg = Debug|Any CPU + {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Checked|x64.ActiveCfg = Debug|Any CPU + {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D}.Checked|x86.ActiveCfg = Debug|Any CPU {A404332F-CCAA-4E22-94C1-635F7F19176F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A404332F-CCAA-4E22-94C1-635F7F19176F}.Debug|Any CPU.Build.0 = Debug|Any CPU {A404332F-CCAA-4E22-94C1-635F7F19176F}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -225,24 +233,24 @@ Global {A404332F-CCAA-4E22-94C1-635F7F19176F}.Release|x64.Build.0 = Release|Any CPU {A404332F-CCAA-4E22-94C1-635F7F19176F}.Release|x86.ActiveCfg = Release|Any CPU {A404332F-CCAA-4E22-94C1-635F7F19176F}.Release|x86.Build.0 = Release|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x64.ActiveCfg = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x86.ActiveCfg = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|Any CPU.Build.0 = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x64.ActiveCfg = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x64.Build.0 = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x86.ActiveCfg = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x86.Build.0 = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|Any CPU.ActiveCfg = Release|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|Any CPU.Build.0 = Release|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x64.ActiveCfg = Release|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x64.Build.0 = Release|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x86.ActiveCfg = Release|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x86.Build.0 = Release|Any CPU - {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Checked|x64.ActiveCfg = Debug|Any CPU - {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Checked|x86.ActiveCfg = Debug|Any CPU + {A404332F-CCAA-4E22-94C1-635F7F19176F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {A404332F-CCAA-4E22-94C1-635F7F19176F}.Checked|x64.ActiveCfg = Debug|Any CPU + {A404332F-CCAA-4E22-94C1-635F7F19176F}.Checked|x86.ActiveCfg = Debug|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Debug|x64.ActiveCfg = Debug|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Debug|x64.Build.0 = Debug|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Debug|x86.ActiveCfg = Debug|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Debug|x86.Build.0 = Debug|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Release|Any CPU.Build.0 = Release|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Release|x64.ActiveCfg = Release|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Release|x64.Build.0 = Release|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Release|x86.ActiveCfg = Release|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Release|x86.Build.0 = Release|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Checked|x64.ActiveCfg = Debug|Any CPU + {6E353933-8CBD-467D-8FF1-00133C3F2036}.Checked|x86.ActiveCfg = Debug|Any CPU {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Debug|Any CPU.Build.0 = Debug|Any CPU {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -255,9 +263,9 @@ Global {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Release|x64.Build.0 = Release|Any CPU {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Release|x86.ActiveCfg = Release|Any CPU {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Release|x86.Build.0 = Release|Any CPU - {09129981-6B0D-44C7-9F0A-AD2426106332}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {09129981-6B0D-44C7-9F0A-AD2426106332}.Checked|x64.ActiveCfg = Debug|Any CPU - {09129981-6B0D-44C7-9F0A-AD2426106332}.Checked|x86.ActiveCfg = Debug|Any CPU + {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Checked|x64.ActiveCfg = Debug|Any CPU + {68D868F6-1311-47A2-9DDE-22B64B5FF85E}.Checked|x86.ActiveCfg = Debug|Any CPU {09129981-6B0D-44C7-9F0A-AD2426106332}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {09129981-6B0D-44C7-9F0A-AD2426106332}.Debug|Any CPU.Build.0 = Debug|Any CPU {09129981-6B0D-44C7-9F0A-AD2426106332}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -270,9 +278,9 @@ Global {09129981-6B0D-44C7-9F0A-AD2426106332}.Release|x64.Build.0 = Release|Any CPU {09129981-6B0D-44C7-9F0A-AD2426106332}.Release|x86.ActiveCfg = Release|Any CPU {09129981-6B0D-44C7-9F0A-AD2426106332}.Release|x86.Build.0 = Release|Any CPU - {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Checked|x64.ActiveCfg = Debug|Any CPU - {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Checked|x86.ActiveCfg = Debug|Any CPU + {09129981-6B0D-44C7-9F0A-AD2426106332}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {09129981-6B0D-44C7-9F0A-AD2426106332}.Checked|x64.ActiveCfg = Debug|Any CPU + {09129981-6B0D-44C7-9F0A-AD2426106332}.Checked|x86.ActiveCfg = Debug|Any CPU {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Debug|Any CPU.Build.0 = Debug|Any CPU {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -285,9 +293,9 @@ Global {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Release|x64.Build.0 = Release|Any CPU {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Release|x86.ActiveCfg = Release|Any CPU {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Release|x86.Build.0 = Release|Any CPU - {649CA543-288D-4A8B-AED3-E470DC7FF866}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {649CA543-288D-4A8B-AED3-E470DC7FF866}.Checked|x64.ActiveCfg = Debug|Any CPU - {649CA543-288D-4A8B-AED3-E470DC7FF866}.Checked|x86.ActiveCfg = Debug|Any CPU + {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Checked|x64.ActiveCfg = Debug|Any CPU + {BF66C27C-D1B1-4F86-A1E1-EDC63584E818}.Checked|x86.ActiveCfg = Debug|Any CPU {649CA543-288D-4A8B-AED3-E470DC7FF866}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {649CA543-288D-4A8B-AED3-E470DC7FF866}.Debug|Any CPU.Build.0 = Debug|Any CPU {649CA543-288D-4A8B-AED3-E470DC7FF866}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -300,28 +308,13 @@ Global {649CA543-288D-4A8B-AED3-E470DC7FF866}.Release|x64.Build.0 = Release|Any CPU {649CA543-288D-4A8B-AED3-E470DC7FF866}.Release|x86.ActiveCfg = Release|Any CPU {649CA543-288D-4A8B-AED3-E470DC7FF866}.Release|x86.Build.0 = Release|Any CPU + {649CA543-288D-4A8B-AED3-E470DC7FF866}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {649CA543-288D-4A8B-AED3-E470DC7FF866}.Checked|x64.ActiveCfg = Debug|Any CPU + {649CA543-288D-4A8B-AED3-E470DC7FF866}.Checked|x86.ActiveCfg = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {F3DC1DF9-698A-4970-9A5E-AB946D6F763B} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {0BD22D2A-C12C-4641-8F12-73D21AAAFBA3} = {12B0E17A-6957-425E-98E1-5F245010893A} - {5305244F-C52B-4772-A13D-C034213F3833} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} - {4C5DDB34-2F67-40F2-9D59-A3CEBAE35BE5} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {0FCF2BA6-A5B3-4E1C-A49A-424E77602313} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {0AE3ABFE-6284-4119-A5DC-1844E6AB8E02} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {F865C526-79F8-403B-B5E4-52A90ECE21E3} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} - {C3F9A601-07D8-43A3-A3CA-7A002358A102} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {BEBD7B5B-9544-42EB-B878-F009560CAAF4} = {12B0E17A-6957-425E-98E1-5F245010893A} - {7AB121D2-0AAC-48E0-A834-6E220ECFEC4D} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {A404332F-CCAA-4E22-94C1-635F7F19176F} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} - {04BA3E3C-6979-4792-B19E-C797AD607F42} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {68D868F6-1311-47A2-9DDE-22B64B5FF85E} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {09129981-6B0D-44C7-9F0A-AD2426106332} = {2FBD1B5D-0E5B-4D8C-A228-48B428725D67} - {BF66C27C-D1B1-4F86-A1E1-EDC63584E818} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} - {649CA543-288D-4A8B-AED3-E470DC7FF866} = {9A105AFB-AA36-46E1-BC68-6724F5644D0C} - EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C1241AC3-6D55-48A6-9502-C46F806889AE} EndGlobalSection diff --git a/src/libraries/System.Private.Xml/src/ILLink/ILLink.Suppressions.xml b/src/libraries/System.Private.Xml/src/ILLink/ILLink.Suppressions.xml deleted file mode 100644 index 40dbf4ac889e2b..00000000000000 --- a/src/libraries/System.Private.Xml/src/ILLink/ILLink.Suppressions.xml +++ /dev/null @@ -1,317 +0,0 @@ - - - - - ILLink - IL2026 - member - M:System.Xml.Serialization.ReflectionAwareILGen.ILGenForCreateInstance(System.Xml.Serialization.CodeGenerator,System.Type,System.Type,System.Boolean) - - - ILLink - IL2026 - member - M:System.Xml.Serialization.TempAssembly.GetTypeFromAssembly(System.Reflection.Assembly,System.String) - - - ILLink - IL2026 - member - M:System.Xml.Serialization.TempAssembly.LoadGeneratedAssembly(System.Type,System.String,System.Xml.Serialization.XmlSerializerImplementation@) - - - ILLink - IL2026 - member - M:System.Xml.Serialization.XmlAttributes.get_IgnoreAttribute - - - ILLink - IL2057 - member - M:System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteCheckDefault(System.Xml.Serialization.TypeMapping,System.String,System.Object,System.Boolean) - - - ILLink - IL2060 - member - M:System.Xml.Serialization.ReflectionXmlSerializationReader.GetSetMemberValueDelegate(System.Object,System.String) - - - ILLink - IL2067 - member - M:System.Xml.Serialization.ReflectionXmlSerializationReader.ReflectionCreateObject(System.Type) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.Compiler.AddImport(System.Type,System.Collections.Hashtable) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.ReflectionAwareCodeGen.WriteMappingInfo(System.Xml.Serialization.TypeMapping,System.String,System.Type) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.ReflectionAwareCodeGen.WriteMemberInfo(System.Type,System.String,System.String,System.String) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.ReflectionAwareILGen.ILGenForCreateInstance(System.Xml.Serialization.CodeGenerator,System.Type,System.Boolean,System.Boolean) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.ReflectionAwareILGen.ILGenForCreateInstance(System.Xml.Serialization.CodeGenerator,System.Type,System.Type,System.Boolean) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.ReflectionXmlSerializationHelper.GetMember(System.Type,System.String) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.ReflectionXmlSerializationReader.AddObjectsIntoTargetCollection(System.Object,System.Collections.Generic.List{System.Object},System.Type) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.ReflectionXmlSerializationReader.GetDefaultConstructor(System.Type) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.SourceInfo.ConvertNullableValue(System.Type,System.Type) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.TempAssembly.GetMethodFromType(System.Type,System.String) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.TypeExtensions.TryConvertTo(System.Type,System.Object,System.Object@) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.TypeScope.GetConstructorFlags(System.Type,System.Exception@) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.TypeScope.GetDefaultIndexer(System.Type,System.String) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.TypeScope.GetEnumeratorElementType(System.Type,System.Xml.Serialization.TypeFlags@) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.TypeScope.ShouldBeReplaced(System.Reflection.MemberInfo,System.Type,System.Reflection.MemberInfo@) - - - ILLink - IL2070 - member - M:System.Xml.Serialization.XmlReflectionImporter.GetMethodFromSchemaProvider(System.Xml.Serialization.XmlSchemaProviderAttribute,System.Type) - - - ILLink - IL2072 - member - M:System.Xml.Serialization.ReflectionXmlSerializationReader.WriteNullableMethod(System.Xml.Serialization.NullableMapping,System.Boolean,System.String) - - - ILLink - IL2072 - member - M:System.Xml.Serialization.TempAssembly.get_Contract - - - ILLink - IL2072 - member - M:System.Xml.Serialization.TempAssembly.LoadGeneratedAssembly(System.Type,System.String,System.Xml.Serialization.XmlSerializerImplementation@) - - - ILLink - IL2072 - member - M:System.Xml.Serialization.XmlSerializationILGen.GenerateTypedSerializer(System.String,System.String,System.Xml.Serialization.XmlMapping,System.Xml.Serialization.CodeIdentifiers,System.String,System.String,System.String) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.CodeGenerator.GetPropertyMethodFromBaseType(System.Reflection.PropertyInfo,System.Boolean) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.EnumModel.get_Constants - - - ILLink - IL2075 - member - M:System.Xml.Serialization.FieldModel.#ctor(System.Reflection.MemberInfo,System.Type,System.Xml.Serialization.TypeDesc) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.ReflectionAwareILGen.ILGenForCreateInstance(System.Xml.Serialization.CodeGenerator,System.Type,System.Type,System.Boolean) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.ReflectionAwareILGen.WriteLocalDecl(System.String,System.Xml.Serialization.SourceInfo) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.ReflectionXmlSerializationHelper.GetMember(System.Type,System.String) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.ReflectionXmlSerializationReader.WriteLiteralStructMethod(System.Xml.Serialization.StructMapping,System.Boolean,System.Boolean,System.String) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteStructMethod(System.Xml.Serialization.StructMapping,System.String,System.String,System.Object,System.Boolean,System.Boolean) - - - ILLink - IL2075 - member - T:System.Xml.Serialization.ReflectionXmlSerializationReader - - - ILLink - IL2075 - member - M:System.Xml.Serialization.SourceInfo.InternalLoad(System.Type,System.Boolean) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.StructModel.GetMemberInfos - - - ILLink - IL2075 - member - M:System.Xml.Serialization.TypeScope.GetEnumeratorElementType(System.Type,System.Xml.Serialization.TypeFlags@) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.XmlReflectionImporter.GetChoiceIdentifierType(System.Xml.Serialization.XmlChoiceIdentifierAttribute,System.Xml.Serialization.StructModel,System.Boolean,System.String) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.XmlSerializationILGen.GenerateBaseSerializer(System.String,System.String,System.String,System.Xml.Serialization.CodeIdentifiers) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.XmlSerializationILGen.GenerateGetSerializer(System.Collections.Generic.Dictionary{System.String,System.String},System.Xml.Serialization.XmlMapping[],System.Reflection.Emit.TypeBuilder) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.XmlSerializationILGen.GenerateSerializerContract(System.String,System.Xml.Serialization.XmlMapping[],System.Type[],System.String,System.String[],System.String,System.String[],System.Collections.Generic.Dictionary{System.String,System.String}) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.XmlSerializationILGen.GenerateTypedSerializer(System.String,System.String,System.Xml.Serialization.XmlMapping,System.Xml.Serialization.CodeIdentifiers,System.String,System.String,System.String) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.XmlSerializationILGen.GenerateTypedSerializers(System.Collections.Generic.Dictionary{System.String,System.String},System.Reflection.Emit.TypeBuilder) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.XmlSerializationReaderILGen.WriteAttributes(System.Xml.Serialization.XmlSerializationReaderILGen.Member[],System.Xml.Serialization.XmlSerializationReaderILGen.Member,System.String,System.Reflection.Emit.LocalBuilder) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.XmlSerializationReaderILGen.WriteSourceEnd(System.String,System.Type,System.Type) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.XmlSerializationWriterILGen.WriteArrayItems(System.Xml.Serialization.ElementAccessor[],System.Xml.Serialization.TextAccessor,System.Xml.Serialization.ChoiceIdentifierAccessor,System.Xml.Serialization.TypeDesc,System.String,System.String) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.XmlSerializationWriterILGen.WriteCheckDefault(System.Xml.Serialization.SourceInfo,System.Object,System.Boolean) - - - ILLink - IL2075 - member - M:System.Xml.Serialization.XmlSerializationWriterILGen.WriteElement(System.Xml.Serialization.SourceInfo,System.Xml.Serialization.ElementAccessor,System.String,System.Boolean) - - - ILLink - IL2077 - member - M:System.Xml.Serialization.SerializableMapping.RetrieveSerializableSchema - - - ILLink - IL2080 - member - M:System.Xml.Serialization.XmlSerializationWriterILGen.WriteText(System.Xml.Serialization.SourceInfo,System.Xml.Serialization.TextAccessor) - - - diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs b/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs index 4386f04fa34b12..13cacb2bfa5792 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs @@ -89,13 +89,11 @@ public XmlSchema() { } return parser.XmlSchema; } - [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(Stream stream) { Write(stream, null); } - [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(Stream stream, XmlNamespaceManager? namespaceManager) { XmlTextWriter xmlWriter = new XmlTextWriter(stream, null); @@ -103,13 +101,11 @@ public void Write(Stream stream, XmlNamespaceManager? namespaceManager) Write(xmlWriter, namespaceManager); } - [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(TextWriter writer) { Write(writer, null); } - [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(TextWriter writer, XmlNamespaceManager? namespaceManager) { XmlTextWriter xmlWriter = new XmlTextWriter(writer); @@ -117,13 +113,15 @@ public void Write(TextWriter writer, XmlNamespaceManager? namespaceManager) Write(xmlWriter, namespaceManager); } - [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(XmlWriter writer) { Write(writer, null); } - [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] + [DynamicDependency(TrimmerConstants.PublicMembers, typeof(XmlSchema))] + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", + Justification = "Supressing warning since the right members of XmlSchema will be preserved by the " + + "DynamicDependency attribute.")] public void Write(XmlWriter writer, XmlNamespaceManager? namespaceManager) { XmlSerializer serializer = new XmlSerializer(typeof(XmlSchema)); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/TypeExtensions.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/TypeExtensions.cs index 9685b64ebdd0d3..77b150b7626b32 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/TypeExtensions.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/TypeExtensions.cs @@ -12,8 +12,9 @@ internal static class TypeExtensions private const string ImplicitCastOperatorName = "op_Implicit"; public static bool TryConvertTo( - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods - | DynamicallyAccessedMemberTypes.NonPublicMethods)] this Type targetType, object? data, out object? returnValue) + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] + this Type targetType, + object? data, out object? returnValue) { if (targetType == null) { diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlAttributes.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlAttributes.cs index 24587b0b7153d3..0a0cbd06498674 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlAttributes.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlAttributes.cs @@ -3,7 +3,6 @@ using System.Reflection; using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; namespace System.Xml.Serialization { diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriterILGen.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriterILGen.cs index c7d39ddd5a1ff2..46eda857550cba 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriterILGen.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriterILGen.cs @@ -1400,8 +1400,9 @@ private void WriteAttribute(SourceInfo source, AttributeAccessor attribute, stri } private static object? GetConvertedDefaultValue( - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods - | DynamicallyAccessedMemberTypes.NonPublicMethods)] Type? targetType, object? rawDefaultValue) + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] + Type? targetType, + object? rawDefaultValue) { if (targetType == null) { diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs index 00426fda96b804..fa5282eb4a42c1 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs @@ -150,7 +150,7 @@ private static XmlSerializerNamespaces DefaultNamespaces } } - // Linker warning messages + // Trimmer warning messages internal const string TrimSerializationWarning = "Members from serialized types may be trimmed if not referenced directly"; private const string s_trimDeserializationWarning = "Members from deserialized types may be trimmed if not referenced directly"; diff --git a/src/libraries/System.Private.Xml/tests/TrimmingTests/System.Private.Xml.TrimmingTests.proj b/src/libraries/System.Private.Xml/tests/TrimmingTests/System.Private.Xml.TrimmingTests.proj index 44cc404e03bb38..89084f6e8620a5 100644 --- a/src/libraries/System.Private.Xml/tests/TrimmingTests/System.Private.Xml.TrimmingTests.proj +++ b/src/libraries/System.Private.Xml/tests/TrimmingTests/System.Private.Xml.TrimmingTests.proj @@ -3,6 +3,7 @@ + diff --git a/src/libraries/System.Private.Xml/tests/TrimmingTests/XmlSchema.Write.cs b/src/libraries/System.Private.Xml/tests/TrimmingTests/XmlSchema.Write.cs new file mode 100644 index 00000000000000..b70b279eed33ff --- /dev/null +++ b/src/libraries/System.Private.Xml/tests/TrimmingTests/XmlSchema.Write.cs @@ -0,0 +1,50 @@ +using System; +using System.IO; +using System.Xml; +using System.Xml.Schema; + +class XMLSchemaExamples +{ + public static int Main() + { + + XmlSchema schema = new XmlSchema(); + + // + XmlSchemaElement elementCat = new XmlSchemaElement(); + schema.Items.Add(elementCat); + elementCat.Name = "cat"; + elementCat.SchemaTypeName = new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema"); + + // + XmlSchemaElement elementDog = new XmlSchemaElement(); + schema.Items.Add(elementDog); + elementDog.Name = "dog"; + elementDog.SchemaTypeName = new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema"); + + // + XmlSchemaElement elementRedDog = new XmlSchemaElement(); + schema.Items.Add(elementRedDog); + elementRedDog.Name = "redDog"; + elementRedDog.SubstitutionGroup = new XmlQualifiedName("dog"); + + // + XmlSchemaElement elementBrownDog = new XmlSchemaElement(); + schema.Items.Add(elementBrownDog); + elementBrownDog.Name = "brownDog"; + elementBrownDog.SubstitutionGroup = new XmlQualifiedName("dog"); + + // + XmlSchemaElement elementPets = new XmlSchemaElement(); + schema.Items.Add(elementPets); + elementPets.Name = "pets"; + + using (var stream = new MemoryStream()) + using (var writer = XmlWriter.Create(stream)) + { + schema.Write(writer, null); + } + + return 100; + } +} \ No newline at end of file diff --git a/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs b/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs index de6c76d5e58e6e..479251eab45154 100644 --- a/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs +++ b/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs @@ -1479,17 +1479,11 @@ public void Compile(System.Xml.Schema.ValidationEventHandler? validationEventHan public static System.Xml.Schema.XmlSchema? Read(System.IO.Stream stream, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } public static System.Xml.Schema.XmlSchema? Read(System.IO.TextReader reader, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } public static System.Xml.Schema.XmlSchema? Read(System.Xml.XmlReader reader, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.IO.Stream stream) { } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.IO.Stream stream, System.Xml.XmlNamespaceManager? namespaceManager) { } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.IO.TextWriter writer) { } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.IO.TextWriter writer, System.Xml.XmlNamespaceManager? namespaceManager) { } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.Xml.XmlWriter writer) { } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.Xml.XmlWriter writer, System.Xml.XmlNamespaceManager? namespaceManager) { } } public partial class XmlSchemaAll : System.Xml.Schema.XmlSchemaGroupBase diff --git a/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs b/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs index 75ae02042b73f7..cfe776222b80fe 100644 --- a/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs +++ b/src/libraries/System.Xml.XmlSerializer/ref/System.Xml.XmlSerializer.cs @@ -242,7 +242,6 @@ public void Add(System.Type type, System.Xml.Serialization.XmlAttributes attribu public partial class XmlAttributes { public XmlAttributes() { } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public XmlAttributes(System.Reflection.ICustomAttributeProvider provider) { } public System.Xml.Serialization.XmlAnyAttributeAttribute? XmlAnyAttribute { get { throw null; } set { } } public System.Xml.Serialization.XmlAnyElementAttributes XmlAnyElements { get { throw null; } } From 77d1ef53c62c6c5c4e1bf63290facde5c8605f9c Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Tue, 30 Mar 2021 14:24:30 -0700 Subject: [PATCH 10/12] More PR Feedback --- .../src/System/Xml/Schema/XmlSchema.cs | 12 ++++++++--- .../Serialization/XmlReflectionImporter.cs | 4 ++-- .../tests/TrimmingTests/XmlSchema.Write.cs | 20 +++++++++++++++---- .../ref/System.Xml.ReaderWriter.cs | 6 ++++++ 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs b/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs index 13cacb2bfa5792..68e372c8901cf1 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Schema/XmlSchema.cs @@ -89,11 +89,13 @@ public XmlSchema() { } return parser.XmlSchema; } + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(Stream stream) { Write(stream, null); } + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(Stream stream, XmlNamespaceManager? namespaceManager) { XmlTextWriter xmlWriter = new XmlTextWriter(stream, null); @@ -101,11 +103,13 @@ public void Write(Stream stream, XmlNamespaceManager? namespaceManager) Write(xmlWriter, namespaceManager); } + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(TextWriter writer) { Write(writer, null); } + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(TextWriter writer, XmlNamespaceManager? namespaceManager) { XmlTextWriter xmlWriter = new XmlTextWriter(writer); @@ -113,15 +117,17 @@ public void Write(TextWriter writer, XmlNamespaceManager? namespaceManager) Write(xmlWriter, namespaceManager); } + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(XmlWriter writer) { Write(writer, null); } [DynamicDependency(TrimmerConstants.PublicMembers, typeof(XmlSchema))] - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", - Justification = "Supressing warning since the right members of XmlSchema will be preserved by the " + - "DynamicDependency attribute.")] + // This method may be safe given the above Dynamic Dependency but it is not yet fully understood if just preserving + // all of XmlSchema public members is enough in order to be safe in all cases, so we have opted to keep the RequiresUnreferencedCode + // attribute for now. This can be removed in the future if it is determined that the above is enough for all scenarios to be trim-safe. + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public void Write(XmlWriter writer, XmlNamespaceManager? namespaceManager) { XmlSerializer serializer = new XmlSerializer(typeof(XmlSchema)); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs index 01912a8d3a1b57..e84d5994f776b6 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlReflectionImporter.cs @@ -1321,7 +1321,7 @@ private MembersMapping ImportMembersMapping(XmlReflectionMember[] xmlReflectionM return members; } - [RequiresUnreferencedCode("calls .ctor")] + [RequiresUnreferencedCode("Calls TypeScope.GetTypeDesc(Type) and XmlReflectionImporter.ImportAccessorMapping both of which RequireUnreferencedCode")] private MemberMapping ImportMemberMapping(XmlReflectionMember xmlReflectionMember, string? ns, XmlReflectionMember[] xmlReflectionMembers, bool rpc, bool openModel, RecursionLimiter limiter) { XmlSchemaForm form = rpc ? XmlSchemaForm.Unqualified : XmlSchemaForm.Qualified; @@ -2254,7 +2254,7 @@ private static ElementAccessor CreateElementAccessor(TypeMapping mapping, string } // will create a shallow type mapping for a top-level type - [RequiresUnreferencedCode("calls .ctor")] + [RequiresUnreferencedCode("Calls TypeScope.GetTypeDesc(Type) which has RequiresUnreferencedCode")] internal static XmlTypeMapping GetTopLevelMapping(Type type, string? defaultNamespace) { defaultNamespace = defaultNamespace ?? string.Empty; diff --git a/src/libraries/System.Private.Xml/tests/TrimmingTests/XmlSchema.Write.cs b/src/libraries/System.Private.Xml/tests/TrimmingTests/XmlSchema.Write.cs index b70b279eed33ff..51cda4a90c312a 100644 --- a/src/libraries/System.Private.Xml/tests/TrimmingTests/XmlSchema.Write.cs +++ b/src/libraries/System.Private.Xml/tests/TrimmingTests/XmlSchema.Write.cs @@ -1,5 +1,9 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + using System; using System.IO; +using System.Text; using System.Xml; using System.Xml.Schema; @@ -9,6 +13,7 @@ public static int Main() { XmlSchema schema = new XmlSchema(); + string expectedSchema = @"???"; // XmlSchemaElement elementCat = new XmlSchemaElement(); @@ -40,11 +45,18 @@ public static int Main() elementPets.Name = "pets"; using (var stream = new MemoryStream()) - using (var writer = XmlWriter.Create(stream)) { - schema.Write(writer, null); + using (var writer = XmlWriter.Create(stream)) + { + schema.Write(writer); + } + + var str = Encoding.ASCII.GetString(stream.ToArray()); + if (str.Equals(expectedSchema, StringComparison.OrdinalIgnoreCase)) + { + return 100; + } + return -1; } - - return 100; } } \ No newline at end of file diff --git a/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs b/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs index 479251eab45154..de6c76d5e58e6e 100644 --- a/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs +++ b/src/libraries/System.Xml.ReaderWriter/ref/System.Xml.ReaderWriter.cs @@ -1479,11 +1479,17 @@ public void Compile(System.Xml.Schema.ValidationEventHandler? validationEventHan public static System.Xml.Schema.XmlSchema? Read(System.IO.Stream stream, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } public static System.Xml.Schema.XmlSchema? Read(System.IO.TextReader reader, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } public static System.Xml.Schema.XmlSchema? Read(System.Xml.XmlReader reader, System.Xml.Schema.ValidationEventHandler? validationEventHandler) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.IO.Stream stream) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.IO.Stream stream, System.Xml.XmlNamespaceManager? namespaceManager) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.IO.TextWriter writer) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.IO.TextWriter writer, System.Xml.XmlNamespaceManager? namespaceManager) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.Xml.XmlWriter writer) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Members from serialized types may be trimmed if not referenced directly")] public void Write(System.Xml.XmlWriter writer, System.Xml.XmlNamespaceManager? namespaceManager) { } } public partial class XmlSchemaAll : System.Xml.Schema.XmlSchemaGroupBase From 58dd53fd9d48aef5b1203fe45622a4d378bd90e5 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Thu, 1 Apr 2021 11:04:55 -0700 Subject: [PATCH 11/12] More PR Feedback --- .../ReflectionXmlSerializationReader.cs | 81 +++++++++---------- .../System/Xml/Serialization/XmlSerializer.cs | 14 ++-- .../tests/TrimmingTests/XmlSchema.Write.cs | 6 +- 3 files changed, 50 insertions(+), 51 deletions(-) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs index 439c732080c736..bb4a7ee03ffff3 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs @@ -12,24 +12,23 @@ using System.Xml.Extensions; using System.Xml.Schema; +// UnconditionalSuppressMessage that specify a Target need to be at the assembly or module level for now. Also, +// they won't consider Target unless you also specify Scope to be either "member" or "type" +[assembly: UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:MakeGenericMethod", + Target = "M:System.Xml.Serialization.ReflectionXmlSerializationReader.#cctor", + Justification = "The reason why this warns is because the two static properties call GetTypeDesc() which internally will call " + + "ImportTypeDesc() when the passed in type is not considered a primitive type. That said, for both properties here we are passing in string " + + "and XmlQualifiedName which are considered primitive, so they are trim safe.", + Scope = "member")] + namespace System.Xml.Serialization { internal delegate void UnknownNodeAction(object? o); internal sealed class ReflectionXmlSerializationReader : XmlSerializationReader { - private static readonly TypeDesc StringTypeDesc; - private static readonly TypeDesc QnameTypeDesc; - - [RequiresUnreferencedCode("Calls GetTypeDesc")] - // Initialize in static constructor to suppress RequiresUnreferencedCode warning -#pragma warning disable CA1810 - static ReflectionXmlSerializationReader() - { - StringTypeDesc = (new TypeScope()).GetTypeDesc(typeof(string)); - QnameTypeDesc = (new TypeScope()).GetTypeDesc(typeof(XmlQualifiedName)); - } -#pragma warning restore CA1810 + private static TypeDesc StringTypeDesc { get; set; } = (new TypeScope()).GetTypeDesc(typeof(string)); + private static TypeDesc QnameTypeDesc { get; set; } = (new TypeScope()).GetTypeDesc(typeof(XmlQualifiedName)); private readonly XmlMapping _mapping; @@ -62,7 +61,7 @@ protected override void InitIDs() { } - [RequiresUnreferencedCode("calls GenerateTypeElement")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] public object? ReadObject() { XmlMapping xmlMapping = _mapping; @@ -86,7 +85,7 @@ protected override void InitIDs() } } - [RequiresUnreferencedCode("calls GenerateEncodedMembersElement")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private object GenerateMembersElement(XmlMembersMapping xmlMembersMapping) { if (xmlMembersMapping.Accessor.IsSoap) @@ -99,7 +98,7 @@ private object GenerateMembersElement(XmlMembersMapping xmlMembersMapping) } } - [RequiresUnreferencedCode("calls GenerateLiteralMembersElementInternal")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private object GenerateLiteralMembersElement(XmlMembersMapping xmlMembersMapping) { ElementAccessor element = xmlMembersMapping.Accessor; @@ -143,7 +142,7 @@ private object GenerateLiteralMembersElement(XmlMembersMapping xmlMembersMapping return p; } - [RequiresUnreferencedCode("calls WriteMemberElements")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private bool GenerateLiteralMembersElementInternal(MemberMapping[] mappings, bool hasWrapperElement, object?[] p) { Member? anyText = null; @@ -328,7 +327,7 @@ private void InitializeValueTypes(object?[] p, MemberMapping[] mappings) } } - [RequiresUnreferencedCode("calls ReadReferencedElement")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private object GenerateEncodedMembersElement(XmlMembersMapping xmlMembersMapping) { ElementAccessor element = xmlMembersMapping.Accessor; @@ -471,7 +470,7 @@ void Wrapper(object? _) return p; } - [RequiresUnreferencedCode("calls ReadReferencedElements")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private object? GenerateTypeElement(XmlTypeMapping xmlTypeMapping) { ElementAccessor element = xmlTypeMapping.Accessor; @@ -501,7 +500,7 @@ void Wrapper(object? _) return o; } - [RequiresUnreferencedCode("calls WriteMemberElementsCheckType")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private void WriteMemberElements(Member[] expectedMembers, UnknownNodeAction elementElseAction, UnknownNodeAction elseAction, Member? anyElement, Member? anyText, Fixup? fixup = null, List? checkTypeHrefsSource = null) { bool checkType = checkTypeHrefsSource != null; @@ -531,7 +530,7 @@ private void WriteMemberElements(Member[] expectedMembers, UnknownNodeAction ele } } - [RequiresUnreferencedCode("calls ReadReferencingElement")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private void WriteMemberElementsCheckType(List checkTypeHrefsSource) { object? RefElememnt = ReadReferencingElement(null, null, true, out string? refElemId); @@ -555,7 +554,7 @@ private void ProcessUnknownNode(UnknownNodeAction action) action?.Invoke(null); } - [RequiresUnreferencedCode("calls WriteMemberElements")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private void WriteMembers(ref object? o, Member[] members, UnknownNodeAction elementElseAction, UnknownNodeAction elseAction, Member? anyElement, Member? anyText) { Reader.MoveToContent(); @@ -630,7 +629,7 @@ private static void AddObjectsIntoTargetCollection(object targetCollection, List private static readonly ConcurrentDictionary<(Type, string), ReflectionXmlSerializationReaderHelper.SetMemberValueDelegate> s_setMemberValueDelegateCache = new ConcurrentDictionary<(Type, string), ReflectionXmlSerializationReaderHelper.SetMemberValueDelegate>(); - [RequiresUnreferencedCode("calls GetType on object")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private static ReflectionXmlSerializationReaderHelper.SetMemberValueDelegate GetSetMemberValueDelegate(object o, string memberName) { Debug.Assert(o != null, "Object o should not be null"); @@ -678,7 +677,7 @@ private static ReflectionXmlSerializationReaderHelper.SetMemberValueDelegate Get throw new InvalidOperationException(SR.XmlInternalError); } - [RequiresUnreferencedCode("calls WritePrimitive")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private bool WriteMemberText(Member anyText) { object? value; @@ -741,7 +740,7 @@ private bool IsSequence(Member[] members) return false; } - [RequiresUnreferencedCode("calls WriteElement")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private void WriteMemberElementsIf(Member[] expectedMembers, Member? anyElementMember, UnknownNodeAction elementElseAction, Fixup? fixup = null, CheckTypeSource? checkTypeSource = null) { bool checkType = checkTypeSource != null; @@ -850,7 +849,7 @@ private void WriteMemberElementsIf(Member[] expectedMembers, Member? anyElementM } } - [RequiresUnreferencedCode("calls ReadReferencingElement")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private object? WriteElement(ElementAccessor element, bool checkSpecified, bool checkForNull, bool readOnly, string? defaultNamespace, int fixupIndex = -1, int elementIndex = -1, Fixup? fixup = null, Member? member = null) { object? value = null; @@ -1023,7 +1022,7 @@ private void WriteMemberElementsIf(Member[] expectedMembers, Member? anyElementM return value; } - [RequiresUnreferencedCode("calls WriteStructMethod")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private XmlSerializationReadCallback CreateXmlSerializationReadCallback(TypeMapping mapping) { if (mapping is StructMapping structMapping) @@ -1084,7 +1083,7 @@ private static bool IsWildcard(SpecialMapping mapping) return mapping.TypeDesc!.CanBeElementValue; } - [RequiresUnreferencedCode("calls ReadReferencingElement")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private object? WriteArray(ArrayMapping arrayMapping, bool readOnly, bool isNullable, string? defaultNamespace, int fixupIndex = -1, Fixup? fixup = null, Member? member = null) { object? o = null; @@ -1176,7 +1175,7 @@ private static bool IsWildcard(SpecialMapping mapping) return o; } - [RequiresUnreferencedCode("XmlSerializationReader methods have RequiresUnreferencedCode")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private object WritePrimitive(TypeMapping mapping, Func readFunc, object funcState) { if (mapping is EnumMapping enumMapping) @@ -1238,7 +1237,7 @@ private object WritePrimitive(TypeMapping mapping, Func readFunc } } - [RequiresUnreferencedCode("calls WriteEncodedStructMethod")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private object? WriteStructMethod(StructMapping mapping, bool isNullable, bool checkType, string? defaultNamespace) { if (mapping.IsSoap) @@ -1247,7 +1246,7 @@ private object WritePrimitive(TypeMapping mapping, Func readFunc return WriteLiteralStructMethod(mapping, isNullable, checkType, defaultNamespace); } - [RequiresUnreferencedCode("calls WriteElement")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private object? WriteNullableMethod(NullableMapping nullableMapping, bool checkType, string? defaultNamespace) { object? o = Activator.CreateInstance(nullableMapping.TypeDesc!.Type!); @@ -1340,7 +1339,7 @@ private Hashtable WriteHashtable(EnumMapping mapping, string name) type.IsValueType ? null : type.GetConstructor(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, Type.EmptyTypes, null); - [RequiresUnreferencedCode("calls WriteMemberElements")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private object? WriteEncodedStructMethod(StructMapping structMapping) { if (structMapping.TypeDesc!.IsRoot) @@ -1460,7 +1459,7 @@ private XmlSerializationFixupCallback CreateWriteFixupMethod(Member[] members) }; } - [RequiresUnreferencedCode("calls GetSetMemberValueDelegate")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private void WriteAddCollectionFixup(object o, Member member, object memberValue) { TypeDesc typeDesc = member.Mapping.TypeDesc!; @@ -1471,7 +1470,7 @@ private void WriteAddCollectionFixup(object o, Member member, object memberValue WriteAddCollectionFixup(getSource, setSource, memberValue, typeDesc, readOnly); } - [RequiresUnreferencedCode("Calls GetCreateCollectionOfObjectsCallback")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private object? WriteAddCollectionFixup(Func getSource, Action setSource, object memberValue, TypeDesc typeDesc, bool readOnly) { object? memberSource = getSource(); @@ -1495,7 +1494,7 @@ private void WriteAddCollectionFixup(object o, Member member, object memberValue return memberSource; } - [RequiresUnreferencedCode("Calls AddObjectsIntoTargetCollection")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private XmlSerializationCollectionFixupCallback GetCreateCollectionOfObjectsCallback(Type collectionType) { return Wrapper; @@ -1525,7 +1524,7 @@ void Wrapper(object? collection, object? collectionItems) } } - [RequiresUnreferencedCode("calls WriteEnumAndArrayTypes")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private object? WriteLiteralStructMethod(StructMapping structMapping, bool isNullable, bool checkType, string? defaultNamespace) { XmlQualifiedName? xsiType = checkType ? GetXsiType() : null; @@ -1812,7 +1811,7 @@ void Wrapper(object elementNameObject) } } - [RequiresUnreferencedCode("calls WriteArray")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private bool WriteEnumAndArrayTypes(out object? o, StructMapping mapping, XmlQualifiedName xsiType, string? defaultNamespace) { foreach (var m in _mapping.Scope!.TypeMappings) @@ -1851,7 +1850,7 @@ private bool WriteEnumAndArrayTypes(out object? o, StructMapping mapping, XmlQua return false; } - [RequiresUnreferencedCode("calls WriteStructMethod")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private bool WriteDerivedTypes(out object? o, StructMapping mapping, XmlQualifiedName xsiType, string? defaultNamespace, bool checkType, bool isNullable) { for (StructMapping? derived = mapping.DerivedMappings; derived != null; derived = derived.NextDerivedMapping) @@ -1872,7 +1871,7 @@ private bool WriteDerivedTypes(out object? o, StructMapping mapping, XmlQualifie return false; } - [RequiresUnreferencedCode("calls WriteAttribute")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private void WriteAttributes(Member[] members, Member? anyAttribute, UnknownNodeAction elseCall, ref object? o) { Member? xmlnsMember = null; @@ -1959,7 +1958,7 @@ private void WriteAttributes(Member[] members, Member? anyAttribute, UnknownNode } } - [RequiresUnreferencedCode("Calls WritePrimitive")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private void WriteAttribute(Member member, object? attr = null) { AttributeAccessor attribute = member.Mapping.Attribute!; @@ -2007,7 +2006,7 @@ private void WriteAttribute(Member member, object? attr = null) } } - [RequiresUnreferencedCode("calls GetSetMemberValueDelegate")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private void SetOrAddValueToMember(object o, object value, MemberInfo memberInfo) { Type memberType = GetMemberType(memberInfo); @@ -2028,7 +2027,7 @@ private void SetOrAddValueToMember(object o, object value, MemberInfo memberInfo } } - [RequiresUnreferencedCode("calls GetSetMemberValueDelegate")] + [RequiresUnreferencedCode(XmlSerializer.TrimSerializationWarning)] private void AddItemInArrayMember(object o, MemberInfo memberInfo, Type memberType, object item) { var currentArray = (Array?)GetMemberValue(o, memberInfo); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs index fa5282eb4a42c1..2e6ecc3d16d6d0 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs @@ -152,7 +152,7 @@ private static XmlSerializerNamespaces DefaultNamespaces // Trimmer warning messages internal const string TrimSerializationWarning = "Members from serialized types may be trimmed if not referenced directly"; - private const string s_trimDeserializationWarning = "Members from deserialized types may be trimmed if not referenced directly"; + private const string TrimDeserializationWarning = "Members from deserialized types may be trimmed if not referenced directly"; private static readonly Dictionary> s_xmlSerializerTable = new Dictionary>(); @@ -418,7 +418,7 @@ private XmlMapping GetMapping() return _mapping; } - [RequiresUnreferencedCode(s_trimDeserializationWarning)] + [RequiresUnreferencedCode(TrimDeserializationWarning)] public object? Deserialize(Stream stream) { XmlTextReader xmlReader = new XmlTextReader(stream); @@ -428,7 +428,7 @@ private XmlMapping GetMapping() return Deserialize(xmlReader, null); } - [RequiresUnreferencedCode(s_trimDeserializationWarning)] + [RequiresUnreferencedCode(TrimDeserializationWarning)] public object? Deserialize(TextReader textReader) { XmlTextReader xmlReader = new XmlTextReader(textReader); @@ -438,25 +438,25 @@ private XmlMapping GetMapping() return Deserialize(xmlReader, null); } - [RequiresUnreferencedCode(s_trimDeserializationWarning)] + [RequiresUnreferencedCode(TrimDeserializationWarning)] public object? Deserialize(XmlReader xmlReader) { return Deserialize(xmlReader, null); } - [RequiresUnreferencedCode(s_trimDeserializationWarning)] + [RequiresUnreferencedCode(TrimDeserializationWarning)] public object? Deserialize(XmlReader xmlReader, XmlDeserializationEvents events) { return Deserialize(xmlReader, null, events); } - [RequiresUnreferencedCode(s_trimDeserializationWarning)] + [RequiresUnreferencedCode(TrimDeserializationWarning)] public object? Deserialize(XmlReader xmlReader, string? encodingStyle) { return Deserialize(xmlReader, encodingStyle, _events); } - [RequiresUnreferencedCode(s_trimDeserializationWarning)] + [RequiresUnreferencedCode(TrimDeserializationWarning)] public object? Deserialize(XmlReader xmlReader, string? encodingStyle, XmlDeserializationEvents events) { events.sender = this; diff --git a/src/libraries/System.Private.Xml/tests/TrimmingTests/XmlSchema.Write.cs b/src/libraries/System.Private.Xml/tests/TrimmingTests/XmlSchema.Write.cs index 51cda4a90c312a..9316dddeb5a42f 100644 --- a/src/libraries/System.Private.Xml/tests/TrimmingTests/XmlSchema.Write.cs +++ b/src/libraries/System.Private.Xml/tests/TrimmingTests/XmlSchema.Write.cs @@ -13,7 +13,7 @@ public static int Main() { XmlSchema schema = new XmlSchema(); - string expectedSchema = @"???"; + string expectedSchema = @""; // XmlSchemaElement elementCat = new XmlSchemaElement(); @@ -48,10 +48,10 @@ public static int Main() { using (var writer = XmlWriter.Create(stream)) { - schema.Write(writer); + schema.Write(writer, null); } - var str = Encoding.ASCII.GetString(stream.ToArray()); + var str = Encoding.UTF8.GetString(stream.ToArray()); if (str.Equals(expectedSchema, StringComparison.OrdinalIgnoreCase)) { return 100; From 062b507c40614796442fc6c896e0f26ca34d7b53 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Fri, 2 Apr 2021 09:46:23 -0700 Subject: [PATCH 12/12] Remove static constructor from ReflectionSerializationWriter --- .../ReflectionXmlSerializationReader.cs | 6 +++--- .../ReflectionXmlSerializationWriter.cs | 21 ++++--------------- 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs index bb4a7ee03ffff3..ab2daeeab7dde7 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs @@ -27,11 +27,11 @@ namespace System.Xml.Serialization internal sealed class ReflectionXmlSerializationReader : XmlSerializationReader { - private static TypeDesc StringTypeDesc { get; set; } = (new TypeScope()).GetTypeDesc(typeof(string)); - private static TypeDesc QnameTypeDesc { get; set; } = (new TypeScope()).GetTypeDesc(typeof(XmlQualifiedName)); - private readonly XmlMapping _mapping; + internal static TypeDesc StringTypeDesc { get; set; } = (new TypeScope()).GetTypeDesc(typeof(string)); + internal static TypeDesc QnameTypeDesc { get; set; } = (new TypeScope()).GetTypeDesc(typeof(XmlQualifiedName)); + public ReflectionXmlSerializationReader(XmlMapping mapping, XmlReader xmlReader, XmlDeserializationEvents events, string? encodingStyle) { Init(xmlReader, events, encodingStyle, tempAssembly: null); diff --git a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs index 38b552fe0d93e5..3ed294b0ac692d 100644 --- a/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs +++ b/src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationWriter.cs @@ -13,19 +13,6 @@ namespace System.Xml.Serialization { internal sealed class ReflectionXmlSerializationWriter : XmlSerializationWriter { - internal static readonly TypeDesc StringTypeDesc; - internal static readonly TypeDesc QnameTypeDesc; - - [RequiresUnreferencedCode("class GetTypeDesc")] - // Initialize in static constructor to suppress RequiresUnreferencedCode warning -#pragma warning disable CA1810 - static ReflectionXmlSerializationWriter() - { - StringTypeDesc = (new TypeScope()).GetTypeDesc(typeof(string)); - QnameTypeDesc = (new TypeScope()).GetTypeDesc(typeof(XmlQualifiedName)); - } -#pragma warning restore CA1810 - private readonly XmlMapping _mapping; public ReflectionXmlSerializationWriter(XmlMapping xmlMapping, XmlWriter xmlWriter, XmlSerializerNamespaces namespaces, string? encodingStyle, string? id) @@ -406,7 +393,7 @@ private void WriteElement(object? o, ElementAccessor element, bool writeAccessor else if (element.Mapping is PrimitiveMapping) { var mapping = element.Mapping as PrimitiveMapping; - if (mapping!.TypeDesc == QnameTypeDesc) + if (mapping!.TypeDesc == ReflectionXmlSerializationReader.QnameTypeDesc) { WriteQualifiedNameElement(name, ns!, element.Default, (XmlQualifiedName)o!, element.IsNullable, mapping.IsSoap, mapping); } @@ -902,7 +889,7 @@ private bool CanOptimizeWriteListSequence(TypeDesc? listElementTypeDesc) // check to see if we can write values of the attribute sequentially // currently we have only one data type (XmlQualifiedName) that we can not write "inline", // because we need to output xmlns:qx="..." for each of the qnames - return (listElementTypeDesc != null && listElementTypeDesc != QnameTypeDesc); + return (listElementTypeDesc != null && listElementTypeDesc != ReflectionXmlSerializationReader.QnameTypeDesc); } private void WriteAttribute(object memberValue, AttributeAccessor attribute, object? container) @@ -1102,7 +1089,7 @@ private bool IsDefaultValue(TypeMapping mapping, object o, object value, bool is private bool WritePrimitiveValue(TypeDesc typeDesc, object? o, bool isElement, out string? stringValue) { - if (typeDesc == StringTypeDesc || typeDesc.FormatterName == "String") + if (typeDesc == ReflectionXmlSerializationReader.StringTypeDesc || typeDesc.FormatterName == "String") { stringValue = (string?)o; return true; @@ -1141,7 +1128,7 @@ private bool WritePrimitiveValue(TypeDesc typeDesc, object? o, bool isElement, o throw new InvalidOperationException(SR.Format(SR.XmlInternalErrorDetails, "Invalid DateTime")); } } - else if (typeDesc == QnameTypeDesc) + else if (typeDesc == ReflectionXmlSerializationReader.QnameTypeDesc) { stringValue = FromXmlQualifiedName((XmlQualifiedName?)o); return true;