From d58601649167ba6250e1d7f8a421565035d5c1ed Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Mon, 5 Feb 2024 10:35:12 -0600 Subject: [PATCH 1/8] [java.interop] address some "easy" trimmer warnings Context: https://github.com/xamarin/java.interop/issues/1157 On the path to enabling `IsAotCompatible`, we can enable some settings to get started: true true true This opts into the analyzers without declaring the assembly is fully AOT-compatible. Starting out, I got 33 warnings: this is an attempt to address the ones that don't require too much thinking. Unfortunately, solving 1 warning likely will create dozens more -- as you have to update all callers. This results in 24 warnings remaining. Since `Release` builds have `$(TreatWarningsAsErrors)`, I will wait to enable the analyzers until all warnings are addressed. ~~ Example Warnings ~~ `System.Linq.Expression` usage: src\Java.Interop\Java.Interop\JniRuntime.JniValueManager.cs(672,58): warning IL2026: Using member 'System.Linq.Expressions.Expression.Property(Expression, String)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. Creating Expressions requires unreferenced code because the members being referenced by the Expression may be trimmed. I decorated this one with: [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] `Type.GetNestedType()` usage: src\Java.Interop\Java.Interop\JniRuntime.JniTypeManager.cs(447,28): warning IL2070: 'this' argument does not satisfy 'DynamicallyAccessedMemberTypes.NonPublicNestedTypes' in call to 'System.Type.GetNestedType(String, BindingFlags)'. The parameter 'type' of method 'Java.Interop.JniRuntime.JniTypeManager.TryLoadJniMarshalMethods(JniType, Type, String)' does not have matching annotations. The source value must declare at least the same requirements as those declared on the target location it is assigned to. Added: [DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.NonPublicNestedTypes)] `Activator.CreateInstance()` usage: src\Java.Interop\Java.Interop\JniRuntime.JniValueManager.cs(542,33): warning IL2072: 'type' argument does not satisfy 'DynamicallyAccessedMemberTypes.PublicParameterlessConstructor' in call to 'System.Activator.CreateInstance(Type)'. The return value of method 'Java.Interop.JniValueMarshalerAttribute.MarshalerType.get' does not have matching annotations. The source value must declare at least the same requirements as those declared on the target location it is assigned to. Added: [return: DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] ~~ Code that Actually Changed ~~ As I enabled more attributes, these snowball into more and more warnings! I eventually had to make `GetPeerType()` look like: [return: DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] static Type GetPeerType ([DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] Type type) The analyzer was not able to understand code like: static readonly KeyValuePair[] PeerTypeMappings = new []{ new KeyValuePair(typeof (object), typeof (JavaObject)), new KeyValuePair(typeof (IJavaPeerable), typeof (JavaObject)), new KeyValuePair(typeof (Exception), typeof (JavaException)), }; //... foreach (var m in PeerTypeMappings) { if (m.Key == type) return m.Value; } Simply removing the `PeerTypeMappings` array and using `if` statements solved the warnings. This may be the only real code change if any. --- src/Java.Interop/Java.Interop.csproj | 4 + src/Java.Interop/Java.Interop/JavaArray.cs | 4 +- .../Java.Interop/JavaObjectArray.cs | 8 +- .../Java.Interop/JavaPrimitiveArrays.cs | 40 ++++++---- .../Java.Interop/JavaPrimitiveArrays.tt | 2 +- .../Java.Interop/JniBuiltinMarshalers.cs | 74 ++++++++++++------ .../JniRuntime.JniMarshalMemberBuilder.cs | 10 ++- .../Java.Interop/JniRuntime.JniTypeManager.cs | 22 +++--- .../JniRuntime.JniValueManager.cs | 77 ++++++++++++------- src/Java.Interop/Java.Interop/JniRuntime.cs | 2 +- .../Java.Interop/JniStringValueMarshaler.cs | 5 +- .../Java.Interop/JniValueMarshaler.cs | 17 ++-- .../JniValueMarshalerAttribute.cs | 6 +- src/Java.Interop/Java.Interop/ManagedPeer.cs | 8 +- 14 files changed, 182 insertions(+), 97 deletions(-) diff --git a/src/Java.Interop/Java.Interop.csproj b/src/Java.Interop/Java.Interop.csproj index 5f04bb680..51bb3a90d 100644 --- a/src/Java.Interop/Java.Interop.csproj +++ b/src/Java.Interop/Java.Interop.csproj @@ -14,6 +14,10 @@ true enable true + true + + + NU1702 diff --git a/src/Java.Interop/Java.Interop/JavaArray.cs b/src/Java.Interop/Java.Interop/JavaArray.cs index 5b05131b4..3b733bf54 100644 --- a/src/Java.Interop/Java.Interop/JavaArray.cs +++ b/src/Java.Interop/Java.Interop/JavaArray.cs @@ -12,6 +12,8 @@ namespace Java.Interop { public abstract class JavaArray : JavaObject, IList, IList { + internal const DynamicallyAccessedMemberTypes ConstructorsAndInterfaces = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors | DynamicallyAccessedMemberTypes.Interfaces; + internal delegate TArray ArrayCreator (ref JniObjectReference reference, JniObjectReferenceOptions transfer) where TArray : JavaArray; @@ -362,7 +364,7 @@ public void Dispose () } } - public abstract class JavaPrimitiveArray : JavaArray { + public abstract class JavaPrimitiveArray<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T> : JavaArray { internal JavaPrimitiveArray (ref JniObjectReference reference, JniObjectReferenceOptions transfer) : base (ref reference, transfer) diff --git a/src/Java.Interop/Java.Interop/JavaObjectArray.cs b/src/Java.Interop/Java.Interop/JavaObjectArray.cs index 89fe35e0e..ad0d2b264 100644 --- a/src/Java.Interop/Java.Interop/JavaObjectArray.cs +++ b/src/Java.Interop/Java.Interop/JavaObjectArray.cs @@ -1,4 +1,4 @@ -#nullable enable +#nullable enable using System; using System.Collections.Generic; @@ -7,7 +7,7 @@ namespace Java.Interop { - public class JavaObjectArray : JavaArray + public class JavaObjectArray<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T> : JavaArray { internal static readonly ValueMarshaler Instance = new ValueMarshaler (); @@ -164,7 +164,7 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { return JavaArray.CreateValue (ref reference, options, targetType, (ref JniObjectReference h, JniObjectReferenceOptions t) => new JavaObjectArray (ref h, t) { forMarshalCollection = true, @@ -194,7 +194,7 @@ partial class JniEnvironment { [SuppressMessage ("Design", "CA1034", Justification = "https://github.com/xamarin/Java.Interop/commit/bb7ca5d02aa3fc2b447ad57af1256e74e5f954fa")] partial class Arrays { - public static JavaObjectArray? CreateMarshalObjectArray (IEnumerable? value) + public static JavaObjectArray? CreateMarshalObjectArray<[DynamicallyAccessedMembers (JavaArray.ConstructorsAndInterfaces)] T> (IEnumerable? value) { if (value == null) { return null; diff --git a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs index 1aa030839..bc8c8f152 100644 --- a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs +++ b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs @@ -244,14 +244,14 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaBooleanArray) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, Type? targetType) + public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers(JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -276,6 +276,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList val JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaBooleanArray.CreateMarshaledValue; @@ -439,14 +440,14 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaSByteArray) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, Type? targetType) + public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -471,6 +472,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaSByteArray.CreateMarshaledValue; @@ -634,14 +636,14 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaCharArray) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, Type? targetType) + public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -666,6 +668,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value, JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaCharArray.CreateMarshaledValue; @@ -829,14 +832,14 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaInt16Array) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, Type? targetType) + public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -861,6 +864,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaInt16Array.CreateMarshaledValue; @@ -1024,14 +1028,14 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaInt32Array) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, Type? targetType) + public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -1056,6 +1060,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaInt32Array.CreateMarshaledValue; @@ -1219,14 +1224,14 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaInt64Array) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, Type? targetType) + public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -1251,6 +1256,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaInt64Array.CreateMarshaledValue; @@ -1414,14 +1420,14 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaSingleArray) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, Type? targetType) + public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -1446,6 +1452,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList valu JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaSingleArray.CreateMarshaledValue; @@ -1609,14 +1616,14 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaDoubleArray) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, Type? targetType) + public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -1641,6 +1648,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList valu JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaDoubleArray.CreateMarshaledValue; diff --git a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt index c644d61f6..949c146ae 100644 --- a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt +++ b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt @@ -248,7 +248,7 @@ namespace Java.Interop { internal sealed class ValueMarshaler : JniValueMarshaler>> { - public override IList<<#= info.TypeModifier #>> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override IList<<#= info.TypeModifier #>> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { return JavaArray<<#= info.TypeModifier #>>.CreateValue ( ref reference, diff --git a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs index b75e46b6d..b1c4b6c25 100644 --- a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs +++ b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs @@ -1,4 +1,4 @@ -#nullable enable +#nullable enable using System; using System.Collections.Generic; @@ -223,14 +223,14 @@ public override Type MarshalType { get {return typeof (Boolean);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Boolean CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Boolean CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return default (Boolean); @@ -263,16 +263,19 @@ public override void DestroyGenericArgumentState (Boolean value, ref JniValueMar state = new JniValueMarshalerState (); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -283,7 +286,7 @@ sealed class JniNullableBooleanValueMarshaler : JniValueMarshaler { internal static readonly JniNullableBooleanValueMarshaler Instance = new JniNullableBooleanValueMarshaler (); - public override Boolean? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Boolean? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; @@ -350,14 +353,14 @@ public override Type MarshalType { get {return typeof (SByte);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override SByte CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override SByte CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return default (SByte); @@ -390,16 +393,19 @@ public override void DestroyGenericArgumentState (SByte value, ref JniValueMarsh state = new JniValueMarshalerState (); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -410,7 +416,7 @@ sealed class JniNullableSByteValueMarshaler : JniValueMarshaler { internal static readonly JniNullableSByteValueMarshaler Instance = new JniNullableSByteValueMarshaler (); - public override SByte? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override SByte? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; @@ -477,14 +483,14 @@ public override Type MarshalType { get {return typeof (Char);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Char CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Char CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return default (Char); @@ -517,16 +523,19 @@ public override void DestroyGenericArgumentState (Char value, ref JniValueMarsha state = new JniValueMarshalerState (); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -537,7 +546,7 @@ sealed class JniNullableCharValueMarshaler : JniValueMarshaler { internal static readonly JniNullableCharValueMarshaler Instance = new JniNullableCharValueMarshaler (); - public override Char? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Char? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; @@ -604,14 +613,14 @@ public override Type MarshalType { get {return typeof (Int16);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Int16 CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Int16 CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return default (Int16); @@ -644,16 +653,19 @@ public override void DestroyGenericArgumentState (Int16 value, ref JniValueMarsh state = new JniValueMarshalerState (); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -664,7 +676,7 @@ sealed class JniNullableInt16ValueMarshaler : JniValueMarshaler { internal static readonly JniNullableInt16ValueMarshaler Instance = new JniNullableInt16ValueMarshaler (); - public override Int16? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Int16? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; @@ -731,14 +743,14 @@ public override Type MarshalType { get {return typeof (Int32);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Int32 CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Int32 CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return default (Int32); @@ -771,16 +783,19 @@ public override void DestroyGenericArgumentState (Int32 value, ref JniValueMarsh state = new JniValueMarshalerState (); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -791,7 +806,7 @@ sealed class JniNullableInt32ValueMarshaler : JniValueMarshaler { internal static readonly JniNullableInt32ValueMarshaler Instance = new JniNullableInt32ValueMarshaler (); - public override Int32? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Int32? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; @@ -858,14 +873,14 @@ public override Type MarshalType { get {return typeof (Int64);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Int64 CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Int64 CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return default (Int64); @@ -898,16 +913,19 @@ public override void DestroyGenericArgumentState (Int64 value, ref JniValueMarsh state = new JniValueMarshalerState (); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -918,7 +936,7 @@ sealed class JniNullableInt64ValueMarshaler : JniValueMarshaler { internal static readonly JniNullableInt64ValueMarshaler Instance = new JniNullableInt64ValueMarshaler (); - public override Int64? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Int64? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; @@ -985,14 +1003,14 @@ public override Type MarshalType { get {return typeof (Single);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Single CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Single CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return default (Single); @@ -1025,16 +1043,19 @@ public override void DestroyGenericArgumentState (Single value, ref JniValueMars state = new JniValueMarshalerState (); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -1045,7 +1066,7 @@ sealed class JniNullableSingleValueMarshaler : JniValueMarshaler { internal static readonly JniNullableSingleValueMarshaler Instance = new JniNullableSingleValueMarshaler (); - public override Single? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Single? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; @@ -1112,14 +1133,14 @@ public override Type MarshalType { get {return typeof (Double);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Double CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Double CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return default (Double); @@ -1152,16 +1173,19 @@ public override void DestroyGenericArgumentState (Double value, ref JniValueMars state = new JniValueMarshalerState (); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -1172,7 +1196,7 @@ sealed class JniNullableDoubleValueMarshaler : JniValueMarshaler { internal static readonly JniNullableDoubleValueMarshaler Instance = new JniNullableDoubleValueMarshaler (); - public override Double? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override Double? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { if (!reference.IsValid) return null; diff --git a/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs b/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs index 11fabae92..b42db6207 100644 --- a/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs +++ b/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs @@ -1,4 +1,4 @@ -#nullable enable +#nullable enable using System; using System.Collections.Generic; @@ -31,6 +31,7 @@ public JniMarshalMemberBuilder MarshalMemberBuilder { #if NET [DynamicDependency (DynamicallyAccessedMemberTypes.PublicParameterlessConstructor, "Java.Interop.MarshalMemberBuilder", "Java.Interop.Export")] [UnconditionalSuppressMessage ("Trimming", "IL2026", Justification = "DynamicDependency should preserve the constructor.")] + [UnconditionalSuppressMessage ("Trimming", "IL2072", Justification = "DynamicDependency should preserve the constructor.")] [UnconditionalSuppressMessage ("Trimming", "IL2035", Justification = "Java.Interop.Export.dll is not always present.")] #endif partial void SetMarshalMemberBuilder (CreationOptions options) @@ -179,28 +180,31 @@ public bool IsDirectMethod (ParameterInfo[] methodParameters) sealed class IntPtrValueMarshaler : JniValueMarshaler { internal static IntPtrValueMarshaler Instance = new IntPtrValueMarshaler (); + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (Java.Interop.Expressions.JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (Java.Interop.Expressions.JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (Java.Interop.Expressions.JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { throw new NotSupportedException (); } - public override IntPtr CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override IntPtr CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { throw new NotSupportedException (); } diff --git a/src/Java.Interop/Java.Interop/JniRuntime.JniTypeManager.cs b/src/Java.Interop/Java.Interop/JniRuntime.JniTypeManager.cs index 6251e48ee..748fe6846 100644 --- a/src/Java.Interop/Java.Interop/JniRuntime.JniTypeManager.cs +++ b/src/Java.Interop/Java.Interop/JniRuntime.JniTypeManager.cs @@ -1,4 +1,4 @@ -#nullable enable +#nullable enable using System; using System.Collections.Generic; @@ -81,6 +81,10 @@ public override string ToString () public partial class JniTypeManager : IDisposable, ISetRuntime { + internal const DynamicallyAccessedMemberTypes Methods = DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods; + internal const DynamicallyAccessedMemberTypes MethodsAndPrivateNested = Methods | DynamicallyAccessedMemberTypes.NonPublicNestedTypes; + internal const DynamicallyAccessedMemberTypes MethodsConstructorsInterfaces = MethodsAndPrivateNested | DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors | DynamicallyAccessedMemberTypes.Interfaces; + JniRuntime? runtime; bool disposed; @@ -267,7 +271,7 @@ protected virtual IEnumerable GetSimpleReferences (Type type) static readonly Type[] EmptyTypeArray = Array.Empty (); - [return: DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] + [return: DynamicallyAccessedMembers (MethodsConstructorsInterfaces)] public Type? GetType (JniTypeSignature typeSignature) { AssertValid (); @@ -405,12 +409,12 @@ IEnumerable CreateGetTypesForSimpleReferenceEnumerator (string jniSimpleRe protected virtual ReplacementMethodInfo? GetReplacementMethodInfoCore (string jniSimpleReference, string jniMethodName, string jniMethodSignature) => null; - public virtual void RegisterNativeMembers (JniType nativeClass, Type type, ReadOnlySpan methods) + public virtual void RegisterNativeMembers (JniType nativeClass, [DynamicallyAccessedMembers (MethodsAndPrivateNested)] Type type, ReadOnlySpan methods) { TryRegisterNativeMembers (nativeClass, type, methods); } - protected bool TryRegisterNativeMembers (JniType nativeClass, Type type, ReadOnlySpan methods) + protected bool TryRegisterNativeMembers (JniType nativeClass, [DynamicallyAccessedMembers (MethodsAndPrivateNested)] Type type, ReadOnlySpan methods) { AssertValid (); @@ -425,7 +429,7 @@ protected bool TryRegisterNativeMembers (JniType nativeClass, Type type, ReadOnl #if NET [Obsolete ("Use RegisterNativeMembers(JniType, Type, ReadOnlySpan)")] #endif // NET - public virtual void RegisterNativeMembers (JniType nativeClass, Type type, string? methods) + public virtual void RegisterNativeMembers (JniType nativeClass, [DynamicallyAccessedMembers (MethodsAndPrivateNested)] Type type, string? methods) { TryRegisterNativeMembers (nativeClass, type, methods); } @@ -433,7 +437,7 @@ public virtual void RegisterNativeMembers (JniType nativeClass, Type type, strin #if NET [Obsolete ("Use RegisterNativeMembers(JniType, Type, ReadOnlySpan)")] #endif // NET - protected bool TryRegisterNativeMembers (JniType nativeClass, Type type, string? methods) + protected bool TryRegisterNativeMembers (JniType nativeClass, [DynamicallyAccessedMembers (MethodsAndPrivateNested)] Type type, string? methods) { AssertValid (); @@ -442,7 +446,7 @@ protected bool TryRegisterNativeMembers (JniType nativeClass, Type type, string? static Type [] registerMethodParameters = new Type [] { typeof (JniNativeMethodRegistrationArguments) }; - bool TryLoadJniMarshalMethods (JniType nativeClass, Type type, string? methods) + bool TryLoadJniMarshalMethods (JniType nativeClass, [DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.NonPublicNestedTypes)] Type type, string? methods) { var marshalType = type?.GetNestedType ("__<$>_jni_marshal_methods", BindingFlags.NonPublic); if (marshalType == null) { @@ -461,7 +465,7 @@ bool TryLoadJniMarshalMethods (JniType nativeClass, Type type, string? methods) static List sharedRegistrations = new List (); - bool TryRegisterNativeMembers (JniType nativeClass, Type marshalType, string? methods, MethodInfo? registerMethod) + bool TryRegisterNativeMembers (JniType nativeClass, [DynamicallyAccessedMembers (Methods)] Type marshalType, string? methods, MethodInfo? registerMethod) { bool lockTaken = false; bool rv = false; @@ -493,7 +497,7 @@ bool TryRegisterNativeMembers (JniType nativeClass, Type marshalType, string? me return rv; } - bool FindAndCallRegisterMethod (Type marshalType, JniNativeMethodRegistrationArguments arguments) + bool FindAndCallRegisterMethod ([DynamicallyAccessedMembers (Methods)] Type marshalType, JniNativeMethodRegistrationArguments arguments) { if (!Runtime.JniAddNativeMethodRegistrationAttributePresent) return false; diff --git a/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs b/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs index 691ef7b51..b4b1fe486 100644 --- a/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs +++ b/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs @@ -49,6 +49,9 @@ partial void SetValueManager (CreationOptions options) public abstract partial class JniValueManager : ISetRuntime, IDisposable { + internal const DynamicallyAccessedMemberTypes Constructors = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors; + internal const DynamicallyAccessedMemberTypes ConstructorsAndInterfaces = Constructors | DynamicallyAccessedMemberTypes.Interfaces; + JniRuntime? runtime; bool disposed; public JniRuntime Runtime { @@ -252,22 +255,19 @@ protected virtual bool TryUnboxPeerObject (IJavaPeerable value, [NotNullWhen (tr : null; } - static readonly KeyValuePair[] PeerTypeMappings = new []{ - new KeyValuePair(typeof (object), typeof (JavaObject)), - new KeyValuePair(typeof (IJavaPeerable), typeof (JavaObject)), - new KeyValuePair(typeof (Exception), typeof (JavaException)), - }; - - static Type GetPeerType (Type type) + [return: DynamicallyAccessedMembers (Constructors)] + static Type GetPeerType ([DynamicallyAccessedMembers (Constructors)] Type type) { - foreach (var m in PeerTypeMappings) { - if (m.Key == type) - return m.Value; - } + if (type == typeof (object)) + return typeof (JavaObject); + if (type == typeof (IJavaPeerable)) + return typeof (JavaObject); + if (type == typeof (Exception)) + return typeof (JavaException); return type; } - public virtual IJavaPeerable? CreatePeer (ref JniObjectReference reference, JniObjectReferenceOptions transfer, Type? targetType) + public virtual IJavaPeerable? CreatePeer (ref JniObjectReference reference, JniObjectReferenceOptions transfer, [DynamicallyAccessedMembers (Constructors)] Type? targetType) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -298,7 +298,7 @@ static Type GetPeerType (Type type) static readonly Type ByRefJniObjectReference = typeof (JniObjectReference).MakeByRefType (); - ConstructorInfo? GetPeerConstructor (JniObjectReference instance, Type fallbackType) + ConstructorInfo? GetPeerConstructor (JniObjectReference instance, [DynamicallyAccessedMembers (Constructors)] Type fallbackType) { var klass = JniEnvironment.Types.GetObjectClass (instance); var jniTypeName = JniEnvironment.Types.GetJniTypeNameFromClass (klass); @@ -333,7 +333,7 @@ static Type GetPeerType (Type type) return GetActivationConstructor (fallbackType); } - static ConstructorInfo? GetActivationConstructor (Type type) + static ConstructorInfo? GetActivationConstructor ([DynamicallyAccessedMembers (Constructors)] Type type) { if (type.IsAbstract || type.IsInterface) { type = GetInvokerType (type) ?? type; @@ -346,6 +346,7 @@ static Type GetPeerType (Type type) return null; } + [return: DynamicallyAccessedMembers (Constructors)] static Type? GetInvokerType (Type type) { const string suffix = "Invoker"; @@ -363,7 +364,7 @@ static Type GetPeerType (Type type) return suffixDefinition.MakeGenericType (arguments); } - public object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType = null) + public object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType = null) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -393,7 +394,14 @@ static Type GetPeerType (Type type) } [return: MaybeNull] - public T CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType = null) + public T CreateValue< + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + T + > ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType = null) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -430,6 +438,7 @@ public T CreateValue (ref JniObjectReference reference, JniObjectReferenceOpt return marshaler.CreateGenericValue (ref reference, options, targetType); } + [return: DynamicallyAccessedMembers (ConstructorsAndInterfaces)] internal Type? GetRuntimeType (JniObjectReference reference) { if (!reference.IsValid) @@ -440,7 +449,7 @@ public T CreateValue (ref JniObjectReference reference, JniObjectReferenceOpt return Runtime.TypeManager.GetType (signature); } - public object? GetValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType = null) + public object? GetValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType = null) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -468,14 +477,21 @@ public T CreateValue (ref JniObjectReference reference, JniObjectReferenceOpt } [return: MaybeNull] - public T GetValue (IntPtr handle) + public T GetValue<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T> (IntPtr handle) { var r = new JniObjectReference (handle); return GetValue (ref r, JniObjectReferenceOptions.Copy); } [return: MaybeNull] - public T GetValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType = null) + public T GetValue< + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + T + > ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType = null) { if (!reference.IsValid) { #pragma warning disable 8653 @@ -511,7 +527,7 @@ public T GetValue (ref JniObjectReference reference, JniObjectReferenceOption Dictionary Marshalers = new Dictionary (); - public JniValueMarshaler GetValueMarshaler() + public JniValueMarshaler GetValueMarshaler<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T>() { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -527,7 +543,7 @@ public JniValueMarshaler GetValueMarshaler() } } - public JniValueMarshaler GetValueMarshaler (Type type) + public JniValueMarshaler GetValueMarshaler ([DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.Interfaces)] Type type) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -599,7 +615,7 @@ static JniValueMarshaler GetObjectArrayMarshaler (Type elementType) return direct (); } - static JniValueMarshaler GetObjectArrayMarshalerHelper () + static JniValueMarshaler GetObjectArrayMarshalerHelper<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T> () { return JavaObjectArray.Instance; } @@ -619,7 +635,7 @@ public override Type MarshalType { get {return typeof (void);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { throw new NotSupportedException (); } @@ -640,7 +656,7 @@ sealed class JavaPeerableValueMarshaler : JniValueMarshaler { internal static JavaPeerableValueMarshaler Instance = new JavaPeerableValueMarshaler (); [return: MaybeNull] - public override IJavaPeerable? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override IJavaPeerable? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { var jvm = JniEnvironment.Runtime; var marshaler = jvm.ValueManager.GetValueMarshaler (targetType ?? typeof(IJavaPeerable)); @@ -664,6 +680,7 @@ public override void DestroyGenericArgumentState ([MaybeNull]IJavaPeerable? valu state = new JniValueMarshalerState (); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { var r = CreateIntermediaryExpressionFromManagedExpression (context, sourceValue); @@ -674,6 +691,7 @@ public override Expression CreateParameterFromManagedExpression (JniValueMarshal return h; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] Expression CreateIntermediaryExpressionFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { var r = Expression.Variable (typeof (JniObjectReference), sourceValue.Name + "_ref"); @@ -687,11 +705,13 @@ Expression CreateIntermediaryExpressionFromManagedExpression (JniValueMarshalerC return r; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return ReturnObjectReferenceToJni (context, sourceValue.Name, CreateIntermediaryExpressionFromManagedExpression (context, sourceValue)); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { targetType ??= typeof (object); @@ -709,7 +729,7 @@ public override Expression CreateParameterToManagedExpression (JniValueMarshaler } } - sealed class DelegatingValueMarshaler : JniValueMarshaler { + sealed class DelegatingValueMarshaler<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T> : JniValueMarshaler { JniValueMarshaler ValueMarshaler; @@ -719,7 +739,7 @@ public DelegatingValueMarshaler (JniValueMarshaler valueMarshaler) } [return: MaybeNull] - public override T CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override T CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { return (T) ValueMarshaler.CreateValue (ref reference, options, targetType ?? typeof (T))!; } @@ -734,16 +754,19 @@ public override void DestroyGenericArgumentState ([AllowNull]T value, ref JniVal ValueMarshaler.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return ValueMarshaler.CreateParameterFromManagedExpression (context, sourceValue, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return ValueMarshaler.CreateParameterToManagedExpression (context, sourceValue, synchronize, targetType); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return ValueMarshaler.CreateReturnValueFromManagedExpression (context, sourceValue); @@ -755,7 +778,7 @@ sealed class ProxyValueMarshaler : JniValueMarshaler { internal static ProxyValueMarshaler Instance = new ProxyValueMarshaler (); [return: MaybeNull] - public override object? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override object? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { var jvm = JniEnvironment.Runtime; diff --git a/src/Java.Interop/Java.Interop/JniRuntime.cs b/src/Java.Interop/Java.Interop/JniRuntime.cs index 75b1b4485..57b1bb721 100644 --- a/src/Java.Interop/Java.Interop/JniRuntime.cs +++ b/src/Java.Interop/Java.Interop/JniRuntime.cs @@ -271,7 +271,7 @@ T SetRuntime (T value) static unsafe JavaVMInterface CreateInvoker (IntPtr handle) { IntPtr p = Marshal.ReadIntPtr (handle); - return (JavaVMInterface) Marshal.PtrToStructure (p, typeof (JavaVMInterface))!; + return (JavaVMInterface) Marshal.PtrToStructure (p)!; } ~JniRuntime () diff --git a/src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs b/src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs index e16e00886..8b99829da 100644 --- a/src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs +++ b/src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs @@ -14,7 +14,7 @@ sealed class JniStringValueMarshaler : JniValueMarshaler { internal static readonly JniStringValueMarshaler Instance = new JniStringValueMarshaler (); - public override string? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override string? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { return JniEnvironment.Strings.ToString (ref reference, options, targetType ?? typeof (string)); } @@ -32,6 +32,7 @@ public override void DestroyGenericArgumentState (string? value, ref JniValueMar state = new JniValueMarshalerState (); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { Func m = JniEnvironment.Strings.NewString; @@ -46,6 +47,7 @@ public override Expression CreateParameterFromManagedExpression (JniValueMarshal return hdl; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { Func m = JniEnvironment.Strings.NewString; @@ -57,6 +59,7 @@ public override Expression CreateReturnValueFromManagedExpression (JniValueMarsh return ReturnObjectReferenceToJni (context, sourceValue.Name, obj); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { Func m = JniEnvironment.Strings.ToString; diff --git a/src/Java.Interop/Java.Interop/JniValueMarshaler.cs b/src/Java.Interop/Java.Interop/JniValueMarshaler.cs index d3351c358..d1fdf851f 100644 --- a/src/Java.Interop/Java.Interop/JniValueMarshaler.cs +++ b/src/Java.Interop/Java.Interop/JniValueMarshaler.cs @@ -120,6 +120,9 @@ public override string ToString () public abstract class JniValueMarshaler { + internal const DynamicallyAccessedMemberTypes ConstructorsAndInterfaces = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors | DynamicallyAccessedMemberTypes.Interfaces; + internal const string ExpressionRequiresUnreferencedCode = "System.Linq.Expression usage may trim away required code."; + public virtual bool IsJniValueType { get {return false;} } @@ -129,7 +132,7 @@ public virtual Type MarshalType { get {return IntPtr_type;} } - public abstract object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType = null); + public abstract object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType = null); public virtual JniValueMarshalerState CreateArgumentState (object? value, ParameterAttributes synchronize = 0) { @@ -139,12 +142,13 @@ public virtual JniValueMarshalerState CreateArgumentState (object? value, public abstract JniValueMarshalerState CreateObjectReferenceArgumentState (object? value, ParameterAttributes synchronize = 0); public abstract void DestroyArgumentState (object? value, ref JniValueMarshalerState state, ParameterAttributes synchronize = 0); - internal object? CreateValue (IntPtr handle, Type? targetType) + internal object? CreateValue (IntPtr handle, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) { var r = new JniObjectReference (handle); return CreateValue (ref r, JniObjectReferenceOptions.Copy, targetType); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public virtual Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = CreateValue; @@ -165,6 +169,7 @@ Expression CreateSelf (JniValueMarshalerContext context, ParameterExpression sou return self; } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public virtual Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { CreateParameterFromManagedExpression (context, sourceValue, 0); @@ -186,6 +191,8 @@ protected Expression ReturnObjectReferenceToJni (JniValueMarshalerContext contex } delegate void DestroyArgumentStateCb (object value, ref JniValueMarshalerState state, ParameterAttributes synchronize); + + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public virtual Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { Func c = CreateArgumentState; @@ -216,10 +223,10 @@ protected static Expression DisposeObjectReference (Expression sourceValue) } } - public abstract class JniValueMarshaler : JniValueMarshaler { + public abstract class JniValueMarshaler<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T> : JniValueMarshaler { [return: MaybeNull] - public abstract T CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType = null); + public abstract T CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType = null); public virtual JniValueMarshalerState CreateGenericArgumentState ([MaybeNull] T value, ParameterAttributes synchronize = 0) { @@ -229,7 +236,7 @@ public virtual JniValueMarshalerState CreateGenericArgumentState ([MaybeNu public abstract JniValueMarshalerState CreateGenericObjectReferenceArgumentState ([MaybeNull] T value, ParameterAttributes synchronize = 0); public abstract void DestroyGenericArgumentState ([AllowNull] T value, ref JniValueMarshalerState state, ParameterAttributes synchronize = 0); - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType = null) + public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType = null) { return CreateGenericValue (ref reference, options, targetType ?? typeof (T)); } diff --git a/src/Java.Interop/Java.Interop/JniValueMarshalerAttribute.cs b/src/Java.Interop/Java.Interop/JniValueMarshalerAttribute.cs index 9e94157a3..f4869fcf1 100644 --- a/src/Java.Interop/Java.Interop/JniValueMarshalerAttribute.cs +++ b/src/Java.Interop/Java.Interop/JniValueMarshalerAttribute.cs @@ -1,6 +1,7 @@ #nullable enable using System; +using System.Diagnostics.CodeAnalysis; using System.Reflection; namespace Java.Interop { @@ -25,7 +26,10 @@ public JniValueMarshalerAttribute (Type marshalerType) MarshalerType = marshalerType; } - public Type MarshalerType {get;} + public Type MarshalerType { + [return: DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] + get; + } } } diff --git a/src/Java.Interop/Java.Interop/ManagedPeer.cs b/src/Java.Interop/Java.Interop/ManagedPeer.cs index b23277fde..ecf3fe624 100644 --- a/src/Java.Interop/Java.Interop/ManagedPeer.cs +++ b/src/Java.Interop/Java.Interop/ManagedPeer.cs @@ -1,4 +1,4 @@ -#nullable enable +#nullable enable using System; using System.Collections.Generic; @@ -17,6 +17,8 @@ namespace Java.Interop { /* static */ sealed class ManagedPeer : JavaObject { internal const string JniTypeName = "net/dot/jni/ManagedPeer"; + internal const DynamicallyAccessedMemberTypes Constructors = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors; + internal const DynamicallyAccessedMemberTypes ConstructorsMethodsNestedTypes = Constructors | DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods | DynamicallyAccessedMemberTypes.NonPublicNestedTypes; static readonly JniPeerMembers _members = new JniPeerMembers (JniTypeName, typeof (ManagedPeer)); @@ -140,7 +142,7 @@ static Exception CreateJniLocationException () static Dictionary ConstructorCache = new Dictionary (); - static ConstructorInfo? GetConstructor (Type type, string jniTypeName, string signature) + static ConstructorInfo? GetConstructor ([DynamicallyAccessedMembers (Constructors)] Type type, string jniTypeName, string signature) { var ctorCacheKey = jniTypeName + "." + signature; lock (ConstructorCache) { @@ -290,7 +292,7 @@ static unsafe void RegisterNativeMembers ( } } - [return: DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] + [return: DynamicallyAccessedMembers (ConstructorsMethodsNestedTypes)] static Type GetTypeFromSignature (JniRuntime.JniTypeManager typeManager, JniTypeSignature typeSignature, string? context = null) { return typeManager.GetType (typeSignature) ?? From 7dba0dcdf89d694c80d3ef5cd63db4b084d2d122 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 8 Feb 2024 16:27:58 -0600 Subject: [PATCH 2/8] Code formatting/new lines --- src/Java.Interop/Java.Interop/JavaArray.cs | 7 +- .../Java.Interop/JavaObjectArray.cs | 18 ++- .../Java.Interop/JavaPrimitiveArrays.cs | 48 +++++- .../Java.Interop/JavaPrimitiveArrays.tt | 6 +- .../Java.Interop/JniBuiltinMarshalers.cs | 144 +++++++++++++++--- .../Java.Interop/JniBuiltinMarshalers.tt | 20 ++- .../JniRuntime.JniMarshalMemberBuilder.cs | 12 +- .../JniRuntime.JniValueManager.cs | 47 +++++- .../Java.Interop/JniStringValueMarshaler.cs | 6 +- .../Java.Interop/JniValueMarshaler.cs | 13 +- 10 files changed, 267 insertions(+), 54 deletions(-) diff --git a/src/Java.Interop/Java.Interop/JavaArray.cs b/src/Java.Interop/Java.Interop/JavaArray.cs index 3b733bf54..e49eee31e 100644 --- a/src/Java.Interop/Java.Interop/JavaArray.cs +++ b/src/Java.Interop/Java.Interop/JavaArray.cs @@ -364,7 +364,12 @@ public void Dispose () } } - public abstract class JavaPrimitiveArray<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T> : JavaArray { + public abstract class JavaPrimitiveArray< + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + T + > + : JavaArray + { internal JavaPrimitiveArray (ref JniObjectReference reference, JniObjectReferenceOptions transfer) : base (ref reference, transfer) diff --git a/src/Java.Interop/Java.Interop/JavaObjectArray.cs b/src/Java.Interop/Java.Interop/JavaObjectArray.cs index ad0d2b264..020a24b59 100644 --- a/src/Java.Interop/Java.Interop/JavaObjectArray.cs +++ b/src/Java.Interop/Java.Interop/JavaObjectArray.cs @@ -7,7 +7,11 @@ namespace Java.Interop { - public class JavaObjectArray<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T> : JavaArray + public class JavaObjectArray< + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + T + > + : JavaArray { internal static readonly ValueMarshaler Instance = new ValueMarshaler (); @@ -164,7 +168,11 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override IList CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue (ref reference, options, targetType, (ref JniObjectReference h, JniObjectReferenceOptions t) => new JavaObjectArray (ref h, t) { forMarshalCollection = true, @@ -194,7 +202,11 @@ partial class JniEnvironment { [SuppressMessage ("Design", "CA1034", Justification = "https://github.com/xamarin/Java.Interop/commit/bb7ca5d02aa3fc2b447ad57af1256e74e5f954fa")] partial class Arrays { - public static JavaObjectArray? CreateMarshalObjectArray<[DynamicallyAccessedMembers (JavaArray.ConstructorsAndInterfaces)] T> (IEnumerable? value) + public static JavaObjectArray? CreateMarshalObjectArray< + [DynamicallyAccessedMembers (JavaArray.ConstructorsAndInterfaces)] + T + > ( + IEnumerable? value) { if (value == null) { return null; diff --git a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs index bc8c8f152..5162fca54 100644 --- a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs +++ b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs @@ -251,7 +251,11 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override IList CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -447,7 +451,11 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override IList CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -643,7 +651,11 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override IList CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -839,7 +851,11 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override IList CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -1035,7 +1051,11 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override IList CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -1231,7 +1251,11 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override IList CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -1427,7 +1451,11 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override IList CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -1623,7 +1651,11 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { - public override IList CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override IList CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, diff --git a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt index 949c146ae..6f7f47e95 100644 --- a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt +++ b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt @@ -248,7 +248,11 @@ namespace Java.Interop { internal sealed class ValueMarshaler : JniValueMarshaler>> { - public override IList<<#= info.TypeModifier #>> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override IList<<#= info.TypeModifier #>> CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray<<#= info.TypeModifier #>>.CreateValue ( ref reference, diff --git a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs index b1c4b6c25..ec3c1632c 100644 --- a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs +++ b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs @@ -223,14 +223,22 @@ public override Type MarshalType { get {return typeof (Boolean);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Boolean CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Boolean CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Boolean); @@ -286,7 +294,11 @@ sealed class JniNullableBooleanValueMarshaler : JniValueMarshaler { internal static readonly JniNullableBooleanValueMarshaler Instance = new JniNullableBooleanValueMarshaler (); - public override Boolean? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Boolean? CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -353,14 +365,22 @@ public override Type MarshalType { get {return typeof (SByte);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override SByte CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override SByte CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (SByte); @@ -416,7 +436,11 @@ sealed class JniNullableSByteValueMarshaler : JniValueMarshaler { internal static readonly JniNullableSByteValueMarshaler Instance = new JniNullableSByteValueMarshaler (); - public override SByte? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override SByte? CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -483,14 +507,22 @@ public override Type MarshalType { get {return typeof (Char);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Char CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Char CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Char); @@ -546,7 +578,11 @@ sealed class JniNullableCharValueMarshaler : JniValueMarshaler { internal static readonly JniNullableCharValueMarshaler Instance = new JniNullableCharValueMarshaler (); - public override Char? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Char? CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -613,14 +649,22 @@ public override Type MarshalType { get {return typeof (Int16);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Int16 CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Int16 CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Int16); @@ -676,7 +720,11 @@ sealed class JniNullableInt16ValueMarshaler : JniValueMarshaler { internal static readonly JniNullableInt16ValueMarshaler Instance = new JniNullableInt16ValueMarshaler (); - public override Int16? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Int16? CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -743,14 +791,22 @@ public override Type MarshalType { get {return typeof (Int32);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Int32 CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Int32 CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Int32); @@ -806,7 +862,11 @@ sealed class JniNullableInt32ValueMarshaler : JniValueMarshaler { internal static readonly JniNullableInt32ValueMarshaler Instance = new JniNullableInt32ValueMarshaler (); - public override Int32? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Int32? CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -873,14 +933,22 @@ public override Type MarshalType { get {return typeof (Int64);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Int64 CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Int64 CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Int64); @@ -936,7 +1004,11 @@ sealed class JniNullableInt64ValueMarshaler : JniValueMarshaler { internal static readonly JniNullableInt64ValueMarshaler Instance = new JniNullableInt64ValueMarshaler (); - public override Int64? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Int64? CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -1003,14 +1075,22 @@ public override Type MarshalType { get {return typeof (Single);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Single CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Single CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Single); @@ -1066,7 +1146,11 @@ sealed class JniNullableSingleValueMarshaler : JniValueMarshaler { internal static readonly JniNullableSingleValueMarshaler Instance = new JniNullableSingleValueMarshaler (); - public override Single? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Single? CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -1133,14 +1217,22 @@ public override Type MarshalType { get {return typeof (Double);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override Double CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Double CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Double); @@ -1196,7 +1288,11 @@ sealed class JniNullableDoubleValueMarshaler : JniValueMarshaler { internal static readonly JniNullableDoubleValueMarshaler Instance = new JniNullableDoubleValueMarshaler (); - public override Double? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override Double? CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; diff --git a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.tt b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.tt index d5910cf62..370387414 100644 --- a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.tt +++ b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.tt @@ -1,4 +1,4 @@ -<#@ template language="C#" #> +<#@ template language="C#" #> <#@ assembly name="System.Core" #> <#@ import namespace="System.Collections.Generic" #> <#@ import namespace="System.Linq" #> @@ -181,14 +181,22 @@ namespace Java.Interop { get {return typeof (<#= type.Type #>);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; return CreateGenericValue (ref reference, options, targetType); } - public override <#= type.Type #> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override <#= type.Type #> CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (<#= type.Type #>); @@ -241,7 +249,11 @@ namespace Java.Interop { internal static readonly JniNullable<#= type.Type #>ValueMarshaler Instance = new JniNullable<#= type.Type #>ValueMarshaler (); - public override <#= type.Type #>? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType) + public override <#= type.Type #>? CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; diff --git a/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs b/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs index b42db6207..da82be5f2 100644 --- a/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs +++ b/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs @@ -199,12 +199,20 @@ public override Expression CreateReturnValueFromManagedExpression (Java.Interop. } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { throw new NotSupportedException (); } - public override IntPtr CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override IntPtr CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { throw new NotSupportedException (); } diff --git a/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs b/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs index b4b1fe486..f4ea1fc9b 100644 --- a/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs +++ b/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs @@ -477,7 +477,11 @@ public T CreateValue< } [return: MaybeNull] - public T GetValue<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T> (IntPtr handle) + public T GetValue< + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + T + > ( + IntPtr handle) { var r = new JniObjectReference (handle); return GetValue (ref r, JniObjectReferenceOptions.Copy); @@ -527,7 +531,10 @@ public T GetValue< Dictionary Marshalers = new Dictionary (); - public JniValueMarshaler GetValueMarshaler<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T>() + public JniValueMarshaler GetValueMarshaler< + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + T> + () { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -615,7 +622,10 @@ static JniValueMarshaler GetObjectArrayMarshaler (Type elementType) return direct (); } - static JniValueMarshaler GetObjectArrayMarshalerHelper<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T> () + static JniValueMarshaler GetObjectArrayMarshalerHelper< + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + T + > () { return JavaObjectArray.Instance; } @@ -635,7 +645,11 @@ public override Type MarshalType { get {return typeof (void);} } - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { throw new NotSupportedException (); } @@ -656,7 +670,11 @@ sealed class JavaPeerableValueMarshaler : JniValueMarshaler { internal static JavaPeerableValueMarshaler Instance = new JavaPeerableValueMarshaler (); [return: MaybeNull] - public override IJavaPeerable? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override IJavaPeerable? CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { var jvm = JniEnvironment.Runtime; var marshaler = jvm.ValueManager.GetValueMarshaler (targetType ?? typeof(IJavaPeerable)); @@ -729,7 +747,12 @@ public override Expression CreateParameterToManagedExpression (JniValueMarshaler } } - sealed class DelegatingValueMarshaler<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T> : JniValueMarshaler { + sealed class DelegatingValueMarshaler< + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + T + > + : JniValueMarshaler + { JniValueMarshaler ValueMarshaler; @@ -739,7 +762,11 @@ public DelegatingValueMarshaler (JniValueMarshaler valueMarshaler) } [return: MaybeNull] - public override T CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override T CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return (T) ValueMarshaler.CreateValue (ref reference, options, targetType ?? typeof (T))!; } @@ -778,7 +805,11 @@ sealed class ProxyValueMarshaler : JniValueMarshaler { internal static ProxyValueMarshaler Instance = new ProxyValueMarshaler (); [return: MaybeNull] - public override object? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override object? CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { var jvm = JniEnvironment.Runtime; diff --git a/src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs b/src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs index 8b99829da..a2f1b543b 100644 --- a/src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs +++ b/src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs @@ -14,7 +14,11 @@ sealed class JniStringValueMarshaler : JniValueMarshaler { internal static readonly JniStringValueMarshaler Instance = new JniStringValueMarshaler (); - public override string? CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + public override string? CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JniEnvironment.Strings.ToString (ref reference, options, targetType ?? typeof (string)); } diff --git a/src/Java.Interop/Java.Interop/JniValueMarshaler.cs b/src/Java.Interop/Java.Interop/JniValueMarshaler.cs index d1fdf851f..1996d6b2a 100644 --- a/src/Java.Interop/Java.Interop/JniValueMarshaler.cs +++ b/src/Java.Interop/Java.Interop/JniValueMarshaler.cs @@ -223,7 +223,12 @@ protected static Expression DisposeObjectReference (Expression sourceValue) } } - public abstract class JniValueMarshaler<[DynamicallyAccessedMembers (ConstructorsAndInterfaces)] T> : JniValueMarshaler { + public abstract class JniValueMarshaler< + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + T + > + : JniValueMarshaler + { [return: MaybeNull] public abstract T CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType = null); @@ -236,7 +241,11 @@ public virtual JniValueMarshalerState CreateGenericArgumentState ([MaybeNu public abstract JniValueMarshalerState CreateGenericObjectReferenceArgumentState ([MaybeNull] T value, ParameterAttributes synchronize = 0); public abstract void DestroyGenericArgumentState ([AllowNull] T value, ref JniValueMarshalerState state, ParameterAttributes synchronize = 0); - public override object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType = null) + public override object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType = null) { return CreateGenericValue (ref reference, options, targetType ?? typeof (T)); } From b9a1653f2b23b4830eb7cdabd1a970c511c09edb Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 8 Feb 2024 16:33:13 -0600 Subject: [PATCH 3/8] Move `ConstructorsAndInterfaces` --- src/Java.Interop/Java.Interop/JavaArray.cs | 2 -- src/Java.Interop/Java.Interop/JavaObject.cs | 3 +++ src/Java.Interop/Java.Interop/JavaObjectArray.cs | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Java.Interop/Java.Interop/JavaArray.cs b/src/Java.Interop/Java.Interop/JavaArray.cs index e49eee31e..7b6889f25 100644 --- a/src/Java.Interop/Java.Interop/JavaArray.cs +++ b/src/Java.Interop/Java.Interop/JavaArray.cs @@ -12,8 +12,6 @@ namespace Java.Interop { public abstract class JavaArray : JavaObject, IList, IList { - internal const DynamicallyAccessedMemberTypes ConstructorsAndInterfaces = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors | DynamicallyAccessedMemberTypes.Interfaces; - internal delegate TArray ArrayCreator (ref JniObjectReference reference, JniObjectReferenceOptions transfer) where TArray : JavaArray; diff --git a/src/Java.Interop/Java.Interop/JavaObject.cs b/src/Java.Interop/Java.Interop/JavaObject.cs index 8ce5212db..df666821d 100644 --- a/src/Java.Interop/Java.Interop/JavaObject.cs +++ b/src/Java.Interop/Java.Interop/JavaObject.cs @@ -1,12 +1,15 @@ #nullable enable using System; +using System.Diagnostics.CodeAnalysis; namespace Java.Interop { [JniTypeSignature ("java/lang/Object", GenerateJavaPeer=false)] unsafe public class JavaObject : IJavaPeerable { + internal const DynamicallyAccessedMemberTypes ConstructorsAndInterfaces = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors | DynamicallyAccessedMemberTypes.Interfaces; + readonly static JniPeerMembers _members = new JniPeerMembers ("java/lang/Object", typeof (JavaObject)); public int JniIdentityHashCode { get; private set; } diff --git a/src/Java.Interop/Java.Interop/JavaObjectArray.cs b/src/Java.Interop/Java.Interop/JavaObjectArray.cs index 020a24b59..71ead5dac 100644 --- a/src/Java.Interop/Java.Interop/JavaObjectArray.cs +++ b/src/Java.Interop/Java.Interop/JavaObjectArray.cs @@ -203,7 +203,7 @@ partial class JniEnvironment { partial class Arrays { public static JavaObjectArray? CreateMarshalObjectArray< - [DynamicallyAccessedMembers (JavaArray.ConstructorsAndInterfaces)] + [DynamicallyAccessedMembers (JavaObject.ConstructorsAndInterfaces)] T > ( IEnumerable? value) From 379308d38a6639661a0e1d20e93086c48edc4de8 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 8 Feb 2024 16:37:08 -0600 Subject: [PATCH 4/8] More formatting --- .../Java.Interop/JavaPrimitiveArrays.cs | 40 +++++++++++++++---- .../Java.Interop/JavaPrimitiveArrays.tt | 5 ++- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs index 5162fca54..94097119d 100644 --- a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs +++ b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs @@ -244,7 +244,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaBooleanArray) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers(JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) + public static object? CreateMarshaledValue ( + IntPtr handle, + [DynamicallyAccessedMembers(JniValueMarshaler.ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -444,7 +447,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaSByteArray) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) + public static object? CreateMarshaledValue ( + IntPtr handle, + [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -644,7 +650,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaCharArray) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) + public static object? CreateMarshaledValue ( + IntPtr handle, + [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -844,7 +853,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaInt16Array) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) + public static object? CreateMarshaledValue ( + IntPtr handle, + [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -1044,7 +1056,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaInt32Array) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) + public static object? CreateMarshaledValue ( + IntPtr handle, + [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -1244,7 +1259,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaInt64Array) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) + public static object? CreateMarshaledValue ( + IntPtr handle, + [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -1444,7 +1462,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaSingleArray) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) + public static object? CreateMarshaledValue ( + IntPtr handle, + [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -1644,7 +1665,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) typeof (JavaDoubleArray) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] Type? targetType) + public static object? CreateMarshaledValue ( + IntPtr handle, + [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } diff --git a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt index 6f7f47e95..138ab7632 100644 --- a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt +++ b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt @@ -241,7 +241,10 @@ namespace Java.Interop { typeof (Java<#= info.TypeModifier #>Array) == targetType; } - public static object? CreateMarshaledValue (IntPtr handle, Type? targetType) + public static object? CreateMarshaledValue ( + IntPtr handle, + [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } From 6a6e7bd78e454354c8e46d2b6c0f47ec4e1ac6e9 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 8 Feb 2024 16:42:31 -0600 Subject: [PATCH 5/8] More formatting --- .../JniRuntime.JniValueManager.cs | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs b/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs index f4ea1fc9b..3122e8eb5 100644 --- a/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs +++ b/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs @@ -267,7 +267,11 @@ static Type GetPeerType ([DynamicallyAccessedMembers (Constructors)] Type type) return type; } - public virtual IJavaPeerable? CreatePeer (ref JniObjectReference reference, JniObjectReferenceOptions transfer, [DynamicallyAccessedMembers (Constructors)] Type? targetType) + public virtual IJavaPeerable? CreatePeer ( + ref JniObjectReference reference, + JniObjectReferenceOptions transfer, + [DynamicallyAccessedMembers (Constructors)] + Type? targetType) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -298,7 +302,10 @@ static Type GetPeerType ([DynamicallyAccessedMembers (Constructors)] Type type) static readonly Type ByRefJniObjectReference = typeof (JniObjectReference).MakeByRefType (); - ConstructorInfo? GetPeerConstructor (JniObjectReference instance, [DynamicallyAccessedMembers (Constructors)] Type fallbackType) + ConstructorInfo? GetPeerConstructor ( + JniObjectReference instance, + [DynamicallyAccessedMembers (Constructors)] + Type fallbackType) { var klass = JniEnvironment.Types.GetObjectClass (instance); var jniTypeName = JniEnvironment.Types.GetJniTypeNameFromClass (klass); @@ -333,7 +340,9 @@ static Type GetPeerType ([DynamicallyAccessedMembers (Constructors)] Type type) return GetActivationConstructor (fallbackType); } - static ConstructorInfo? GetActivationConstructor ([DynamicallyAccessedMembers (Constructors)] Type type) + static ConstructorInfo? GetActivationConstructor ( + [DynamicallyAccessedMembers (Constructors)] + Type type) { if (type.IsAbstract || type.IsInterface) { type = GetInvokerType (type) ?? type; @@ -364,7 +373,11 @@ static Type GetPeerType ([DynamicallyAccessedMembers (Constructors)] Type type) return suffixDefinition.MakeGenericType (arguments); } - public object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType = null) + public object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType = null) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -449,7 +462,11 @@ public T CreateValue< return Runtime.TypeManager.GetType (signature); } - public object? GetValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType = null) + public object? GetValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType = null) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -550,7 +567,9 @@ public JniValueMarshaler GetValueMarshaler< } } - public JniValueMarshaler GetValueMarshaler ([DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.Interfaces)] Type type) + public JniValueMarshaler GetValueMarshaler ( + [DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.Interfaces)] + Type type) { if (disposed) throw new ObjectDisposedException (GetType ().Name); From 0a064e026c6d2631b6b05a59ddad8a460a8b7554 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 8 Feb 2024 16:43:53 -0600 Subject: [PATCH 6/8] Messed up one formatting --- src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs b/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs index 3122e8eb5..9bd6a9a70 100644 --- a/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs +++ b/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs @@ -550,8 +550,8 @@ public T GetValue< public JniValueMarshaler GetValueMarshaler< [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - T> - () + T + > () { if (disposed) throw new ObjectDisposedException (GetType ().Name); From 46619551ecb658868caa7eee14246ef2cafc2d68 Mon Sep 17 00:00:00 2001 From: Jonathan Pryor Date: Mon, 12 Feb 2024 15:34:53 -0500 Subject: [PATCH 7/8] Code formatting fixes --- .../Java.Interop/JavaObjectArray.cs | 8 +- .../Java.Interop/JavaPrimitiveArrays.cs | 120 ++++----- .../Java.Interop/JavaPrimitiveArrays.tt | 14 +- .../Java.Interop/JniBuiltinMarshalers.cs | 242 +++++++++--------- .../Java.Interop/JniBuiltinMarshalers.tt | 34 +-- .../JniRuntime.JniMarshalMemberBuilder.cs | 16 +- .../Java.Interop/JniRuntime.JniTypeManager.cs | 42 ++- .../JniRuntime.JniValueManager.cs | 94 +++---- .../Java.Interop/JniStringValueMarshaler.cs | 8 +- .../Java.Interop/JniValueMarshaler.cs | 25 +- src/Java.Interop/Java.Interop/ManagedPeer.cs | 6 +- 11 files changed, 324 insertions(+), 285 deletions(-) diff --git a/src/Java.Interop/Java.Interop/JavaObjectArray.cs b/src/Java.Interop/Java.Interop/JavaObjectArray.cs index 71ead5dac..a9f960ef2 100644 --- a/src/Java.Interop/Java.Interop/JavaObjectArray.cs +++ b/src/Java.Interop/Java.Interop/JavaObjectArray.cs @@ -169,10 +169,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { public override IList CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue (ref reference, options, targetType, (ref JniObjectReference h, JniObjectReferenceOptions t) => new JavaObjectArray (ref h, t) { forMarshalCollection = true, diff --git a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs index 94097119d..0716b04f6 100644 --- a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs +++ b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs @@ -245,9 +245,9 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) } public static object? CreateMarshaledValue ( - IntPtr handle, - [DynamicallyAccessedMembers(JniValueMarshaler.ConstructorsAndInterfaces)] - Type? targetType) + IntPtr handle, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -255,10 +255,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { public override IList CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -283,7 +283,6 @@ public override void DestroyGenericArgumentState ([AllowNull] IList val JavaArray.DestroyArgumentState (value, ref state, synchronize); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaBooleanArray.CreateMarshaledValue; @@ -448,9 +447,9 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) } public static object? CreateMarshaledValue ( - IntPtr handle, - [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] - Type? targetType) + IntPtr handle, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -458,10 +457,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { public override IList CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -486,7 +485,6 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value JavaArray.DestroyArgumentState (value, ref state, synchronize); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaSByteArray.CreateMarshaledValue; @@ -651,9 +649,9 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) } public static object? CreateMarshaledValue ( - IntPtr handle, - [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] - Type? targetType) + IntPtr handle, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -661,10 +659,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { public override IList CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -689,7 +687,6 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value, JavaArray.DestroyArgumentState (value, ref state, synchronize); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaCharArray.CreateMarshaledValue; @@ -854,9 +851,9 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) } public static object? CreateMarshaledValue ( - IntPtr handle, - [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] - Type? targetType) + IntPtr handle, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -864,10 +861,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { public override IList CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -892,7 +889,6 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value JavaArray.DestroyArgumentState (value, ref state, synchronize); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaInt16Array.CreateMarshaledValue; @@ -1057,9 +1053,9 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) } public static object? CreateMarshaledValue ( - IntPtr handle, - [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] - Type? targetType) + IntPtr handle, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -1067,10 +1063,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { public override IList CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -1095,7 +1091,6 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value JavaArray.DestroyArgumentState (value, ref state, synchronize); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaInt32Array.CreateMarshaledValue; @@ -1260,9 +1255,9 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) } public static object? CreateMarshaledValue ( - IntPtr handle, - [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] - Type? targetType) + IntPtr handle, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -1270,10 +1265,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { public override IList CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -1298,7 +1293,6 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value JavaArray.DestroyArgumentState (value, ref state, synchronize); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaInt64Array.CreateMarshaledValue; @@ -1463,9 +1457,9 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) } public static object? CreateMarshaledValue ( - IntPtr handle, - [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] - Type? targetType) + IntPtr handle, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -1473,10 +1467,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { public override IList CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -1501,7 +1495,6 @@ public override void DestroyGenericArgumentState ([AllowNull] IList valu JavaArray.DestroyArgumentState (value, ref state, synchronize); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaSingleArray.CreateMarshaledValue; @@ -1666,9 +1659,9 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) } public static object? CreateMarshaledValue ( - IntPtr handle, - [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] - Type? targetType) + IntPtr handle, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -1676,10 +1669,10 @@ internal override bool TargetTypeIsCurrentType (Type? targetType) internal sealed class ValueMarshaler : JniValueMarshaler> { public override IList CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray.CreateValue ( ref reference, @@ -1704,7 +1697,6 @@ public override void DestroyGenericArgumentState ([AllowNull] IList valu JavaArray.DestroyArgumentState (value, ref state, synchronize); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaDoubleArray.CreateMarshaledValue; diff --git a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt index 138ab7632..58cecaf0a 100644 --- a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt +++ b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt @@ -242,9 +242,9 @@ namespace Java.Interop { } public static object? CreateMarshaledValue ( - IntPtr handle, - [DynamicallyAccessedMembers (JniValueMarshaler.ConstructorsAndInterfaces)] - Type? targetType) + IntPtr handle, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return ArrayMarshaler.CreateValue (handle, targetType); } @@ -252,10 +252,10 @@ namespace Java.Interop { internal sealed class ValueMarshaler : JniValueMarshaler>> { public override IList<<#= info.TypeModifier #>> CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JavaArray<<#= info.TypeModifier #>>.CreateValue ( ref reference, diff --git a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs index ec3c1632c..05463094c 100644 --- a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs +++ b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs @@ -4,11 +4,11 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq.Expressions; using System.Reflection; using Java.Interop.Expressions; -using System.Diagnostics.CodeAnalysis; namespace Java.Interop { @@ -224,10 +224,10 @@ public override Type MarshalType { } public override object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -235,10 +235,10 @@ public override Type MarshalType { } public override Boolean CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Boolean); @@ -271,19 +271,19 @@ public override void DestroyGenericArgumentState (Boolean value, ref JniValueMar state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -295,10 +295,10 @@ sealed class JniNullableBooleanValueMarshaler : JniValueMarshaler { internal static readonly JniNullableBooleanValueMarshaler Instance = new JniNullableBooleanValueMarshaler (); public override Boolean? CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -366,10 +366,10 @@ public override Type MarshalType { } public override object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -377,10 +377,10 @@ public override Type MarshalType { } public override SByte CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (SByte); @@ -413,19 +413,19 @@ public override void DestroyGenericArgumentState (SByte value, ref JniValueMarsh state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -437,10 +437,10 @@ sealed class JniNullableSByteValueMarshaler : JniValueMarshaler { internal static readonly JniNullableSByteValueMarshaler Instance = new JniNullableSByteValueMarshaler (); public override SByte? CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -508,10 +508,10 @@ public override Type MarshalType { } public override object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -519,10 +519,10 @@ public override Type MarshalType { } public override Char CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Char); @@ -555,19 +555,19 @@ public override void DestroyGenericArgumentState (Char value, ref JniValueMarsha state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -579,10 +579,10 @@ sealed class JniNullableCharValueMarshaler : JniValueMarshaler { internal static readonly JniNullableCharValueMarshaler Instance = new JniNullableCharValueMarshaler (); public override Char? CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -650,10 +650,10 @@ public override Type MarshalType { } public override object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -661,10 +661,10 @@ public override Type MarshalType { } public override Int16 CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Int16); @@ -697,19 +697,19 @@ public override void DestroyGenericArgumentState (Int16 value, ref JniValueMarsh state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -721,10 +721,10 @@ sealed class JniNullableInt16ValueMarshaler : JniValueMarshaler { internal static readonly JniNullableInt16ValueMarshaler Instance = new JniNullableInt16ValueMarshaler (); public override Int16? CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -792,10 +792,10 @@ public override Type MarshalType { } public override object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -803,10 +803,10 @@ public override Type MarshalType { } public override Int32 CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Int32); @@ -839,19 +839,19 @@ public override void DestroyGenericArgumentState (Int32 value, ref JniValueMarsh state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -863,10 +863,10 @@ sealed class JniNullableInt32ValueMarshaler : JniValueMarshaler { internal static readonly JniNullableInt32ValueMarshaler Instance = new JniNullableInt32ValueMarshaler (); public override Int32? CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -934,10 +934,10 @@ public override Type MarshalType { } public override object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -945,10 +945,10 @@ public override Type MarshalType { } public override Int64 CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Int64); @@ -981,19 +981,19 @@ public override void DestroyGenericArgumentState (Int64 value, ref JniValueMarsh state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -1005,10 +1005,10 @@ sealed class JniNullableInt64ValueMarshaler : JniValueMarshaler { internal static readonly JniNullableInt64ValueMarshaler Instance = new JniNullableInt64ValueMarshaler (); public override Int64? CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -1076,10 +1076,10 @@ public override Type MarshalType { } public override object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -1087,10 +1087,10 @@ public override Type MarshalType { } public override Single CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Single); @@ -1123,19 +1123,19 @@ public override void DestroyGenericArgumentState (Single value, ref JniValueMars state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -1147,10 +1147,10 @@ sealed class JniNullableSingleValueMarshaler : JniValueMarshaler { internal static readonly JniNullableSingleValueMarshaler Instance = new JniNullableSingleValueMarshaler (); public override Single? CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -1218,10 +1218,10 @@ public override Type MarshalType { } public override object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -1229,10 +1229,10 @@ public override Type MarshalType { } public override Double CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (Double); @@ -1265,19 +1265,19 @@ public override void DestroyGenericArgumentState (Double value, ref JniValueMars state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -1289,10 +1289,10 @@ sealed class JniNullableDoubleValueMarshaler : JniValueMarshaler { internal static readonly JniNullableDoubleValueMarshaler Instance = new JniNullableDoubleValueMarshaler (); public override Double? CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; diff --git a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.tt b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.tt index 370387414..55daa34d9 100644 --- a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.tt +++ b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.tt @@ -9,6 +9,7 @@ using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq.Expressions; using System.Reflection; @@ -182,10 +183,10 @@ namespace Java.Interop { } public override object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -193,10 +194,10 @@ namespace Java.Interop { } public override <#= type.Type #> CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return default (<#= type.Type #>); @@ -204,12 +205,12 @@ namespace Java.Interop { return Jni<#= type.Name #>.GetValueFromJni (ref reference, options, targetType); } - public override JniValueMarshalerState CreateGenericArgumentState (<#= type.Type #> value, ParameterAttributes synchronize = ParameterAttributes.In) + public override JniValueMarshalerState CreateGenericArgumentState ([MaybeNull] <#= type.Type #> value, ParameterAttributes synchronize = ParameterAttributes.In) { return new JniValueMarshalerState (new JniArgumentValue (value)); } - public override JniValueMarshalerState CreateGenericObjectReferenceArgumentState (<#= type.Type #> value, ParameterAttributes synchronize) + public override JniValueMarshalerState CreateGenericObjectReferenceArgumentState ([MaybeNull] <#= type.Type #> value, ParameterAttributes synchronize) { var r = Jni<#= type.Name #>.CreateLocalRef (value); return new JniValueMarshalerState (r); @@ -229,16 +230,19 @@ namespace Java.Interop { state = new JniValueMarshalerState (); } + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } + [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -250,10 +254,10 @@ namespace Java.Interop { internal static readonly JniNullable<#= type.Type #>ValueMarshaler Instance = new JniNullable<#= type.Type #>ValueMarshaler (); public override <#= type.Type #>? CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { if (!reference.IsValid) return null; @@ -261,7 +265,7 @@ namespace Java.Interop { return Jni<#= type.Name #>.GetValueFromJni (ref reference, options, targetType: null); } - public override JniValueMarshalerState CreateGenericObjectReferenceArgumentState (<#= type.Type #>? value, ParameterAttributes synchronize) + public override JniValueMarshalerState CreateGenericObjectReferenceArgumentState ([MaybeNull] <#= type.Type #>? value, ParameterAttributes synchronize) { if (!value.HasValue) return new JniValueMarshalerState (); diff --git a/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs b/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs index da82be5f2..e52bae71b 100644 --- a/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs +++ b/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs @@ -200,19 +200,19 @@ public override Expression CreateReturnValueFromManagedExpression (Java.Interop. public override object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { throw new NotSupportedException (); } public override IntPtr CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { throw new NotSupportedException (); } diff --git a/src/Java.Interop/Java.Interop/JniRuntime.JniTypeManager.cs b/src/Java.Interop/Java.Interop/JniRuntime.JniTypeManager.cs index 748fe6846..12bbff89b 100644 --- a/src/Java.Interop/Java.Interop/JniRuntime.JniTypeManager.cs +++ b/src/Java.Interop/Java.Interop/JniRuntime.JniTypeManager.cs @@ -409,12 +409,20 @@ IEnumerable CreateGetTypesForSimpleReferenceEnumerator (string jniSimpleRe protected virtual ReplacementMethodInfo? GetReplacementMethodInfoCore (string jniSimpleReference, string jniMethodName, string jniMethodSignature) => null; - public virtual void RegisterNativeMembers (JniType nativeClass, [DynamicallyAccessedMembers (MethodsAndPrivateNested)] Type type, ReadOnlySpan methods) + public virtual void RegisterNativeMembers ( + JniType nativeClass, + [DynamicallyAccessedMembers (MethodsAndPrivateNested)] + Type type, + ReadOnlySpan methods) { TryRegisterNativeMembers (nativeClass, type, methods); } - protected bool TryRegisterNativeMembers (JniType nativeClass, [DynamicallyAccessedMembers (MethodsAndPrivateNested)] Type type, ReadOnlySpan methods) + protected bool TryRegisterNativeMembers ( + JniType nativeClass, + [DynamicallyAccessedMembers (MethodsAndPrivateNested)] + Type type, + ReadOnlySpan methods) { AssertValid (); @@ -429,7 +437,11 @@ protected bool TryRegisterNativeMembers (JniType nativeClass, [DynamicallyAccess #if NET [Obsolete ("Use RegisterNativeMembers(JniType, Type, ReadOnlySpan)")] #endif // NET - public virtual void RegisterNativeMembers (JniType nativeClass, [DynamicallyAccessedMembers (MethodsAndPrivateNested)] Type type, string? methods) + public virtual void RegisterNativeMembers ( + JniType nativeClass, + [DynamicallyAccessedMembers (MethodsAndPrivateNested)] + Type type, + string? methods) { TryRegisterNativeMembers (nativeClass, type, methods); } @@ -437,7 +449,11 @@ public virtual void RegisterNativeMembers (JniType nativeClass, [DynamicallyAcce #if NET [Obsolete ("Use RegisterNativeMembers(JniType, Type, ReadOnlySpan)")] #endif // NET - protected bool TryRegisterNativeMembers (JniType nativeClass, [DynamicallyAccessedMembers (MethodsAndPrivateNested)] Type type, string? methods) + protected bool TryRegisterNativeMembers ( + JniType nativeClass, + [DynamicallyAccessedMembers (MethodsAndPrivateNested)] + Type type, + string? methods) { AssertValid (); @@ -446,7 +462,11 @@ protected bool TryRegisterNativeMembers (JniType nativeClass, [DynamicallyAccess static Type [] registerMethodParameters = new Type [] { typeof (JniNativeMethodRegistrationArguments) }; - bool TryLoadJniMarshalMethods (JniType nativeClass, [DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.NonPublicNestedTypes)] Type type, string? methods) + bool TryLoadJniMarshalMethods ( + JniType nativeClass, + [DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.NonPublicNestedTypes)] + Type type, + string? methods) { var marshalType = type?.GetNestedType ("__<$>_jni_marshal_methods", BindingFlags.NonPublic); if (marshalType == null) { @@ -465,7 +485,12 @@ bool TryLoadJniMarshalMethods (JniType nativeClass, [DynamicallyAccessedMembers static List sharedRegistrations = new List (); - bool TryRegisterNativeMembers (JniType nativeClass, [DynamicallyAccessedMembers (Methods)] Type marshalType, string? methods, MethodInfo? registerMethod) + bool TryRegisterNativeMembers ( + JniType nativeClass, + [DynamicallyAccessedMembers (Methods)] + Type marshalType, + string? methods, + MethodInfo? registerMethod) { bool lockTaken = false; bool rv = false; @@ -497,7 +522,10 @@ bool TryRegisterNativeMembers (JniType nativeClass, [DynamicallyAccessedMembers return rv; } - bool FindAndCallRegisterMethod ([DynamicallyAccessedMembers (Methods)] Type marshalType, JniNativeMethodRegistrationArguments arguments) + bool FindAndCallRegisterMethod ( + [DynamicallyAccessedMembers (Methods)] + Type marshalType, + JniNativeMethodRegistrationArguments arguments) { if (!Runtime.JniAddNativeMethodRegistrationAttributePresent) return false; diff --git a/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs b/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs index 9bd6a9a70..91e862dc7 100644 --- a/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs +++ b/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs @@ -268,10 +268,10 @@ static Type GetPeerType ([DynamicallyAccessedMembers (Constructors)] Type type) } public virtual IJavaPeerable? CreatePeer ( - ref JniObjectReference reference, - JniObjectReferenceOptions transfer, - [DynamicallyAccessedMembers (Constructors)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions transfer, + [DynamicallyAccessedMembers (Constructors)] + Type? targetType) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -303,9 +303,9 @@ static Type GetPeerType ([DynamicallyAccessedMembers (Constructors)] Type type) static readonly Type ByRefJniObjectReference = typeof (JniObjectReference).MakeByRefType (); ConstructorInfo? GetPeerConstructor ( - JniObjectReference instance, - [DynamicallyAccessedMembers (Constructors)] - Type fallbackType) + JniObjectReference instance, + [DynamicallyAccessedMembers (Constructors)] + Type fallbackType) { var klass = JniEnvironment.Types.GetObjectClass (instance); var jniTypeName = JniEnvironment.Types.GetJniTypeNameFromClass (klass); @@ -341,8 +341,8 @@ static Type GetPeerType ([DynamicallyAccessedMembers (Constructors)] Type type) } static ConstructorInfo? GetActivationConstructor ( - [DynamicallyAccessedMembers (Constructors)] - Type type) + [DynamicallyAccessedMembers (Constructors)] + Type type) { if (type.IsAbstract || type.IsInterface) { type = GetInvokerType (type) ?? type; @@ -374,10 +374,10 @@ static Type GetPeerType ([DynamicallyAccessedMembers (Constructors)] Type type) } public object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType = null) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType = null) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -408,13 +408,13 @@ static Type GetPeerType ([DynamicallyAccessedMembers (Constructors)] Type type) [return: MaybeNull] public T CreateValue< - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - T + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + T > ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType = null) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType = null) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -463,10 +463,10 @@ public T CreateValue< } public object? GetValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType = null) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType = null) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -506,13 +506,13 @@ public T GetValue< [return: MaybeNull] public T GetValue< - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - T + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + T > ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType = null) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType = null) { if (!reference.IsValid) { #pragma warning disable 8653 @@ -568,8 +568,8 @@ public JniValueMarshaler GetValueMarshaler< } public JniValueMarshaler GetValueMarshaler ( - [DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.Interfaces)] - Type type) + [DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.Interfaces)] + Type type) { if (disposed) throw new ObjectDisposedException (GetType ().Name); @@ -665,10 +665,10 @@ public override Type MarshalType { } public override object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { throw new NotSupportedException (); } @@ -690,10 +690,10 @@ sealed class JavaPeerableValueMarshaler : JniValueMarshaler { [return: MaybeNull] public override IJavaPeerable? CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { var jvm = JniEnvironment.Runtime; var marshaler = jvm.ValueManager.GetValueMarshaler (targetType ?? typeof(IJavaPeerable)); @@ -782,10 +782,10 @@ public DelegatingValueMarshaler (JniValueMarshaler valueMarshaler) [return: MaybeNull] public override T CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return (T) ValueMarshaler.CreateValue (ref reference, options, targetType ?? typeof (T))!; } @@ -825,10 +825,10 @@ sealed class ProxyValueMarshaler : JniValueMarshaler { [return: MaybeNull] public override object? CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { var jvm = JniEnvironment.Runtime; diff --git a/src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs b/src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs index a2f1b543b..36a3e53a5 100644 --- a/src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs +++ b/src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs @@ -15,10 +15,10 @@ sealed class JniStringValueMarshaler : JniValueMarshaler { internal static readonly JniStringValueMarshaler Instance = new JniStringValueMarshaler (); public override string? CreateGenericValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { return JniEnvironment.Strings.ToString (ref reference, options, targetType ?? typeof (string)); } diff --git a/src/Java.Interop/Java.Interop/JniValueMarshaler.cs b/src/Java.Interop/Java.Interop/JniValueMarshaler.cs index 1996d6b2a..ae8e096c2 100644 --- a/src/Java.Interop/Java.Interop/JniValueMarshaler.cs +++ b/src/Java.Interop/Java.Interop/JniValueMarshaler.cs @@ -132,7 +132,11 @@ public virtual Type MarshalType { get {return IntPtr_type;} } - public abstract object? CreateValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType = null); + public abstract object? CreateValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType = null); public virtual JniValueMarshalerState CreateArgumentState (object? value, ParameterAttributes synchronize = 0) { @@ -142,7 +146,10 @@ public virtual JniValueMarshalerState CreateArgumentState (object? value, public abstract JniValueMarshalerState CreateObjectReferenceArgumentState (object? value, ParameterAttributes synchronize = 0); public abstract void DestroyArgumentState (object? value, ref JniValueMarshalerState state, ParameterAttributes synchronize = 0); - internal object? CreateValue (IntPtr handle, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType) + internal object? CreateValue ( + IntPtr handle, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType) { var r = new JniObjectReference (handle); return CreateValue (ref r, JniObjectReferenceOptions.Copy, targetType); @@ -231,7 +238,11 @@ public abstract class JniValueMarshaler< { [return: MaybeNull] - public abstract T CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] Type? targetType = null); + public abstract T CreateGenericValue ( + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType = null); public virtual JniValueMarshalerState CreateGenericArgumentState ([MaybeNull] T value, ParameterAttributes synchronize = 0) { @@ -242,10 +253,10 @@ public virtual JniValueMarshalerState CreateGenericArgumentState ([MaybeNu public abstract void DestroyGenericArgumentState ([AllowNull] T value, ref JniValueMarshalerState state, ParameterAttributes synchronize = 0); public override object? CreateValue ( - ref JniObjectReference reference, - JniObjectReferenceOptions options, - [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] - Type? targetType = null) + ref JniObjectReference reference, + JniObjectReferenceOptions options, + [DynamicallyAccessedMembers (ConstructorsAndInterfaces)] + Type? targetType = null) { return CreateGenericValue (ref reference, options, targetType ?? typeof (T)); } diff --git a/src/Java.Interop/Java.Interop/ManagedPeer.cs b/src/Java.Interop/Java.Interop/ManagedPeer.cs index ecf3fe624..f3874b635 100644 --- a/src/Java.Interop/Java.Interop/ManagedPeer.cs +++ b/src/Java.Interop/Java.Interop/ManagedPeer.cs @@ -142,7 +142,11 @@ static Exception CreateJniLocationException () static Dictionary ConstructorCache = new Dictionary (); - static ConstructorInfo? GetConstructor ([DynamicallyAccessedMembers (Constructors)] Type type, string jniTypeName, string signature) + static ConstructorInfo? GetConstructor ( + [DynamicallyAccessedMembers (Constructors)] + Type type, + string jniTypeName, + string signature) { var ctorCacheKey = jniTypeName + "." + signature; lock (ConstructorCache) { From fa022cac1bffcc7d4c8f7b90297b4a18cf8aac7a Mon Sep 17 00:00:00 2001 From: Jonathan Pryor Date: Mon, 12 Feb 2024 18:43:24 -0500 Subject: [PATCH 8/8] Missed some `[RequiresUnreferencedCode]` spots and shorten other `ExpressionRequiresUnreferencedCode` uses. --- .../Java.Interop/JavaPrimitiveArrays.cs | 8 ++++ .../Java.Interop/JavaPrimitiveArrays.tt | 1 + .../Java.Interop/JniBuiltinMarshalers.cs | 48 +++++++++---------- .../Java.Interop/JniBuiltinMarshalers.tt | 6 +-- 4 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs index 0716b04f6..d23484a03 100644 --- a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs +++ b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs @@ -283,6 +283,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList val JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaBooleanArray.CreateMarshaledValue; @@ -485,6 +486,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaSByteArray.CreateMarshaledValue; @@ -687,6 +689,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value, JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaCharArray.CreateMarshaledValue; @@ -889,6 +892,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaInt16Array.CreateMarshaledValue; @@ -1091,6 +1095,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaInt32Array.CreateMarshaledValue; @@ -1293,6 +1298,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList value JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaInt64Array.CreateMarshaledValue; @@ -1495,6 +1501,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList valu JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaSingleArray.CreateMarshaledValue; @@ -1697,6 +1704,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList valu JavaArray.DestroyArgumentState (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = JavaDoubleArray.CreateMarshaledValue; diff --git a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt index 58cecaf0a..be362d091 100644 --- a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt +++ b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt @@ -280,6 +280,7 @@ namespace Java.Interop { JavaArray<<#= info.ManagedType #>>.DestroyArgumentStateArray> (value, ref state, synchronize); } + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null) { Func m = Java<#= info.TypeModifier #>Array.CreateMarshaledValue; diff --git a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs index 05463094c..4d39b6638 100644 --- a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs +++ b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs @@ -271,19 +271,19 @@ public override void DestroyGenericArgumentState (Boolean value, ref JniValueMar state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -413,19 +413,19 @@ public override void DestroyGenericArgumentState (SByte value, ref JniValueMarsh state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -555,19 +555,19 @@ public override void DestroyGenericArgumentState (Char value, ref JniValueMarsha state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -697,19 +697,19 @@ public override void DestroyGenericArgumentState (Int16 value, ref JniValueMarsh state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -839,19 +839,19 @@ public override void DestroyGenericArgumentState (Int32 value, ref JniValueMarsh state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -981,19 +981,19 @@ public override void DestroyGenericArgumentState (Int64 value, ref JniValueMarsh state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -1123,19 +1123,19 @@ public override void DestroyGenericArgumentState (Single value, ref JniValueMars state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; @@ -1265,19 +1265,19 @@ public override void DestroyGenericArgumentState (Double value, ref JniValueMars state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue; diff --git a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.tt b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.tt index 55daa34d9..e5c911bf5 100644 --- a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.tt +++ b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.tt @@ -230,19 +230,19 @@ namespace Java.Interop { state = new JniValueMarshalerState (); } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateParameterFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize) { return sourceValue; } - [RequiresUnreferencedCode (JniValueMarshaler.ExpressionRequiresUnreferencedCode)] + [RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)] public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue) { return sourceValue;