Skip to content

Commit 538c8b9

Browse files
[Java.Interop] Add [RequiresDynamicCode] attribute (#1252)
Usage of `System.Linq.Expressions` can trigger warnings like: src/Mono.Android/Android.Runtime/IJavaObjectValueMarshaler.cs(40,11): error IL3050: Using member 'System.Linq.Expressions.Expression.Call(Type, String, Type[], params Expression[])' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling. Calling a generic method requires dynamic code generation. This can be suppressed if the method is not generic. src/Mono.Android/Android.Runtime/IJavaObjectValueMarshaler.cs(54,7): error IL3050: Using member 'System.Linq.Expressions.Expression.Call(Type, String, Type[], params Expression[])' which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling. Calling a generic method requires dynamic code generation. This can be suppressed if the method is not generic. Decorate the appropriate methods with `[RequiresDynamicCode]` to pass these warnings along to callers.
1 parent 5bd93ae commit 538c8b9

File tree

6 files changed

+34
-0
lines changed

6 files changed

+34
-0
lines changed

src/Java.Interop/Java.Interop/JavaPrimitiveArrays.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Boolean> val
283283
JavaArray<Boolean>.DestroyArgumentState<JavaBooleanArray> (value, ref state, synchronize);
284284
}
285285

286+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
286287
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
287288
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
288289
{
@@ -486,6 +487,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<SByte> value
486487
JavaArray<SByte>.DestroyArgumentState<JavaSByteArray> (value, ref state, synchronize);
487488
}
488489

490+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
489491
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
490492
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
491493
{
@@ -689,6 +691,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Char> value,
689691
JavaArray<Char>.DestroyArgumentState<JavaCharArray> (value, ref state, synchronize);
690692
}
691693

694+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
692695
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
693696
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
694697
{
@@ -892,6 +895,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Int16> value
892895
JavaArray<Int16>.DestroyArgumentState<JavaInt16Array> (value, ref state, synchronize);
893896
}
894897

898+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
895899
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
896900
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
897901
{
@@ -1095,6 +1099,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Int32> value
10951099
JavaArray<Int32>.DestroyArgumentState<JavaInt32Array> (value, ref state, synchronize);
10961100
}
10971101

1102+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
10981103
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
10991104
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
11001105
{
@@ -1298,6 +1303,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Int64> value
12981303
JavaArray<Int64>.DestroyArgumentState<JavaInt64Array> (value, ref state, synchronize);
12991304
}
13001305

1306+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
13011307
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
13021308
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
13031309
{
@@ -1501,6 +1507,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Single> valu
15011507
JavaArray<Single>.DestroyArgumentState<JavaSingleArray> (value, ref state, synchronize);
15021508
}
15031509

1510+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
15041511
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
15051512
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
15061513
{
@@ -1704,6 +1711,7 @@ public override void DestroyGenericArgumentState ([AllowNull] IList<Double> valu
17041711
JavaArray<Double>.DestroyArgumentState<JavaDoubleArray> (value, ref state, synchronize);
17051712
}
17061713

1714+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
17071715
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
17081716
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
17091717
{

src/Java.Interop/Java.Interop/JniBuiltinMarshalers.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ public override void DestroyGenericArgumentState (Boolean value, ref JniValueMar
271271
state = new JniValueMarshalerState ();
272272
}
273273

274+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
274275
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
275276
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType)
276277
{
@@ -283,6 +284,7 @@ public override Expression CreateParameterFromManagedExpression (JniValueMarshal
283284
return sourceValue;
284285
}
285286

287+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
286288
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
287289
public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue)
288290
{
@@ -413,6 +415,7 @@ public override void DestroyGenericArgumentState (SByte value, ref JniValueMarsh
413415
state = new JniValueMarshalerState ();
414416
}
415417

418+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
416419
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
417420
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType)
418421
{
@@ -425,6 +428,7 @@ public override Expression CreateParameterFromManagedExpression (JniValueMarshal
425428
return sourceValue;
426429
}
427430

431+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
428432
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
429433
public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue)
430434
{
@@ -555,6 +559,7 @@ public override void DestroyGenericArgumentState (Char value, ref JniValueMarsha
555559
state = new JniValueMarshalerState ();
556560
}
557561

562+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
558563
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
559564
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType)
560565
{
@@ -567,6 +572,7 @@ public override Expression CreateParameterFromManagedExpression (JniValueMarshal
567572
return sourceValue;
568573
}
569574

575+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
570576
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
571577
public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue)
572578
{
@@ -697,6 +703,7 @@ public override void DestroyGenericArgumentState (Int16 value, ref JniValueMarsh
697703
state = new JniValueMarshalerState ();
698704
}
699705

706+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
700707
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
701708
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType)
702709
{
@@ -709,6 +716,7 @@ public override Expression CreateParameterFromManagedExpression (JniValueMarshal
709716
return sourceValue;
710717
}
711718

719+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
712720
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
713721
public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue)
714722
{
@@ -839,6 +847,7 @@ public override void DestroyGenericArgumentState (Int32 value, ref JniValueMarsh
839847
state = new JniValueMarshalerState ();
840848
}
841849

850+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
842851
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
843852
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType)
844853
{
@@ -851,6 +860,7 @@ public override Expression CreateParameterFromManagedExpression (JniValueMarshal
851860
return sourceValue;
852861
}
853862

863+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
854864
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
855865
public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue)
856866
{
@@ -981,6 +991,7 @@ public override void DestroyGenericArgumentState (Int64 value, ref JniValueMarsh
981991
state = new JniValueMarshalerState ();
982992
}
983993

994+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
984995
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
985996
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType)
986997
{
@@ -993,6 +1004,7 @@ public override Expression CreateParameterFromManagedExpression (JniValueMarshal
9931004
return sourceValue;
9941005
}
9951006

1007+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
9961008
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
9971009
public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue)
9981010
{
@@ -1123,6 +1135,7 @@ public override void DestroyGenericArgumentState (Single value, ref JniValueMars
11231135
state = new JniValueMarshalerState ();
11241136
}
11251137

1138+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
11261139
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
11271140
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType)
11281141
{
@@ -1135,6 +1148,7 @@ public override Expression CreateParameterFromManagedExpression (JniValueMarshal
11351148
return sourceValue;
11361149
}
11371150

1151+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
11381152
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
11391153
public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue)
11401154
{
@@ -1265,6 +1279,7 @@ public override void DestroyGenericArgumentState (Double value, ref JniValueMars
12651279
state = new JniValueMarshalerState ();
12661280
}
12671281

1282+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
12681283
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
12691284
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType)
12701285
{
@@ -1277,6 +1292,7 @@ public override Expression CreateParameterFromManagedExpression (JniValueMarshal
12771292
return sourceValue;
12781293
}
12791294

1295+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
12801296
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
12811297
public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue)
12821298
{

src/Java.Interop/Java.Interop/JniRuntime.JniMarshalMemberBuilder.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,12 +182,14 @@ public override Expression CreateParameterFromManagedExpression (Java.Interop.Ex
182182
return sourceValue;
183183
}
184184

185+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
185186
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
186187
public override Expression CreateParameterToManagedExpression (Java.Interop.Expressions.JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType)
187188
{
188189
return sourceValue;
189190
}
190191

192+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
191193
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
192194
public override Expression CreateReturnValueFromManagedExpression (Java.Interop.Expressions.JniValueMarshalerContext context, ParameterExpression sourceValue)
193195
{

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -801,12 +801,14 @@ Expression CreateIntermediaryExpressionFromManagedExpression (JniValueMarshalerC
801801
return r;
802802
}
803803

804+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
804805
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
805806
public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue)
806807
{
807808
return ReturnObjectReferenceToJni (context, sourceValue.Name, CreateIntermediaryExpressionFromManagedExpression (context, sourceValue));
808809
}
809810

811+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
810812
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
811813
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType)
812814
{
@@ -865,12 +867,14 @@ public override Expression CreateParameterFromManagedExpression (JniValueMarshal
865867
return ValueMarshaler.CreateParameterFromManagedExpression (context, sourceValue, synchronize);
866868
}
867869

870+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
868871
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
869872
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType)
870873
{
871874
return ValueMarshaler.CreateParameterToManagedExpression (context, sourceValue, synchronize, targetType);
872875
}
873876

877+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
874878
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
875879
public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue)
876880
{

src/Java.Interop/Java.Interop/JniStringValueMarshaler.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public override Expression CreateParameterFromManagedExpression (JniValueMarshal
5151
return hdl;
5252
}
5353

54+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
5455
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
5556
public override Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue)
5657
{
@@ -63,6 +64,7 @@ public override Expression CreateReturnValueFromManagedExpression (JniValueMarsh
6364
return ReturnObjectReferenceToJni (context, sourceValue.Name, obj);
6465
}
6566

67+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
6668
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
6769
public override Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize, Type? targetType)
6870
{

src/Java.Interop/Java.Interop/JniValueMarshaler.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ public virtual JniValueMarshalerState CreateArgumentState (object? value,
155155
return CreateValue (ref r, JniObjectReferenceOptions.Copy, targetType);
156156
}
157157

158+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
158159
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
159160
public virtual Expression CreateParameterToManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue, ParameterAttributes synchronize = 0, Type? targetType = null)
160161
{
@@ -179,6 +180,7 @@ Expression CreateSelf (JniValueMarshalerContext context, ParameterExpression sou
179180
[return: DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
180181
Type _GetType () => GetType ();
181182

183+
[RequiresDynamicCode (ExpressionRequiresUnreferencedCode)]
182184
[RequiresUnreferencedCode (ExpressionRequiresUnreferencedCode)]
183185
public virtual Expression CreateReturnValueFromManagedExpression (JniValueMarshalerContext context, ParameterExpression sourceValue)
184186
{

0 commit comments

Comments
 (0)