Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
923f23f
[dotnet] Add trimming attributes, address some trim warnings
RenderMichael Oct 23, 2024
1b6adc1
Merge branch 'trunk' into trim-improvement
RenderMichael Oct 23, 2024
84714f3
Make DomainType struct readonly
RenderMichael Oct 23, 2024
5c2430a
Merge branch 'trim-improvement' of https://github.com/RenderMichael/s…
RenderMichael Oct 23, 2024
ec91f98
Merge branch 'trunk' into trim-improvement
RenderMichael Oct 28, 2024
b19ca4d
merge develop
RenderMichael Nov 17, 2024
59baae4
center preprocessor directives on .net 8+
RenderMichael Nov 17, 2024
b4564f9
Add file header to `TrimmingAttributes.cs`
RenderMichael Nov 17, 2024
a5c2e09
Tweak #if location
RenderMichael Nov 17, 2024
53e3d08
Merge branch 'trunk' into trim-improvement
RenderMichael Nov 17, 2024
26e327f
Hide `Assembly.CodeBase` from .NET 8 compilation
RenderMichael Nov 18, 2024
225a030
Remove changes from `DevToolsDomains`
RenderMichael Dec 8, 2024
1440e22
remove remaining changes from `DevToolsDomains`
RenderMichael Dec 8, 2024
310bdf8
Merge branch 'trunk' into trim-improvement
RenderMichael Dec 8, 2024
61a7f01
Merge branch 'trunk' into trim-improvement
RenderMichael Jan 25, 2025
6a6cd74
Merge branch 'trunk' into trim-improvement
RenderMichael Jan 31, 2025
ba85340
merge main
RenderMichael Jan 31, 2025
f1fce52
Annotate CDP as AOT-unsafe
RenderMichael Jan 31, 2025
1092962
Annotate CDP as fully AOT-unsafe
RenderMichael Jan 31, 2025
1a03caa
merge trunk
RenderMichael Feb 27, 2025
70489a6
merge trunk
RenderMichael Feb 28, 2025
68339cd
Improve AOT incompatibility message
RenderMichael Feb 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 18 additions & 8 deletions dotnet/src/webdriver/DevTools/DevToolsDomains.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;

namespace OpenQA.Selenium.DevTools
Expand All @@ -33,14 +34,22 @@ public abstract class DevToolsDomains
// This is the list of known supported DevTools version implementation.
// When new versions are implemented for support, new types must be
// added to this dictionary.
private static readonly Dictionary<int, Type> SupportedDevToolsVersions = new Dictionary<int, Type>()
private static readonly Dictionary<int, DomainType> SupportedDevToolsVersions = new Dictionary<int, DomainType>()
{
{ 127, typeof(V127.V127Domains) },
{ 129, typeof(V129.V129Domains) },
{ 128, typeof(V128.V128Domains) },
{ 85, typeof(V85.V85Domains) }
{ 127, new DomainType(typeof(V127.V127Domains)) },
{ 129, new DomainType(typeof(V129.V129Domains)) },
{ 128, new DomainType(typeof(V128.V128Domains)) },
{ 85, new DomainType(typeof(V85.V85Domains)) }
};

/// <summary>Workaround for trimming.</summary>
struct DomainType
{
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]
public Type Type;

public DomainType([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type t) => Type = t;
}
/// <summary>
/// Gets the version-specific domains for the DevTools session. This value must be cast to a version specific type to be at all useful.
/// </summary>
Expand Down Expand Up @@ -102,12 +111,13 @@ public static DevToolsDomains InitializeDomains(int protocolVersion, DevToolsSes
return domains;
}

[return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]
private static Type MatchDomainsVersion(int desiredVersion, int versionRange)
{
// Return fast on an exact match
if (SupportedDevToolsVersions.ContainsKey(desiredVersion))
if (SupportedDevToolsVersions.TryGetValue(desiredVersion, out DomainType type))
{
return SupportedDevToolsVersions[desiredVersion];
return type.Type;
}

// Get the list of supported versions and sort descending
Expand All @@ -121,7 +131,7 @@ private static Type MatchDomainsVersion(int desiredVersion, int versionRange)
// (that is, closest without going over).
if (desiredVersion >= supportedVersion && desiredVersion - supportedVersion < versionRange)
{
return SupportedDevToolsVersions[supportedVersion];
return SupportedDevToolsVersions[supportedVersion].Type;
}
}

Expand Down
13 changes: 9 additions & 4 deletions dotnet/src/webdriver/DevTools/Json/JsonEnumMemberConverter.cs
Original file line number Diff line number Diff line change
@@ -1,25 +1,30 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Runtime.Serialization;
using System.Text.Json;
using System.Text.Json.Serialization;

namespace OpenQA.Selenium.DevTools.Json
{
internal class JsonEnumMemberConverter<TEnum> : JsonConverter<TEnum> where TEnum : Enum
internal class JsonEnumMemberConverter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] TEnum>
: JsonConverter<TEnum> where TEnum : struct, Enum
{
private readonly Dictionary<TEnum, string> _enumToString = new Dictionary<TEnum, string>();
private readonly Dictionary<string, TEnum> _stringToEnum = new Dictionary<string, TEnum>();

public JsonEnumMemberConverter()
{
var type = typeof(TEnum);
var values = Enum.GetValues(type);

#if NET5_0_OR_GREATER
TEnum[] values = Enum.GetValues<TEnum>();
#else
Array values = Enum.GetValues(type);
#endif
foreach (var value in values)
{
var enumMember = type.GetMember(value.ToString())[0];
var enumMember = type.GetField(value.ToString());
var attr = enumMember.GetCustomAttributes(typeof(EnumMemberAttribute), false)
.Cast<EnumMemberAttribute>()
.FirstOrDefault();
Expand Down
Loading
Loading