From 2390d9fc3920bed8ce649f103ab96f73d7a172a5 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sat, 13 Mar 2021 13:20:09 +0000 Subject: [PATCH 1/6] Update dependencies from https://github.com/mono/linker build 20210312.2 Microsoft.NET.ILLink.Tasks From Version 6.0.100-preview.2.21126.1 -> To Version 6.0.100-preview.2.21162.2 --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 3db4c219dfb241..60277ca25c48b5 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -194,9 +194,9 @@ https://github.com/dotnet/runtime acbbb505492244b4c07a4a368257ba86a1fc02e1 - + https://github.com/mono/linker - 0c4902a114192fce1e7570d998e70d24669e9cc3 + c44302b73f744c24293c3092a011655f1a4fffe0 https://github.com/dotnet/xharness diff --git a/eng/Versions.props b/eng/Versions.props index 261c39bba7ca4e..8ef7b233091bab 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -155,7 +155,7 @@ 5.0.0-preview-20201009.2 - 6.0.100-preview.2.21126.1 + 6.0.100-preview.2.21162.2 6.0.0-preview.3.21151.1 From 530b1b95d32baff09465a237b164286dc8059b08 Mon Sep 17 00:00:00 2001 From: Eric Erhardt Date: Fri, 12 Mar 2021 12:24:15 -0600 Subject: [PATCH 2/6] Suppress new ILLink warnings in System.Text.Json related to MakeGenericType --- .../src/System.Text.Json.csproj | 4 +++ .../Converters/Value/EnumConverterFactory.cs | 29 +++++++++++++------ .../Value/NullableConverterFactory.cs | 9 +++++- .../JsonSerializerOptions.Converters.cs | 7 +---- .../Serialization/JsonStringEnumConverter.cs | 14 ++------- 5 files changed, 35 insertions(+), 28 deletions(-) diff --git a/src/libraries/System.Text.Json/src/System.Text.Json.csproj b/src/libraries/System.Text.Json/src/System.Text.Json.csproj index ed010eff3ce5aa..cb91cbdfdb4efb 100644 --- a/src/libraries/System.Text.Json/src/System.Text.Json.csproj +++ b/src/libraries/System.Text.Json/src/System.Text.Json.csproj @@ -227,6 +227,7 @@ + @@ -254,6 +255,9 @@ + + + diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/EnumConverterFactory.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/EnumConverterFactory.cs index cc67a34eb392e1..8e353bd5f3edca 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/EnumConverterFactory.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/EnumConverterFactory.cs @@ -1,7 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System.Reflection; +using System.Diagnostics.CodeAnalysis; namespace System.Text.Json.Serialization.Converters { @@ -16,16 +16,27 @@ public override bool CanConvert(Type type) return type.IsEnum; } - public override JsonConverter CreateConverter(Type type, JsonSerializerOptions options) + public override JsonConverter CreateConverter(Type type, JsonSerializerOptions options) => + Create(type, EnumConverterOptions.AllowNumbers, options); + + internal static JsonConverter Create(Type enumType, EnumConverterOptions converterOptions, JsonSerializerOptions serializerOptions) { - JsonConverter converter = (JsonConverter)Activator.CreateInstance( - typeof(EnumConverter<>).MakeGenericType(type), - BindingFlags.Instance | BindingFlags.Public, - binder: null, - new object[] { EnumConverterOptions.AllowNumbers, options }, - culture: null)!; + return (JsonConverter)Activator.CreateInstance( + GetEnumConverterType(enumType), + new object[] { converterOptions, serializerOptions })!; + } - return converter; + internal static JsonConverter Create(Type enumType, EnumConverterOptions converterOptions, JsonNamingPolicy? namingPolicy, JsonSerializerOptions serializerOptions) + { + return (JsonConverter)Activator.CreateInstance( + GetEnumConverterType(enumType), + new object?[] { converterOptions, namingPolicy, serializerOptions })!; } + + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2055:MakeGenericType", + Justification = "'where T : struct' implies 'T : new()', so the trimmer is warning calling MakeGenericType here because enumType's constructors are not annotated. " + + "But EnumConverter doesn't call new T(), so this is safe.")] + [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] + private static Type GetEnumConverterType(Type enumType) => typeof(EnumConverter<>).MakeGenericType(enumType); } } diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/NullableConverterFactory.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/NullableConverterFactory.cs index dfab566a636a8e..4754c7bebfaba8 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/NullableConverterFactory.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/NullableConverterFactory.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Reflection; namespace System.Text.Json.Serialization.Converters @@ -34,11 +35,17 @@ public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializer public static JsonConverter CreateValueConverter(Type valueTypeToConvert, JsonConverter valueConverter) { return (JsonConverter)Activator.CreateInstance( - typeof(NullableConverter<>).MakeGenericType(valueTypeToConvert), + GetNullableConverterType(valueTypeToConvert), BindingFlags.Instance | BindingFlags.Public, binder: null, args: new object[] { valueConverter }, culture: null)!; } + + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2055:MakeGenericType", + Justification = "'where T : struct' implies 'T : new()', so the trimmer is warning calling MakeGenericType here because valueTypeToConvert's constructors are not annotated. " + + "But NullableConverter doesn't call new T(), so this is safe.")] + [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] + private static Type GetNullableConverterType(Type valueTypeToConvert) => typeof(NullableConverter<>).MakeGenericType(valueTypeToConvert); } } diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs index cbe8e8f72d1899..e442176093ded0 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerOptions.Converters.cs @@ -96,12 +96,7 @@ internal JsonConverter GetDictionaryKeyConverter(Type keyType) // Use factory pattern to generate an EnumConverter with AllowStrings and AllowNumbers options for dictionary keys. // There will be one converter created for each enum type. JsonConverter GetEnumConverter() - => (JsonConverter)Activator.CreateInstance( - typeof(EnumConverter<>).MakeGenericType(keyType), - BindingFlags.Instance | BindingFlags.Public, - binder: null, - new object[] { EnumConverterOptions.AllowStrings | EnumConverterOptions.AllowNumbers, this }, - culture: null)!; + => EnumConverterFactory.Create(keyType, EnumConverterOptions.AllowStrings | EnumConverterOptions.AllowNumbers, this); } private ConcurrentDictionary? _dictionaryKeyConverters; diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonStringEnumConverter.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonStringEnumConverter.cs index 65ac02718fb536..ac6fe18b9dbda9 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonStringEnumConverter.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonStringEnumConverter.cs @@ -1,7 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System.Reflection; using System.Text.Json.Serialization.Converters; namespace System.Text.Json.Serialization @@ -52,16 +51,7 @@ public override bool CanConvert(Type typeToConvert) } /// - public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) - { - JsonConverter converter = (JsonConverter)Activator.CreateInstance( - typeof(EnumConverter<>).MakeGenericType(typeToConvert), - BindingFlags.Instance | BindingFlags.Public, - binder: null, - new object?[] { _converterOptions, _namingPolicy, options }, - culture: null)!; - - return converter; - } + public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) => + EnumConverterFactory.Create(typeToConvert, _converterOptions, _namingPolicy, options); } } From 05d6cb1ee9b81823610a0a9f07c39d755c1d2e03 Mon Sep 17 00:00:00 2001 From: Eric Erhardt Date: Mon, 15 Mar 2021 12:14:03 -0500 Subject: [PATCH 3/6] Respond to PR feedback --- .../Json/Serialization/Converters/Value/EnumConverterFactory.cs | 2 +- .../Serialization/Converters/Value/NullableConverterFactory.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/EnumConverterFactory.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/EnumConverterFactory.cs index 8e353bd5f3edca..24d7c64f80356a 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/EnumConverterFactory.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/EnumConverterFactory.cs @@ -34,7 +34,7 @@ internal static JsonConverter Create(Type enumType, EnumConverterOptions convert } [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2055:MakeGenericType", - Justification = "'where T : struct' implies 'T : new()', so the trimmer is warning calling MakeGenericType here because enumType's constructors are not annotated. " + + Justification = "'EnumConverter where T : struct' implies 'T : new()', so the trimmer is warning calling MakeGenericType here because enumType's constructors are not annotated. " + "But EnumConverter doesn't call new T(), so this is safe.")] [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] private static Type GetEnumConverterType(Type enumType) => typeof(EnumConverter<>).MakeGenericType(enumType); diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/NullableConverterFactory.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/NullableConverterFactory.cs index 4754c7bebfaba8..f42ed1fbcc8c10 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/NullableConverterFactory.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/Converters/Value/NullableConverterFactory.cs @@ -43,7 +43,7 @@ public static JsonConverter CreateValueConverter(Type valueTypeToConvert, JsonCo } [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2055:MakeGenericType", - Justification = "'where T : struct' implies 'T : new()', so the trimmer is warning calling MakeGenericType here because valueTypeToConvert's constructors are not annotated. " + + Justification = "'NullableConverter where T : struct' implies 'T : new()', so the trimmer is warning calling MakeGenericType here because valueTypeToConvert's constructors are not annotated. " + "But NullableConverter doesn't call new T(), so this is safe.")] [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] private static Type GetNullableConverterType(Type valueTypeToConvert) => typeof(NullableConverter<>).MakeGenericType(valueTypeToConvert); From 1ced1eff1802ed831c3fa7f1c601e1e363683474 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 16 Mar 2021 12:27:05 +0000 Subject: [PATCH 4/6] Update dependencies from https://github.com/mono/linker build 20210316.1 Microsoft.NET.ILLink.Tasks From Version 6.0.100-preview.2.21126.1 -> To Version 6.0.100-preview.2.21166.1 --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 60277ca25c48b5..1deebebe32bc10 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -194,9 +194,9 @@ https://github.com/dotnet/runtime acbbb505492244b4c07a4a368257ba86a1fc02e1 - + https://github.com/mono/linker - c44302b73f744c24293c3092a011655f1a4fffe0 + e06f9dc61a3dc2cad0f1138638e7a34c6eb6e5cc https://github.com/dotnet/xharness diff --git a/eng/Versions.props b/eng/Versions.props index 8ef7b233091bab..f1b2986105d3ad 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -155,7 +155,7 @@ 5.0.0-preview-20201009.2 - 6.0.100-preview.2.21162.2 + 6.0.100-preview.2.21166.1 6.0.0-preview.3.21151.1 From 3caa6e3ffacaf35d3a04698ece78c6b7e81b9f33 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 17 Mar 2021 12:26:30 +0000 Subject: [PATCH 5/6] Update dependencies from https://github.com/mono/linker build 20210317.1 Microsoft.NET.ILLink.Tasks From Version 6.0.100-preview.2.21126.1 -> To Version 6.0.100-preview.2.21167.1 --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 1deebebe32bc10..0c12293f8e4152 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -194,9 +194,9 @@ https://github.com/dotnet/runtime acbbb505492244b4c07a4a368257ba86a1fc02e1 - + https://github.com/mono/linker - e06f9dc61a3dc2cad0f1138638e7a34c6eb6e5cc + c0ed4ef448496b0dc7db3aeb27bbb194fcdccb58 https://github.com/dotnet/xharness diff --git a/eng/Versions.props b/eng/Versions.props index f1b2986105d3ad..0d4b05a833ea59 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -155,7 +155,7 @@ 5.0.0-preview-20201009.2 - 6.0.100-preview.2.21166.1 + 6.0.100-preview.2.21167.1 6.0.0-preview.3.21151.1 From 02f20fcafa5fe9bdac1ced2e141b3c0036c657e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= Date: Wed, 17 Mar 2021 15:38:57 +0100 Subject: [PATCH 6/6] Temporarily disable Android.Device_Emulator.Aot.Test.csproj --- src/libraries/tests.proj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj index a46f287acb10c1..79c14f9bb52dec 100644 --- a/src/libraries/tests.proj +++ b/src/libraries/tests.proj @@ -292,7 +292,9 @@ +