diff --git a/build-tools/trim-analyzers/trim-analyzers.props b/build-tools/trim-analyzers/trim-analyzers.props
new file mode 100644
index 000000000..a61c10aa7
--- /dev/null
+++ b/build-tools/trim-analyzers/trim-analyzers.props
@@ -0,0 +1,55 @@
+
+
+
+
+ true
+ true
+ true
+
+ true
+
+
+ $(WarningsAsErrors);
+ IL2000;IL2001;IL2002;IL2003;IL2004;
+ IL2005;IL2006;IL2007;IL2008;IL2009;
+ IL2010;IL2011;IL2012;IL2013;IL2014;
+ IL2015;IL2016;IL2017;IL2018;IL2019;
+ IL2020;IL2021;IL2022;IL2023;IL2024;
+ IL2025;IL2026;IL2027;IL2028;IL2029;
+ IL2030;IL2031;IL2032;IL2033;IL2034;
+ IL2035;IL2036;IL2037;IL2038;IL2039;
+ IL2040;IL2041;IL2042;IL2043;IL2044;
+ IL2045;IL2046;IL2047;IL2048;IL2049;
+ IL2050;IL2051;IL2052;IL2053;IL2054;
+ IL2055;IL2056;IL2057;IL2058;IL2059;
+ IL2060;IL2061;IL2062;IL2063;IL2064;
+ IL2065;IL2066;IL2067;IL2068;IL2069;
+ IL2070;IL2071;IL2072;IL2073;IL2074;
+ IL2075;IL2076;IL2077;IL2078;IL2079;
+ IL2080;IL2081;IL2082;IL2083;IL2084;
+ IL2085;IL2086;IL2087;IL2088;IL2089;
+ IL2090;IL2091;IL2092;IL2093;IL2094;
+ IL2095;IL2096;IL2097;IL2098;IL2099;
+ IL2100;IL2101;IL2102;IL2103;IL2104;
+ IL2105;IL2106;IL2107;IL2108;IL2109;
+ IL2110;IL2111;IL2112;IL2113;IL2114;
+ IL2115;IL2116;IL2117;IL2118;IL2119;
+ IL2120;IL2121;IL2122;IL2123;IL2124;
+ IL2125;IL2126;IL2127;IL2128;IL2129;
+
+
+ true
+
+
+ $(WarningsAsErrors);
+ IL3050;IL3051;IL3052;IL3053;IL3054;IL3055;IL3056;
+
+
+
\ No newline at end of file
diff --git a/src/Java.Interop.Tools.TypeNameMappings/Java.Interop.Tools.TypeNameMappings.csproj b/src/Java.Interop.Tools.TypeNameMappings/Java.Interop.Tools.TypeNameMappings.csproj
index aec1edf4b..b5a852d65 100644
--- a/src/Java.Interop.Tools.TypeNameMappings/Java.Interop.Tools.TypeNameMappings.csproj
+++ b/src/Java.Interop.Tools.TypeNameMappings/Java.Interop.Tools.TypeNameMappings.csproj
@@ -3,13 +3,11 @@
$(DotNetTargetFramework)
enable
true
- true
- true
- true
$(DefineConstants);JCW_ONLY_TYPE_NAMES;HAVE_CECIL
+
diff --git a/src/Java.Interop/Java.Interop.csproj b/src/Java.Interop/Java.Interop.csproj
index 1c4f0c681..127fc3288 100644
--- a/src/Java.Interop/Java.Interop.csproj
+++ b/src/Java.Interop/Java.Interop.csproj
@@ -14,15 +14,13 @@
true
enable
true
- true
- true
- true
NU1702
DEBUG;$(DefineConstants)
+
INTEROP;FEATURE_JNIOBJECTREFERENCE_INTPTRS;$(JavaInteropDefineConstants)
$(BaseIntermediateOutputPath)$(Configuration)\$(TargetFramework.ToLowerInvariant())\
diff --git a/src/Java.Interop/Java.Interop/JavaArray.cs b/src/Java.Interop/Java.Interop/JavaArray.cs
index 7b6889f25..4261b0836 100644
--- a/src/Java.Interop/Java.Interop/JavaArray.cs
+++ b/src/Java.Interop/Java.Interop/JavaArray.cs
@@ -363,7 +363,7 @@ public void Dispose ()
}
public abstract class JavaPrimitiveArray<
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
T
>
: JavaArray
diff --git a/src/Java.Interop/Java.Interop/JavaObject.cs b/src/Java.Interop/Java.Interop/JavaObject.cs
index 3b84bd0ef..22e382fba 100644
--- a/src/Java.Interop/Java.Interop/JavaObject.cs
+++ b/src/Java.Interop/Java.Interop/JavaObject.cs
@@ -9,7 +9,6 @@ namespace Java.Interop
unsafe public class JavaObject : IJavaPeerable
{
internal const DynamicallyAccessedMemberTypes Constructors = DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors;
- internal const DynamicallyAccessedMemberTypes ConstructorsAndInterfaces = Constructors | DynamicallyAccessedMemberTypes.Interfaces;
readonly static JniPeerMembers _members = new JniPeerMembers ("java/lang/Object", typeof (JavaObject));
diff --git a/src/Java.Interop/Java.Interop/JavaObjectArray.cs b/src/Java.Interop/Java.Interop/JavaObjectArray.cs
index a9f960ef2..0125fcfe8 100644
--- a/src/Java.Interop/Java.Interop/JavaObjectArray.cs
+++ b/src/Java.Interop/Java.Interop/JavaObjectArray.cs
@@ -8,7 +8,7 @@
namespace Java.Interop
{
public class JavaObjectArray<
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
T
>
: JavaArray
@@ -171,7 +171,7 @@ internal sealed class ValueMarshaler : JniValueMarshaler> {
public override IList CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return JavaArray.CreateValue (ref reference, options, targetType, (ref JniObjectReference h, JniObjectReferenceOptions t) => new JavaObjectArray (ref h, t) {
@@ -203,7 +203,7 @@ partial class JniEnvironment {
partial class Arrays {
public static JavaObjectArray? CreateMarshalObjectArray<
- [DynamicallyAccessedMembers (JavaObject.ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (JavaObject.Constructors)]
T
> (
IEnumerable? value)
diff --git a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs
index bf9d60f04..dad9743ed 100644
--- a/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs
+++ b/src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs
@@ -246,7 +246,7 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
@@ -257,7 +257,7 @@ internal sealed class ValueMarshaler : JniValueMarshaler> {
public override IList CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return JavaArray.CreateValue (
@@ -450,7 +450,7 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
@@ -461,7 +461,7 @@ internal sealed class ValueMarshaler : JniValueMarshaler> {
public override IList CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return JavaArray.CreateValue (
@@ -654,7 +654,7 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
@@ -665,7 +665,7 @@ internal sealed class ValueMarshaler : JniValueMarshaler> {
public override IList CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return JavaArray.CreateValue (
@@ -858,7 +858,7 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
@@ -869,7 +869,7 @@ internal sealed class ValueMarshaler : JniValueMarshaler> {
public override IList CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return JavaArray.CreateValue (
@@ -1062,7 +1062,7 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
@@ -1073,7 +1073,7 @@ internal sealed class ValueMarshaler : JniValueMarshaler> {
public override IList CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return JavaArray.CreateValue (
@@ -1266,7 +1266,7 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
@@ -1277,7 +1277,7 @@ internal sealed class ValueMarshaler : JniValueMarshaler> {
public override IList CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return JavaArray.CreateValue (
@@ -1470,7 +1470,7 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
@@ -1481,7 +1481,7 @@ internal sealed class ValueMarshaler : JniValueMarshaler> {
public override IList CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return JavaArray.CreateValue (
@@ -1674,7 +1674,7 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
@@ -1685,7 +1685,7 @@ internal sealed class ValueMarshaler : JniValueMarshaler> {
public override IList CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return JavaArray.CreateValue (
diff --git a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs
index 758941fe7..3ab2744cc 100644
--- a/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs
+++ b/src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs
@@ -226,7 +226,7 @@ public override Type MarshalType {
public override object? CreateValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -237,7 +237,7 @@ public override Type MarshalType {
public override Boolean CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -299,7 +299,7 @@ sealed class JniNullableBooleanValueMarshaler : JniValueMarshaler {
public override Boolean? CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -370,7 +370,7 @@ public override Type MarshalType {
public override object? CreateValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -381,7 +381,7 @@ public override Type MarshalType {
public override SByte CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -443,7 +443,7 @@ sealed class JniNullableSByteValueMarshaler : JniValueMarshaler {
public override SByte? CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -514,7 +514,7 @@ public override Type MarshalType {
public override object? CreateValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -525,7 +525,7 @@ public override Type MarshalType {
public override Char CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -587,7 +587,7 @@ sealed class JniNullableCharValueMarshaler : JniValueMarshaler {
public override Char? CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -658,7 +658,7 @@ public override Type MarshalType {
public override object? CreateValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -669,7 +669,7 @@ public override Type MarshalType {
public override Int16 CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -731,7 +731,7 @@ sealed class JniNullableInt16ValueMarshaler : JniValueMarshaler {
public override Int16? CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -802,7 +802,7 @@ public override Type MarshalType {
public override object? CreateValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -813,7 +813,7 @@ public override Type MarshalType {
public override Int32 CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -875,7 +875,7 @@ sealed class JniNullableInt32ValueMarshaler : JniValueMarshaler {
public override Int32? CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -946,7 +946,7 @@ public override Type MarshalType {
public override object? CreateValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -957,7 +957,7 @@ public override Type MarshalType {
public override Int64 CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -1019,7 +1019,7 @@ sealed class JniNullableInt64ValueMarshaler : JniValueMarshaler {
public override Int64? CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -1090,7 +1090,7 @@ public override Type MarshalType {
public override object? CreateValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -1101,7 +1101,7 @@ public override Type MarshalType {
public override Single CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -1163,7 +1163,7 @@ sealed class JniNullableSingleValueMarshaler : JniValueMarshaler {
public override Single? CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -1234,7 +1234,7 @@ public override Type MarshalType {
public override object? CreateValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -1245,7 +1245,7 @@ public override Type MarshalType {
public override Double CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
@@ -1307,7 +1307,7 @@ sealed class JniNullableDoubleValueMarshaler : JniValueMarshaler {
public override Double? CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
if (!reference.IsValid)
diff --git a/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs b/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs
index 6eb904ad1..b74d6ec87 100644
--- a/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs
+++ b/src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs
@@ -142,12 +142,6 @@ string GetTypeSignature (ParameterInfo p)
public JniValueMarshaler GetParameterMarshaler (ParameterInfo parameter)
{
- // Activator.CreateInstance requires DynamicallyAccessedMemberTypes.PublicParameterlessConstructor
- // GetValueMarshaler requires DynamicallyAccessedMemberTypes.Interfaces
- [UnconditionalSuppressMessage ("Trimming", "IL2072", Justification = "JniValueMarshalerAttribute is decorated with [DynamicallyAccessedMembers]")]
- static JniValueMarshaler GetValueMarshaler (JniValueManager manager, ParameterInfo parameter) =>
- manager.GetValueMarshaler (parameter.ParameterType);
-
if (parameter.ParameterType == typeof (IntPtr))
return IntPtrValueMarshaler.Instance;
@@ -160,7 +154,7 @@ static JniValueMarshaler GetValueMarshaler (JniValueManager manager, ParameterIn
if (attr != null) {
return (JniValueMarshaler) Activator.CreateInstance (attr.MarshalerType)!;
}
- return GetValueMarshaler (Runtime.ValueManager, parameter);
+ return Runtime.ValueManager.GetValueMarshaler (parameter.ParameterType);
}
// Heuristic: if first two parameters are IntPtr, this is a "direct" wrapper.
@@ -200,7 +194,7 @@ public override Expression CreateReturnValueFromManagedExpression (Java.Interop.
public override object? CreateValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
throw new NotSupportedException ();
@@ -209,7 +203,7 @@ public override Expression CreateReturnValueFromManagedExpression (Java.Interop.
public override IntPtr CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
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 cc778dba7..5f93dbe2b 100644
--- a/src/Java.Interop/Java.Interop/JniRuntime.JniTypeManager.cs
+++ b/src/Java.Interop/Java.Interop/JniRuntime.JniTypeManager.cs
@@ -83,7 +83,7 @@ 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;
+ internal const DynamicallyAccessedMemberTypes MethodsConstructors = MethodsAndPrivateNested | DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors;
JniRuntime? runtime;
bool disposed;
@@ -285,7 +285,7 @@ static Type MakeGenericType (Type type, Type arrayType) =>
#pragma warning restore IL3050
[UnconditionalSuppressMessage ("Trimming", "IL2073", Justification = "Types returned here should be preserved via other means.")]
- [return: DynamicallyAccessedMembers (MethodsConstructorsInterfaces)]
+ [return: DynamicallyAccessedMembers (MethodsConstructors)]
public Type? GetType (JniTypeSignature typeSignature)
{
AssertValid ();
diff --git a/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs b/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs
index f1cfe3d9d..207359e61 100644
--- a/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs
+++ b/src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs
@@ -50,7 +50,6 @@ 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;
@@ -415,7 +414,7 @@ static Type MakeGenericType (
public object? CreateValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType = null)
{
if (disposed)
@@ -447,12 +446,12 @@ static Type MakeGenericType (
[return: MaybeNull]
public T CreateValue<
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
T
> (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType = null)
{
if (disposed)
@@ -490,7 +489,7 @@ public T CreateValue<
return marshaler.CreateGenericValue (ref reference, options, targetType);
}
- [return: DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [return: DynamicallyAccessedMembers (Constructors)]
internal Type? GetRuntimeType (JniObjectReference reference)
{
if (!reference.IsValid)
@@ -504,7 +503,7 @@ public T CreateValue<
public object? GetValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType = null)
{
if (disposed)
@@ -534,7 +533,7 @@ public T CreateValue<
[return: MaybeNull]
public T GetValue<
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
T
> (
IntPtr handle)
@@ -545,12 +544,12 @@ public T GetValue<
[return: MaybeNull]
public T GetValue<
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
T
> (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType = null)
{
if (!reference.IsValid) {
@@ -588,7 +587,7 @@ public T GetValue<
Dictionary Marshalers = new Dictionary ();
public JniValueMarshaler GetValueMarshaler<
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
T
> ()
{
@@ -606,9 +605,7 @@ public JniValueMarshaler GetValueMarshaler<
}
}
- public JniValueMarshaler GetValueMarshaler (
- [DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.Interfaces)]
- Type type)
+ public JniValueMarshaler GetValueMarshaler (Type type)
{
if (disposed)
throw new ObjectDisposedException (GetType ().Name);
@@ -633,12 +630,8 @@ public JniValueMarshaler GetValueMarshaler (
return marshaler.Value;
}
- var listIface = typeof (IList<>);
- var listType =
- (from iface in type.GetInterfaces ().Concat (new[]{type})
- where (listIface).IsAssignableFrom (iface.IsGenericType ? iface.GetGenericTypeDefinition () : iface)
- select iface)
- .FirstOrDefault ();
+
+ var listType = GetListType (type);
if (listType != null) {
var elementType = listType.GenericTypeArguments [0];
if (elementType.IsValueType) {
@@ -655,20 +648,20 @@ public JniValueMarshaler GetValueMarshaler (
return JavaPeerableValueMarshaler.Instance;
}
- JniValueMarshalerAttribute? ifaceAttribute = null;
- foreach (var iface in type.GetInterfaces ()) {
- marshalerAttr = iface.GetCustomAttribute ();
- if (marshalerAttr != null) {
- if (ifaceAttribute != null)
- throw new NotSupportedException ($"There is more than one interface with custom marshaler for type {type}.");
+ return GetValueMarshalerCore (type);
+ }
- ifaceAttribute = marshalerAttr;
- }
+ static Type? GetListType(Type type)
+ {
+ foreach (var iface in GetInterfaces (type).Concat (new [] { type })) {
+ if (typeof (IList<>).IsAssignableFrom (iface.IsGenericType ? iface.GetGenericTypeDefinition () : iface))
+ return iface;
}
- if (ifaceAttribute != null)
- return (JniValueMarshaler) Activator.CreateInstance (ifaceAttribute.MarshalerType)!;
+ return null;
- return GetValueMarshalerCore (type);
+ [UnconditionalSuppressMessage ("Trimming", "IL2070", Justification = "We handle the case if IList<> is trimmed away")]
+ static Type [] GetInterfaces (Type type) =>
+ type.GetInterfaces ();
}
static JniValueMarshaler GetObjectArrayMarshaler (Type elementType)
@@ -690,7 +683,7 @@ static MethodInfo MakeGenericMethod (MethodInfo method, Type type) =>
}
static JniValueMarshaler GetObjectArrayMarshalerHelper<
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
T
> ()
{
@@ -715,7 +708,7 @@ public override Type MarshalType {
public override object? CreateValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
throw new NotSupportedException ();
@@ -740,7 +733,7 @@ sealed class JavaPeerableValueMarshaler : JniValueMarshaler {
public override IJavaPeerable? CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
var jvm = JniEnvironment.Runtime;
@@ -817,7 +810,7 @@ public override Expression CreateParameterToManagedExpression (JniValueMarshaler
}
sealed class DelegatingValueMarshaler<
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
T
>
: JniValueMarshaler
@@ -834,7 +827,7 @@ public DelegatingValueMarshaler (JniValueMarshaler valueMarshaler)
public override T CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
- [DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
+ [DynamicallyAccessedMembers (Constructors)]
Type? targetType)
{
return (T) ValueMarshaler.CreateValue (ref reference, options, targetType ?? typeof (T))!;
@@ -879,7 +872,7 @@ sealed class ProxyValueMarshaler : JniValueMarshaler