Skip to content
This repository was archived by the owner on Jul 6, 2026. It is now read-only.

Commit 651de42

Browse files
[Java.Interop] supress one instance of IL2072 (#1205)
Context: dotnet/android#8805 When testing new defaults for `$(TrimMode)=full` in dotnet/android#8805: % dotnet new android % dotnet build -c Release -r android-arm64 Results in a single warning: external\Java.Interop\src\Java.Interop\Java.Interop\JniRuntime.JniValueManager.cs(890,4): Trim analysis warning IL2072: Java.Interop.ProxyValueMarshaler.CreateGenericObjectReferenceArgumentState(Object, ParameterAttributes): 'type' argument does not satisfy 'DynamicallyAccessedMemberTypes.Interfaces' in call to 'Java.Interop.JniRuntime.JniValueManager.GetValueMarshaler(Type)'. The return value of method 'System.Object.GetType()' 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. This appears to be a case where the trimmer (ILLink's analyzers) can detect a problem where the Roslyn analyzer could not. It is generally possible for the trimmer to discover some new warning, as it has a complete view of the final code. This appears to be similar to some other places we used the justification: [UnconditionalSuppressMessage ("Trimming", "IL2073", Justification = "This code path is not used in Android projects.")]
1 parent 5bca8ad commit 651de42

1 file changed

Lines changed: 5 additions & 1 deletion

File tree

‎src/Java.Interop/Java.Interop/JniRuntime.JniValueManager.cs‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -884,12 +884,16 @@ sealed class ProxyValueMarshaler : JniValueMarshaler<object?> {
884884

885885
publicoverrideJniValueMarshalerStateCreateGenericObjectReferenceArgumentState([MaybeNull]object?value,ParameterAttributessynchronize)
886886
{
887+
[UnconditionalSuppressMessage("Trimming","IL2073",Justification="This code path is not used in Android projects.")]
888+
[return:DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.Interfaces)]
889+
staticTypeGetType(objectvalue)=>value.GetType();
890+
887891
if(value==null)
888892
returnnewJniValueMarshalerState();
889893

890894
varjvm=JniEnvironment.Runtime;
891895

892-
varvm=jvm.ValueManager.GetValueMarshaler(value.GetType());
896+
varvm=jvm.ValueManager.GetValueMarshaler(GetType(value));
893897
if(vm!=Instance){
894898
vars=vm.CreateObjectReferenceArgumentState(value,synchronize);
895899
returnnewJniValueMarshalerState(s,vm);

0 commit comments

Comments
 (0)