Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[java.interop] address some "easy" trimmer warnings #1184

Merged
merged 8 commits into from
Feb 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/Java.Interop/Java.Interop.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Nullable>enable</Nullable>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<EnableSingleFileAnalyzer>true</EnableSingleFileAnalyzer>
<!-- TODO: enable these when all warnings are solved -->
<!--<IsTrimmable>true</IsTrimmable>-->
<!--<EnableAotAnalyzer>true</EnableAotAnalyzer>-->
<MSBuildWarningsAsMessages>NU1702</MSBuildWarningsAsMessages>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
Expand Down
7 changes: 6 additions & 1 deletion src/Java.Interop/Java.Interop/JavaArray.cs
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,12 @@ public void Dispose ()
}
}

public abstract class JavaPrimitiveArray<T> : JavaArray<T> {
public abstract class JavaPrimitiveArray<
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
T
>
: JavaArray<T>
{

internal JavaPrimitiveArray (ref JniObjectReference reference, JniObjectReferenceOptions transfer)
: base (ref reference, transfer)
Expand Down
3 changes: 3 additions & 0 deletions src/Java.Interop/Java.Interop/JavaObject.cs
Original file line number Diff line number Diff line change
@@ -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; }
Expand Down
20 changes: 16 additions & 4 deletions src/Java.Interop/Java.Interop/JavaObjectArray.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#nullable enable
#nullable enable

using System;
using System.Collections.Generic;
Expand All @@ -7,7 +7,11 @@

namespace Java.Interop
{
public class JavaObjectArray<T> : JavaArray<T>
public class JavaObjectArray<
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
T
>
: JavaArray<T>
{
internal static readonly ValueMarshaler Instance = new ValueMarshaler ();

Expand Down Expand Up @@ -164,7 +168,11 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)

internal sealed class ValueMarshaler : JniValueMarshaler<IList<T>> {

public override IList<T> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType)
public override IList<T> CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return JavaArray<T>.CreateValue (ref reference, options, targetType, (ref JniObjectReference h, JniObjectReferenceOptions t) => new JavaObjectArray<T> (ref h, t) {
forMarshalCollection = true,
Expand Down Expand Up @@ -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<T>? CreateMarshalObjectArray<T> (IEnumerable<T>? value)
public static JavaObjectArray<T>? CreateMarshalObjectArray<
[DynamicallyAccessedMembers (JavaObject.ConstructorsAndInterfaces)]
T
> (
IEnumerable<T>? value)
{
if (value == null) {
return null;
Expand Down
96 changes: 80 additions & 16 deletions src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs
Original file line number Diff line number Diff line change
Expand Up @@ -244,14 +244,21 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
typeof (JavaBooleanArray) == targetType;
}

public static object? CreateMarshaledValue (IntPtr handle, Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
}

internal sealed class ValueMarshaler : JniValueMarshaler<IList<Boolean>> {

public override IList<Boolean> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType)
public override IList<Boolean> CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return JavaArray<Boolean>.CreateValue (
ref reference,
Expand All @@ -276,6 +283,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Boolean> val
JavaArray<Boolean>.DestroyArgumentState<JavaBooleanArray> (value, ref state, synchronize);
}

[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
{
Func<IntPtr, Type?, object?> m = JavaBooleanArray.CreateMarshaledValue;
Expand Down Expand Up @@ -439,14 +447,21 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
typeof (JavaSByteArray) == targetType;
}

public static object? CreateMarshaledValue (IntPtr handle, Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
}

internal sealed class ValueMarshaler : JniValueMarshaler<IList<SByte>> {

public override IList<SByte> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType)
public override IList<SByte> CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return JavaArray<SByte>.CreateValue (
ref reference,
Expand All @@ -471,6 +486,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<SByte> value
JavaArray<SByte>.DestroyArgumentState<JavaSByteArray> (value, ref state, synchronize);
}

[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
{
Func<IntPtr, Type?, object?> m = JavaSByteArray.CreateMarshaledValue;
Expand Down Expand Up @@ -634,14 +650,21 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
typeof (JavaCharArray) == targetType;
}

public static object? CreateMarshaledValue (IntPtr handle, Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
}

internal sealed class ValueMarshaler : JniValueMarshaler<IList<Char>> {

public override IList<Char> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType)
public override IList<Char> CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return JavaArray<Char>.CreateValue (
ref reference,
Expand All @@ -666,6 +689,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Char> value,
JavaArray<Char>.DestroyArgumentState<JavaCharArray> (value, ref state, synchronize);
}

[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
{
Func<IntPtr, Type?, object?> m = JavaCharArray.CreateMarshaledValue;
Expand Down Expand Up @@ -829,14 +853,21 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
typeof (JavaInt16Array) == targetType;
}

public static object? CreateMarshaledValue (IntPtr handle, Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
}

internal sealed class ValueMarshaler : JniValueMarshaler<IList<Int16>> {

public override IList<Int16> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType)
public override IList<Int16> CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return JavaArray<Int16>.CreateValue (
ref reference,
Expand All @@ -861,6 +892,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Int16> value
JavaArray<Int16>.DestroyArgumentState<JavaInt16Array> (value, ref state, synchronize);
}

[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
{
Func<IntPtr, Type?, object?> m = JavaInt16Array.CreateMarshaledValue;
Expand Down Expand Up @@ -1024,14 +1056,21 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
typeof (JavaInt32Array) == targetType;
}

public static object? CreateMarshaledValue (IntPtr handle, Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
}

internal sealed class ValueMarshaler : JniValueMarshaler<IList<Int32>> {

public override IList<Int32> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType)
public override IList<Int32> CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return JavaArray<Int32>.CreateValue (
ref reference,
Expand All @@ -1056,6 +1095,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Int32> value
JavaArray<Int32>.DestroyArgumentState<JavaInt32Array> (value, ref state, synchronize);
}

[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
{
Func<IntPtr, Type?, object?> m = JavaInt32Array.CreateMarshaledValue;
Expand Down Expand Up @@ -1219,14 +1259,21 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
typeof (JavaInt64Array) == targetType;
}

public static object? CreateMarshaledValue (IntPtr handle, Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
}

internal sealed class ValueMarshaler : JniValueMarshaler<IList<Int64>> {

public override IList<Int64> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType)
public override IList<Int64> CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return JavaArray<Int64>.CreateValue (
ref reference,
Expand All @@ -1251,6 +1298,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Int64> value
JavaArray<Int64>.DestroyArgumentState<JavaInt64Array> (value, ref state, synchronize);
}

[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
{
Func<IntPtr, Type?, object?> m = JavaInt64Array.CreateMarshaledValue;
Expand Down Expand Up @@ -1414,14 +1462,21 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
typeof (JavaSingleArray) == targetType;
}

public static object? CreateMarshaledValue (IntPtr handle, Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
}

internal sealed class ValueMarshaler : JniValueMarshaler<IList<Single>> {

public override IList<Single> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType)
public override IList<Single> CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return JavaArray<Single>.CreateValue (
ref reference,
Expand All @@ -1446,6 +1501,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Single> valu
JavaArray<Single>.DestroyArgumentState<JavaSingleArray> (value, ref state, synchronize);
}

[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
{
Func<IntPtr, Type?, object?> m = JavaSingleArray.CreateMarshaledValue;
Expand Down Expand Up @@ -1609,14 +1665,21 @@ internal override bool TargetTypeIsCurrentType (Type? targetType)
typeof (JavaDoubleArray) == targetType;
}

public static object? CreateMarshaledValue (IntPtr handle, Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
}

internal sealed class ValueMarshaler : JniValueMarshaler<IList<Double>> {

public override IList<Double> CreateGenericValue (ref JniObjectReference reference, JniObjectReferenceOptions options, Type? targetType)
public override IList<Double> CreateGenericValue (
ref JniObjectReference reference,
JniObjectReferenceOptions options,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return JavaArray<Double>.CreateValue (
ref reference,
Expand All @@ -1641,6 +1704,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Double> valu
JavaArray<Double>.DestroyArgumentState<JavaDoubleArray> (value, ref state, synchronize);
}

[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
{
Func<IntPtr, Type?, object?> m = JavaDoubleArray.CreateMarshaledValue;
Expand Down
12 changes: 10 additions & 2 deletions src/Java.Interop/Java.Interop/JavaPrimitiveArrays.tt
Original file line number Diff line number Diff line change
Expand Up @@ -241,14 +241,21 @@ namespace Java.Interop {
typeof (Java<#= info.TypeModifier #>Array) == targetType;
}

public static object? CreateMarshaledValue (IntPtr handle, Type? targetType)
public static object? CreateMarshaledValue (
IntPtr handle,
[DynamicallyAccessedMembers (ConstructorsAndInterfaces)]
Type? targetType)
{
return ArrayMarshaler.CreateValue (handle, targetType);
}

internal sealed class ValueMarshaler : JniValueMarshaler<IList<<#= info.TypeModifier #>>> {

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,
Expand All @@ -273,6 +280,7 @@ namespace Java.Interop {
JavaArray<<#= info.ManagedType #>>.DestroyArgumentState<Java<#= info.TypeModifier #>Array> (value, ref state, synchronize);
}

[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
{
Func<IntPtr, Type?, object?> m = Java<#= info.TypeModifier #>Array.CreateMarshaledValue;
Expand Down
Loading