Skip to content

Commit 9935e51

Browse files
[dotnet] [bidi] Address BiDi's JSON converter AOT warnings (SeleniumHQ#15390)
Co-authored-by: Nikolay Borisenko <[email protected]>
1 parent 55d0708 commit 9935e51

12 files changed

+66
-49
lines changed

dotnet/src/webdriver/BiDi/Communication/Json/Converters/Enumerable/GetClientWindowsResultConverter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
// under the License.
1818
// </copyright>
1919

20+
using OpenQA.Selenium.BiDi.Communication.Json.Internal;
2021
using OpenQA.Selenium.BiDi.Modules.Browser;
2122
using System;
2223
using System.Collections.Generic;
@@ -30,7 +31,7 @@ internal class GetClientWindowsResultConverter : JsonConverter<GetClientWindowsR
3031
public override GetClientWindowsResult Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
3132
{
3233
using var doc = JsonDocument.ParseValue(ref reader);
33-
var clientWindows = doc.RootElement.GetProperty("clientWindows").Deserialize<IReadOnlyList<ClientWindowInfo>>(options);
34+
var clientWindows = doc.RootElement.GetProperty("clientWindows").Deserialize(options.GetTypeInfo<IReadOnlyList<ClientWindowInfo>>());
3435

3536
return new GetClientWindowsResult(clientWindows!);
3637
}

dotnet/src/webdriver/BiDi/Communication/Json/Converters/Enumerable/GetCookiesResultConverter.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@
1717
// under the License.
1818
// </copyright>
1919

20+
using OpenQA.Selenium.BiDi.Communication.Json.Internal;
2021
using OpenQA.Selenium.BiDi.Modules.Storage;
2122
using System;
2223
using System.Collections.Generic;
2324
using System.Text.Json;
2425
using System.Text.Json.Serialization;
26+
using System.Text.Json.Serialization.Metadata;
2527

2628
namespace OpenQA.Selenium.BiDi.Communication.Json.Converters.Enumerable;
2729

@@ -30,8 +32,8 @@ internal class GetCookiesResultConverter : JsonConverter<GetCookiesResult>
3032
public override GetCookiesResult Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
3133
{
3234
using var doc = JsonDocument.ParseValue(ref reader);
33-
var cookies = doc.RootElement.GetProperty("cookies").Deserialize<IReadOnlyList<Modules.Network.Cookie>>(options);
34-
var partitionKey = doc.RootElement.GetProperty("partitionKey").Deserialize<PartitionKey>(options);
35+
var cookies = doc.RootElement.GetProperty("cookies").Deserialize(options.GetTypeInfo<IReadOnlyList<Modules.Network.Cookie>>());
36+
var partitionKey = doc.RootElement.GetProperty("partitionKey").Deserialize((JsonTypeInfo<PartitionKey>)options.GetTypeInfo(typeof(PartitionKey)));
3537

3638
return new GetCookiesResult(cookies!, partitionKey!);
3739
}

dotnet/src/webdriver/BiDi/Communication/Json/Converters/Enumerable/GetRealmsResultConverter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
// under the License.
1818
// </copyright>
1919

20+
using OpenQA.Selenium.BiDi.Communication.Json.Internal;
2021
using OpenQA.Selenium.BiDi.Modules.Script;
2122
using System;
2223
using System.Collections.Generic;
@@ -30,7 +31,7 @@ internal class GetRealmsResultConverter : JsonConverter<GetRealmsResult>
3031
public override GetRealmsResult Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
3132
{
3233
using var doc = JsonDocument.ParseValue(ref reader);
33-
var realms = doc.RootElement.GetProperty("realms").Deserialize<IReadOnlyList<RealmInfo>>(options);
34+
var realms = doc.RootElement.GetProperty("realms").Deserialize(options.GetTypeInfo<IReadOnlyList<RealmInfo>>());
3435

3536
return new GetRealmsResult(realms!);
3637
}

dotnet/src/webdriver/BiDi/Communication/Json/Converters/Enumerable/GetUserContextsResultConverter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
// under the License.
1818
// </copyright>
1919

20+
using OpenQA.Selenium.BiDi.Communication.Json.Internal;
2021
using OpenQA.Selenium.BiDi.Modules.Browser;
2122
using System;
2223
using System.Collections.Generic;
@@ -30,7 +31,7 @@ internal class GetUserContextsResultConverter : JsonConverter<GetUserContextsRes
3031
public override GetUserContextsResult Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
3132
{
3233
using var doc = JsonDocument.ParseValue(ref reader);
33-
var userContexts = doc.RootElement.GetProperty("userContexts").Deserialize<IReadOnlyList<UserContextInfo>>(options);
34+
var userContexts = doc.RootElement.GetProperty("userContexts").Deserialize(options.GetTypeInfo<IReadOnlyList<UserContextInfo>>());
3435

3536
return new GetUserContextsResult(userContexts!);
3637
}

dotnet/src/webdriver/BiDi/Communication/Json/Converters/Enumerable/InputSourceActionsConverter.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
// under the License.
1818
// </copyright>
1919

20+
using OpenQA.Selenium.BiDi.Communication.Json.Internal;
2021
using OpenQA.Selenium.BiDi.Modules.Input;
2122
using System;
23+
using System.Collections.Generic;
2224
using System.Linq;
2325
using System.Text.Json;
2426
using System.Text.Json.Serialization;
@@ -43,31 +45,31 @@ public override void Write(Utf8JsonWriter writer, SourceActions value, JsonSeria
4345
case KeyActions keys:
4446
writer.WriteString("type", "key");
4547
writer.WritePropertyName("actions");
46-
JsonSerializer.Serialize(writer, keys.Actions.Select(a => a as IKeySourceAction), options);
48+
JsonSerializer.Serialize(writer, keys.Actions.Select(a => a as IKeySourceAction), options.GetTypeInfo<IEnumerable<IKeySourceAction?>>());
4749

4850
break;
4951
case PointerActions pointers:
5052
writer.WriteString("type", "pointer");
5153
if (pointers.Options is not null)
5254
{
5355
writer.WritePropertyName("parameters");
54-
JsonSerializer.Serialize(writer, pointers.Options, options);
56+
JsonSerializer.Serialize(writer, pointers.Options, options.GetTypeInfo(typeof(PointerParameters)));
5557
}
5658

5759
writer.WritePropertyName("actions");
58-
JsonSerializer.Serialize(writer, pointers.Actions.Select(a => a as IPointerSourceAction), options);
60+
JsonSerializer.Serialize(writer, pointers.Actions.Select(a => a as IPointerSourceAction), options.GetTypeInfo<IEnumerable<IPointerSourceAction?>>());
5961

6062
break;
6163
case WheelActions wheels:
6264
writer.WriteString("type", "wheel");
6365
writer.WritePropertyName("actions");
64-
JsonSerializer.Serialize(writer, wheels.Actions.Select(a => a as IWheelSourceAction), options);
66+
JsonSerializer.Serialize(writer, wheels.Actions.Select(a => a as IWheelSourceAction), options.GetTypeInfo<IEnumerable<IWheelSourceAction?>>());
6567

6668
break;
6769
case NoneActions none:
6870
writer.WriteString("type", "none");
6971
writer.WritePropertyName("actions");
70-
JsonSerializer.Serialize(writer, none.Actions.Select(a => a as INoneSourceAction), options);
72+
JsonSerializer.Serialize(writer, none.Actions.Select(a => a as INoneSourceAction), options.GetTypeInfo<IEnumerable<INoneSourceAction?>>());
7173

7274
break;
7375
}

dotnet/src/webdriver/BiDi/Communication/Json/Converters/Enumerable/LocateNodesResultConverter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
// under the License.
1818
// </copyright>
1919

20+
using OpenQA.Selenium.BiDi.Communication.Json.Internal;
2021
using OpenQA.Selenium.BiDi.Modules.BrowsingContext;
2122
using OpenQA.Selenium.BiDi.Modules.Script;
2223
using System;
@@ -31,7 +32,7 @@ internal class LocateNodesResultConverter : JsonConverter<LocateNodesResult>
3132
public override LocateNodesResult Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
3233
{
3334
using var doc = JsonDocument.ParseValue(ref reader);
34-
var nodes = doc.RootElement.GetProperty("nodes").Deserialize<IReadOnlyList<NodeRemoteValue>>(options);
35+
var nodes = doc.RootElement.GetProperty("nodes").Deserialize(options.GetTypeInfo<IReadOnlyList<NodeRemoteValue>>());
3536

3637
return new LocateNodesResult(nodes!);
3738
}

dotnet/src/webdriver/BiDi/Communication/Json/Converters/InputOriginConverter.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,14 @@
1919

2020
using OpenQA.Selenium.BiDi.Modules.Input;
2121
using System;
22+
using System.Diagnostics.CodeAnalysis;
2223
using System.Text.Json;
2324
using System.Text.Json.Serialization;
2425

2526
namespace OpenQA.Selenium.BiDi.Communication.Json.Converters;
2627

28+
[UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Json serializer options should have AOT-safe type resolution")]
29+
[UnconditionalSuppressMessage("AOT", "IL3050", Justification = "Json serializer options should have AOT-safe type resolution")]
2730
internal class InputOriginConverter : JsonConverter<Origin>
2831
{
2932
public override Origin Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)

dotnet/src/webdriver/BiDi/Communication/Json/Converters/Polymorphic/EvaluateResultConverter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ internal class EvaluateResultConverter : JsonConverter<EvaluateResult>
3232
{
3333
return reader.GetDiscriminator("type") switch
3434
{
35-
"success" => JsonSerializer.Deserialize<EvaluateResultSuccess>(ref reader, options),
36-
"exception" => JsonSerializer.Deserialize<EvaluateResultException>(ref reader, options),
35+
"success" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<EvaluateResultSuccess>()),
36+
"exception" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<EvaluateResultException>()),
3737
_ => null,
3838
};
3939
}

dotnet/src/webdriver/BiDi/Communication/Json/Converters/Polymorphic/LogEntryConverter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ internal class LogEntryConverter : JsonConverter<Modules.Log.LogEntry>
3232
{
3333
return reader.GetDiscriminator("type") switch
3434
{
35-
"console" => JsonSerializer.Deserialize<ConsoleLogEntry>(ref reader, options),
36-
"javascript" => JsonSerializer.Deserialize<JavascriptLogEntry>(ref reader, options),
35+
"console" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<ConsoleLogEntry>()),
36+
"javascript" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<JavascriptLogEntry>()),
3737
_ => null,
3838
};
3939
}

dotnet/src/webdriver/BiDi/Communication/Json/Converters/Polymorphic/RealmInfoConverter.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ internal class RealmInfoConverter : JsonConverter<RealmInfo>
3232
{
3333
return reader.GetDiscriminator("type") switch
3434
{
35-
"window" => JsonSerializer.Deserialize<WindowRealmInfo>(ref reader, options),
36-
"dedicated-worker" => JsonSerializer.Deserialize<DedicatedWorkerRealmInfo>(ref reader, options),
37-
"shared-worker" => JsonSerializer.Deserialize<SharedWorkerRealmInfo>(ref reader, options),
38-
"service-worker" => JsonSerializer.Deserialize<ServiceWorkerRealmInfo>(ref reader, options),
39-
"worker" => JsonSerializer.Deserialize<WorkerRealmInfo>(ref reader, options),
40-
"paint-worklet" => JsonSerializer.Deserialize<PaintWorkletRealmInfo>(ref reader, options),
41-
"audio-worklet" => JsonSerializer.Deserialize<AudioWorkletRealmInfo>(ref reader, options),
42-
"worklet" => JsonSerializer.Deserialize<WorkletRealmInfo>(ref reader, options),
35+
"window" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<WindowRealmInfo>()),
36+
"dedicated-worker" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<DedicatedWorkerRealmInfo>()),
37+
"shared-worker" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<SharedWorkerRealmInfo>()),
38+
"service-worker" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<ServiceWorkerRealmInfo>()),
39+
"worker" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<WorkerRealmInfo>()),
40+
"paint-worklet" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<PaintWorkletRealmInfo>()),
41+
"audio-worklet" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<AudioWorkletRealmInfo>()),
42+
"worklet" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<WorkletRealmInfo>()),
4343
_ => null,
4444
};
4545
}

0 commit comments

Comments
 (0)