Skip to content

Commit dec35f5

Browse files
authored
[Java.Interop] Remove support for NewObjectRequired (#1247)
Context: 972c5bc Context: dotnet/android#9146 As our minimum Android API level is now API-21 (Android 5.0), and .NET for Android only sets `Java.Interop.JniRuntime.CreationOptions.NewObjectRequired`=true on API-10 and lower, we can remove the support for this option. This has the added benefit of removing the TLS lookup that `JniEnvironment.Runtime` requires, and thus *should* improve perf. Add `[Obsolete]` to `JniRuntime.CreationOptions.NewObjectRequired`.
1 parent 001a03e commit dec35f5

File tree

4 files changed

+6
-112
lines changed

4 files changed

+6
-112
lines changed

Diff for: src/Java.Interop.GenericMarshaler/Java.Interop.GenericMarshaler/JniPeerInstanceMethodsExtensions.cs

+1-97
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22

33
namespace Java.Interop.GenericMarshaler {
44

@@ -14,9 +14,6 @@ T value
1414
if (peer == null)
1515
throw new ArgumentNullException (nameof (peer));
1616

17-
if (JniEnvironment.Runtime.NewObjectRequired) {
18-
return NewObject (peer, constructorSignature, declaringType, value);
19-
}
2017
return peer.AllocObject (declaringType);
2118
}
2219

@@ -52,9 +49,6 @@ T value
5249
if (self == null)
5350
throw new ArgumentNullException (nameof (self));
5451

55-
if (JniEnvironment.Runtime.NewObjectRequired) {
56-
return;
57-
}
5852
_InvokeConstructor (peer, constructorSignature, self, value);
5953
}
6054

@@ -90,9 +84,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2> (
9084
if (peer == null)
9185
throw new ArgumentNullException (nameof (peer));
9286

93-
if (JniEnvironment.Runtime.NewObjectRequired) {
94-
return NewObject (peer, constructorSignature, declaringType, value1, value2);
95-
}
9687
return peer.AllocObject (declaringType);
9788
}
9889

@@ -132,9 +123,6 @@ public static void FinishGenericCreateInstance<T1, T2> (
132123
if (self == null)
133124
throw new ArgumentNullException (nameof (self));
134125

135-
if (JniEnvironment.Runtime.NewObjectRequired) {
136-
return;
137-
}
138126
_InvokeConstructor (peer, constructorSignature, self, value1, value2);
139127
}
140128

@@ -174,9 +162,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3> (
174162
if (peer == null)
175163
throw new ArgumentNullException (nameof (peer));
176164

177-
if (JniEnvironment.Runtime.NewObjectRequired) {
178-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3);
179-
}
180165
return peer.AllocObject (declaringType);
181166
}
182167

@@ -220,9 +205,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3> (
220205
if (self == null)
221206
throw new ArgumentNullException (nameof (self));
222207

223-
if (JniEnvironment.Runtime.NewObjectRequired) {
224-
return;
225-
}
226208
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3);
227209
}
228210

@@ -266,9 +248,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4> (
266248
if (peer == null)
267249
throw new ArgumentNullException (nameof (peer));
268250

269-
if (JniEnvironment.Runtime.NewObjectRequired) {
270-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4);
271-
}
272251
return peer.AllocObject (declaringType);
273252
}
274253

@@ -316,9 +295,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4> (
316295
if (self == null)
317296
throw new ArgumentNullException (nameof (self));
318297

319-
if (JniEnvironment.Runtime.NewObjectRequired) {
320-
return;
321-
}
322298
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4);
323299
}
324300

@@ -366,9 +342,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4, T5>
366342
if (peer == null)
367343
throw new ArgumentNullException (nameof (peer));
368344

369-
if (JniEnvironment.Runtime.NewObjectRequired) {
370-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4, value5);
371-
}
372345
return peer.AllocObject (declaringType);
373346
}
374347

@@ -420,9 +393,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4, T5> (
420393
if (self == null)
421394
throw new ArgumentNullException (nameof (self));
422395

423-
if (JniEnvironment.Runtime.NewObjectRequired) {
424-
return;
425-
}
426396
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4, value5);
427397
}
428398

@@ -474,9 +444,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4, T5,
474444
if (peer == null)
475445
throw new ArgumentNullException (nameof (peer));
476446

477-
if (JniEnvironment.Runtime.NewObjectRequired) {
478-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4, value5, value6);
479-
}
480447
return peer.AllocObject (declaringType);
481448
}
482449

@@ -532,9 +499,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4, T5, T6> (
532499
if (self == null)
533500
throw new ArgumentNullException (nameof (self));
534501

535-
if (JniEnvironment.Runtime.NewObjectRequired) {
536-
return;
537-
}
538502
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4, value5, value6);
539503
}
540504

@@ -590,9 +554,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4, T5,
590554
if (peer == null)
591555
throw new ArgumentNullException (nameof (peer));
592556

593-
if (JniEnvironment.Runtime.NewObjectRequired) {
594-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4, value5, value6, value7);
595-
}
596557
return peer.AllocObject (declaringType);
597558
}
598559

@@ -652,9 +613,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4, T5, T6, T7> (
652613
if (self == null)
653614
throw new ArgumentNullException (nameof (self));
654615

655-
if (JniEnvironment.Runtime.NewObjectRequired) {
656-
return;
657-
}
658616
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4, value5, value6, value7);
659617
}
660618

@@ -714,9 +672,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4, T5,
714672
if (peer == null)
715673
throw new ArgumentNullException (nameof (peer));
716674

717-
if (JniEnvironment.Runtime.NewObjectRequired) {
718-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4, value5, value6, value7, value8);
719-
}
720675
return peer.AllocObject (declaringType);
721676
}
722677

@@ -780,9 +735,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4, T5, T6, T7, T8> (
780735
if (self == null)
781736
throw new ArgumentNullException (nameof (self));
782737

783-
if (JniEnvironment.Runtime.NewObjectRequired) {
784-
return;
785-
}
786738
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4, value5, value6, value7, value8);
787739
}
788740

@@ -846,9 +798,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4, T5,
846798
if (peer == null)
847799
throw new ArgumentNullException (nameof (peer));
848800

849-
if (JniEnvironment.Runtime.NewObjectRequired) {
850-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4, value5, value6, value7, value8, value9);
851-
}
852801
return peer.AllocObject (declaringType);
853802
}
854803

@@ -916,9 +865,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4, T5, T6, T7, T8, T
916865
if (self == null)
917866
throw new ArgumentNullException (nameof (self));
918867

919-
if (JniEnvironment.Runtime.NewObjectRequired) {
920-
return;
921-
}
922868
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4, value5, value6, value7, value8, value9);
923869
}
924870

@@ -986,9 +932,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4, T5,
986932
if (peer == null)
987933
throw new ArgumentNullException (nameof (peer));
988934

989-
if (JniEnvironment.Runtime.NewObjectRequired) {
990-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10);
991-
}
992935
return peer.AllocObject (declaringType);
993936
}
994937

@@ -1060,9 +1003,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4, T5, T6, T7, T8, T
10601003
if (self == null)
10611004
throw new ArgumentNullException (nameof (self));
10621005

1063-
if (JniEnvironment.Runtime.NewObjectRequired) {
1064-
return;
1065-
}
10661006
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10);
10671007
}
10681008

@@ -1134,9 +1074,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4, T5,
11341074
if (peer == null)
11351075
throw new ArgumentNullException (nameof (peer));
11361076

1137-
if (JniEnvironment.Runtime.NewObjectRequired) {
1138-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11);
1139-
}
11401077
return peer.AllocObject (declaringType);
11411078
}
11421079

@@ -1212,9 +1149,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4, T5, T6, T7, T8, T
12121149
if (self == null)
12131150
throw new ArgumentNullException (nameof (self));
12141151

1215-
if (JniEnvironment.Runtime.NewObjectRequired) {
1216-
return;
1217-
}
12181152
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11);
12191153
}
12201154

@@ -1290,9 +1224,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4, T5,
12901224
if (peer == null)
12911225
throw new ArgumentNullException (nameof (peer));
12921226

1293-
if (JniEnvironment.Runtime.NewObjectRequired) {
1294-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12);
1295-
}
12961227
return peer.AllocObject (declaringType);
12971228
}
12981229

@@ -1372,9 +1303,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4, T5, T6, T7, T8, T
13721303
if (self == null)
13731304
throw new ArgumentNullException (nameof (self));
13741305

1375-
if (JniEnvironment.Runtime.NewObjectRequired) {
1376-
return;
1377-
}
13781306
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12);
13791307
}
13801308

@@ -1454,9 +1382,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4, T5,
14541382
if (peer == null)
14551383
throw new ArgumentNullException (nameof (peer));
14561384

1457-
if (JniEnvironment.Runtime.NewObjectRequired) {
1458-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13);
1459-
}
14601385
return peer.AllocObject (declaringType);
14611386
}
14621387

@@ -1540,9 +1465,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4, T5, T6, T7, T8, T
15401465
if (self == null)
15411466
throw new ArgumentNullException (nameof (self));
15421467

1543-
if (JniEnvironment.Runtime.NewObjectRequired) {
1544-
return;
1545-
}
15461468
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13);
15471469
}
15481470

@@ -1626,9 +1548,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4, T5,
16261548
if (peer == null)
16271549
throw new ArgumentNullException (nameof (peer));
16281550

1629-
if (JniEnvironment.Runtime.NewObjectRequired) {
1630-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13, value14);
1631-
}
16321551
return peer.AllocObject (declaringType);
16331552
}
16341553

@@ -1716,9 +1635,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4, T5, T6, T7, T8, T
17161635
if (self == null)
17171636
throw new ArgumentNullException (nameof (self));
17181637

1719-
if (JniEnvironment.Runtime.NewObjectRequired) {
1720-
return;
1721-
}
17221638
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13, value14);
17231639
}
17241640

@@ -1806,9 +1722,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4, T5,
18061722
if (peer == null)
18071723
throw new ArgumentNullException (nameof (peer));
18081724

1809-
if (JniEnvironment.Runtime.NewObjectRequired) {
1810-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13, value14, value15);
1811-
}
18121725
return peer.AllocObject (declaringType);
18131726
}
18141727

@@ -1900,9 +1813,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4, T5, T6, T7, T8, T
19001813
if (self == null)
19011814
throw new ArgumentNullException (nameof (self));
19021815

1903-
if (JniEnvironment.Runtime.NewObjectRequired) {
1904-
return;
1905-
}
19061816
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13, value14, value15);
19071817
}
19081818

@@ -1994,9 +1904,6 @@ public static JniObjectReference StartGenericCreateInstance<T1, T2, T3, T4, T5,
19941904
if (peer == null)
19951905
throw new ArgumentNullException (nameof (peer));
19961906

1997-
if (JniEnvironment.Runtime.NewObjectRequired) {
1998-
return NewObject (peer, constructorSignature, declaringType, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13, value14, value15, value16);
1999-
}
20001907
return peer.AllocObject (declaringType);
20011908
}
20021909

@@ -2092,9 +1999,6 @@ public static void FinishGenericCreateInstance<T1, T2, T3, T4, T5, T6, T7, T8, T
20921999
if (self == null)
20932000
throw new ArgumentNullException (nameof (self));
20942001

2095-
if (JniEnvironment.Runtime.NewObjectRequired) {
2096-
return;
2097-
}
20982002
_InvokeConstructor (peer, constructorSignature, self, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13, value14, value15, value16);
20992003
}
21002004

Diff for: src/Java.Interop.GenericMarshaler/Java.Interop.GenericMarshaler/JniPeerInstanceMethodsExtensions.tt

-6
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,6 @@ namespace Java.Interop.GenericMarshaler {
5555
if (peer == null)
5656
throw new ArgumentNullException (nameof (peer));
5757

58-
if (JniEnvironment.Runtime.NewObjectRequired) {
59-
return NewObject (peer, constructorSignature, declaringType, <#= methodArgs #>);
60-
}
6158
return peer.AllocObject (declaringType);
6259
}
6360

@@ -110,9 +107,6 @@ namespace Java.Interop.GenericMarshaler {
110107
if (self == null)
111108
throw new ArgumentNullException (nameof (self));
112109

113-
if (JniEnvironment.Runtime.NewObjectRequired) {
114-
return;
115-
}
116110
_InvokeConstructor (peer, constructorSignature, self, <#= methodArgs #>);
117111
}
118112

Diff for: src/Java.Interop/Java.Interop/JniPeerMembers.JniInstanceMethods.cs

+4-6
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,15 @@ JniMethodInfo GetMethodInfo (string method, string signature)
159159

160160
public unsafe JniObjectReference StartCreateInstance (string constructorSignature, Type declaringType, JniArgumentValue* parameters)
161161
{
162+
#pragma warning disable CS1717
163+
parameters = parameters; // Silence CA1801
164+
#pragma warning restore CS1717
165+
162166
if (constructorSignature == null)
163167
throw new ArgumentNullException (nameof (constructorSignature));
164168
if (declaringType == null)
165169
throw new ArgumentNullException (nameof (declaringType));
166170

167-
if (JniEnvironment.Runtime.NewObjectRequired) {
168-
return NewObject (constructorSignature, declaringType, parameters);
169-
}
170171
var r = GetConstructorsForType (declaringType)
171172
.JniPeerType
172173
.AllocObject ();
@@ -197,9 +198,6 @@ public unsafe void FinishCreateInstance (string constructorSignature, IJavaPeera
197198
if (self == null)
198199
throw new ArgumentNullException (nameof (self));
199200

200-
if (JniEnvironment.Runtime.NewObjectRequired) {
201-
return;
202-
}
203201
var methods = GetConstructorsForType (self.GetType ());
204202
var ctor = methods.GetConstructor (constructorSignature);
205203
JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod (self.PeerReference, methods.JniPeerType.PeerReference, ctor, parameters);

Diff for: src/Java.Interop/Java.Interop/JniRuntime.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public partial class CreationOptions {
5050
public bool DestroyRuntimeOnDispose {get; set;}
5151

5252
// Prefer JNIEnv::NewObject() over JNIEnv::AllocObject() + JNIEnv::CallNonvirtualVoidMethod()
53+
[Obsolete ("No longer supported")]
5354
public bool NewObjectRequired {get; set;}
5455

5556
public JniVersion JniVersion {get; set;}
@@ -158,7 +159,6 @@ public static void SetCurrent (JniRuntime newCurrent)
158159
public JniVersion JniVersion {get; private set;}
159160

160161
internal bool TrackIDs {get; private set;}
161-
internal bool NewObjectRequired {get; private set;}
162162
internal bool JniAddNativeMethodRegistrationAttributePresent { get; }
163163

164164
protected JniRuntime (CreationOptions options)
@@ -172,8 +172,6 @@ protected JniRuntime (CreationOptions options)
172172
DestroyRuntimeOnDispose = options.DestroyRuntimeOnDispose;
173173
JniAddNativeMethodRegistrationAttributePresent = options.JniAddNativeMethodRegistrationAttributePresent;
174174

175-
NewObjectRequired = options.NewObjectRequired;
176-
177175
JniVersion = options.JniVersion;
178176

179177
if (options.InvocationPointer == IntPtr.Zero && options.EnvironmentPointer != IntPtr.Zero) {

0 commit comments

Comments
 (0)