diff --git a/Directory.Packages.props b/Directory.Packages.props index 2dd489a7..5df56d49 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -27,7 +27,7 @@ - + diff --git a/src/StreamJsonRpc/LoadableTypeCollection.cs b/src/StreamJsonRpc/LoadableTypeCollection.cs index d1ca2489..fcf58048 100644 --- a/src/StreamJsonRpc/LoadableTypeCollection.cs +++ b/src/StreamJsonRpc/LoadableTypeCollection.cs @@ -4,8 +4,6 @@ using System.Collections; using System.Collections.Immutable; using System.Diagnostics.CodeAnalysis; -using System.Runtime.CompilerServices; -using Microsoft; namespace StreamJsonRpc; @@ -62,14 +60,19 @@ internal bool TryGetType(string fullName, [NotNullWhen(true), DynamicallyAccesse return false; } - private struct LoadableType([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] Type type) : IEquatable + private struct LoadableType : IEquatable { + public LoadableType([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] Type type) + { + this.Type = type; + } + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] - public Type Type => type; + public Type Type { get; } public bool Equals(LoadableType other) => this.Type == other.Type; - public override int GetHashCode() => type.GetHashCode(); + public override int GetHashCode() => this.Type.GetHashCode(); public override bool Equals(object? obj) => obj is LoadableType other && this.Equals(other); } diff --git a/src/StreamJsonRpc/Reflection/JsonRpcProxyMappingAttribute.cs b/src/StreamJsonRpc/Reflection/JsonRpcProxyMappingAttribute.cs index 2df17d30..cc26592b 100644 --- a/src/StreamJsonRpc/Reflection/JsonRpcProxyMappingAttribute.cs +++ b/src/StreamJsonRpc/Reflection/JsonRpcProxyMappingAttribute.cs @@ -10,20 +10,27 @@ namespace StreamJsonRpc.Reflection; /// An attribute that is used by our source generator to map an RPC interface to a /// source generated proxy class. /// -/// -/// The source generated proxy class. -/// This must implement the interface the attribute is applied to, -/// derive from , -/// and declare a public constructor with a particular signature. -/// [AttributeUsage(AttributeTargets.Interface, AllowMultiple = true)] [EditorBrowsable(EditorBrowsableState.Never)] -public class JsonRpcProxyMappingAttribute( - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.Interfaces)] Type proxyClass) : Attribute +public class JsonRpcProxyMappingAttribute : Attribute { /// - /// Gets the proxy class type implements the RPC interface. + /// Initializes a new instance of the class. + /// + /// + /// The source generated proxy class. + /// This must implement the interface the attribute is applied to, + /// derive from , + /// and declare a public constructor with a particular signature. + /// + public JsonRpcProxyMappingAttribute([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.Interfaces)] Type proxyClass) + { + this.ProxyClass = proxyClass; + } + + /// + /// Gets the proxy class type that implements the RPC interface. /// [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.Interfaces)] - public Type ProxyClass => proxyClass; + public Type ProxyClass { get; } } diff --git a/src/StreamJsonRpc/RpcTargetMetadata.cs b/src/StreamJsonRpc/RpcTargetMetadata.cs index 5cd8285f..30abb6c8 100644 --- a/src/StreamJsonRpc/RpcTargetMetadata.cs +++ b/src/StreamJsonRpc/RpcTargetMetadata.cs @@ -491,10 +491,15 @@ private static IReadOnlyList GetMissingInterfacesFromSet([DynamicallyAcces private static MethodInfo GetMethodInfo(IMethodShape shape) => (MethodInfo)(shape.MethodBase ?? throw new ArgumentException(Resources.FormatAttributeProviderRequired($"{shape.DeclaringType.Type.FullName}.{shape.Name}"), nameof(shape))); - internal struct RpcTargetInterface([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods | DynamicallyAccessedMemberTypes.PublicEvents)] Type iface) + internal struct RpcTargetInterface { + public RpcTargetInterface([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods | DynamicallyAccessedMemberTypes.PublicEvents)] Type iface) + { + this.Interface = iface; + } + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods | DynamicallyAccessedMemberTypes.PublicEvents)] - public Type Interface => iface; + public Type Interface { get; } } /// diff --git a/test/NativeAOTCompatibility.Test/NativeAOTCompatibility.Test.csproj b/test/NativeAOTCompatibility.Test/NativeAOTCompatibility.Test.csproj index 9352f780..0f60cc88 100644 --- a/test/NativeAOTCompatibility.Test/NativeAOTCompatibility.Test.csproj +++ b/test/NativeAOTCompatibility.Test/NativeAOTCompatibility.Test.csproj @@ -2,7 +2,7 @@ - net8.0 + net10.0 false true true