1 /*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "reflection.h"
18
19 #include <float.h>
20 #include <limits.h>
21
22 #include "art_method-inl.h"
23 #include "base/enums.h"
24 #include "common_runtime_test.h"
25 #include "dex/descriptors_names.h"
26 #include "jni/java_vm_ext.h"
27 #include "jni/jni_internal.h"
28 #include "mirror/class-alloc-inl.h"
29 #include "nativehelper/scoped_local_ref.h"
30 #include "scoped_thread_state_change-inl.h"
31
32 namespace art {
33
34 class ReflectionTest : public CommonRuntimeTest {
35 protected:
SetUp()36 void SetUp() override {
37 CommonRuntimeTest::SetUp();
38
39 vm_ = Runtime::Current()->GetJavaVM();
40
41 // Turn on -verbose:jni for the JNI tests.
42 // gLogVerbosity.jni = true;
43
44 vm_->AttachCurrentThread(&env_, nullptr);
45
46 ScopedLocalRef<jclass> aioobe(env_,
47 env_->FindClass("java/lang/ArrayIndexOutOfBoundsException"));
48 CHECK(aioobe.get() != nullptr);
49 aioobe_ = reinterpret_cast<jclass>(env_->NewGlobalRef(aioobe.get()));
50
51 ScopedLocalRef<jclass> ase(env_, env_->FindClass("java/lang/ArrayStoreException"));
52 CHECK(ase.get() != nullptr);
53 ase_ = reinterpret_cast<jclass>(env_->NewGlobalRef(ase.get()));
54
55 ScopedLocalRef<jclass> sioobe(env_,
56 env_->FindClass("java/lang/StringIndexOutOfBoundsException"));
57 CHECK(sioobe.get() != nullptr);
58 sioobe_ = reinterpret_cast<jclass>(env_->NewGlobalRef(sioobe.get()));
59 }
60
CleanUpJniEnv()61 void CleanUpJniEnv() {
62 if (aioobe_ != nullptr) {
63 env_->DeleteGlobalRef(aioobe_);
64 aioobe_ = nullptr;
65 }
66 if (ase_ != nullptr) {
67 env_->DeleteGlobalRef(ase_);
68 ase_ = nullptr;
69 }
70 if (sioobe_ != nullptr) {
71 env_->DeleteGlobalRef(sioobe_);
72 sioobe_ = nullptr;
73 }
74 }
75
TearDown()76 void TearDown() override {
77 CleanUpJniEnv();
78 CommonRuntimeTest::TearDown();
79 }
80
GetPrimitiveClass(char descriptor)81 jclass GetPrimitiveClass(char descriptor) {
82 ScopedObjectAccess soa(env_);
83 ObjPtr<mirror::Class> c = class_linker_->FindPrimitiveClass(descriptor);
84 CHECK(c != nullptr);
85 return soa.AddLocalReference<jclass>(c);
86 }
87
ReflectionTestMakeInterpreted(ArtMethod ** method,ObjPtr<mirror::Object> * receiver,bool is_static,const char * method_name,const char * method_signature)88 void ReflectionTestMakeInterpreted(ArtMethod** method,
89 ObjPtr<mirror::Object>* receiver,
90 bool is_static,
91 const char* method_name,
92 const char* method_signature)
93 REQUIRES_SHARED(Locks::mutator_lock_) {
94 const char* class_name = is_static ? "StaticLeafMethods" : "NonStaticLeafMethods";
95 jobject jclass_loader(LoadDex(class_name));
96 Thread* self = Thread::Current();
97 StackHandleScope<3> hs(self);
98 Handle<mirror::ClassLoader> class_loader(
99 hs.NewHandle(
100 ScopedObjectAccessUnchecked(self).Decode<mirror::ClassLoader>(jclass_loader)));
101 if (!is_static) {
102 MakeInterpreted(class_linker_->FindSystemClass(self, "Ljava/lang/Class;"));
103 MakeInterpreted(class_linker_->FindSystemClass(self, "Ljava/lang/Object;"));
104 }
105
106 ObjPtr<mirror::Class> c = class_linker_->FindClass(self,
107 DotToDescriptor(class_name).c_str(),
108 class_loader);
109 CHECK(c != nullptr);
110 MakeInterpreted(c);
111
112 *method = c->FindClassMethod(method_name, method_signature, kRuntimePointerSize);
113 CHECK(*method != nullptr);
114 CHECK_EQ(is_static, (*method)->IsStatic());
115
116 if (is_static) {
117 *receiver = nullptr;
118 } else {
119 // Ensure class is initialized before allocating object
120 {
121 StackHandleScope<1> hs2(self);
122 HandleWrapperObjPtr<mirror::Class> h_class(hs2.NewHandleWrapper(&c));
123 bool initialized = class_linker_->EnsureInitialized(self, h_class, true, true);
124 CHECK(initialized);
125 }
126 *receiver = c->AllocObject(self);
127 }
128
129 // Start runtime.
130 HandleWrapperObjPtr<mirror::Object> h(hs.NewHandleWrapper(receiver));
131 bool started = runtime_->Start();
132 CHECK(started);
133 self->TransitionFromSuspendedToRunnable();
134 }
135
InvokeNopMethod(bool is_static)136 void InvokeNopMethod(bool is_static) {
137 ScopedObjectAccess soa(env_);
138 ArtMethod* method;
139 ObjPtr<mirror::Object> receiver;
140 ReflectionTestMakeInterpreted(&method, &receiver, is_static, "nop", "()V");
141 ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
142 InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), nullptr);
143 }
144
InvokeIdentityByteMethod(bool is_static)145 void InvokeIdentityByteMethod(bool is_static) {
146 ScopedObjectAccess soa(env_);
147 ArtMethod* method;
148 ObjPtr<mirror::Object> receiver;
149 ReflectionTestMakeInterpreted(&method, &receiver, is_static, "identity", "(B)B");
150 ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
151 jvalue args[1];
152
153 args[0].b = 0;
154 JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
155 EXPECT_EQ(0, result.GetB());
156
157 args[0].b = -1;
158 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
159 EXPECT_EQ(-1, result.GetB());
160
161 args[0].b = SCHAR_MAX;
162 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
163 EXPECT_EQ(SCHAR_MAX, result.GetB());
164
165 static_assert(SCHAR_MIN == -128, "SCHAR_MIN unexpected");
166 args[0].b = SCHAR_MIN;
167 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
168 EXPECT_EQ(SCHAR_MIN, result.GetB());
169 }
170
InvokeIdentityIntMethod(bool is_static)171 void InvokeIdentityIntMethod(bool is_static) {
172 ScopedObjectAccess soa(env_);
173 ArtMethod* method;
174 ObjPtr<mirror::Object> receiver;
175 ReflectionTestMakeInterpreted(&method, &receiver, is_static, "identity", "(I)I");
176 ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
177 jvalue args[1];
178
179 args[0].i = 0;
180 JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
181 EXPECT_EQ(0, result.GetI());
182
183 args[0].i = -1;
184 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
185 EXPECT_EQ(-1, result.GetI());
186
187 args[0].i = INT_MAX;
188 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
189 EXPECT_EQ(INT_MAX, result.GetI());
190
191 args[0].i = INT_MIN;
192 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
193 EXPECT_EQ(INT_MIN, result.GetI());
194 }
195
InvokeIdentityDoubleMethod(bool is_static)196 void InvokeIdentityDoubleMethod(bool is_static) {
197 ScopedObjectAccess soa(env_);
198 ArtMethod* method;
199 ObjPtr<mirror::Object> receiver;
200 ReflectionTestMakeInterpreted(&method, &receiver, is_static, "identity", "(D)D");
201 ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
202 jvalue args[1];
203
204 args[0].d = 0.0;
205 JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
206 EXPECT_DOUBLE_EQ(0.0, result.GetD());
207
208 args[0].d = -1.0;
209 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
210 EXPECT_DOUBLE_EQ(-1.0, result.GetD());
211
212 args[0].d = DBL_MAX;
213 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
214 EXPECT_DOUBLE_EQ(DBL_MAX, result.GetD());
215
216 args[0].d = DBL_MIN;
217 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
218 EXPECT_DOUBLE_EQ(DBL_MIN, result.GetD());
219 }
220
InvokeSumIntIntMethod(bool is_static)221 void InvokeSumIntIntMethod(bool is_static) {
222 ScopedObjectAccess soa(env_);
223 ArtMethod* method;
224 ObjPtr<mirror::Object> receiver;
225 ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(II)I");
226 ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
227 jvalue args[2];
228
229 args[0].i = 1;
230 args[1].i = 2;
231 JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
232 EXPECT_EQ(3, result.GetI());
233
234 args[0].i = -2;
235 args[1].i = 5;
236 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
237 EXPECT_EQ(3, result.GetI());
238
239 args[0].i = INT_MAX;
240 args[1].i = INT_MIN;
241 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
242 EXPECT_EQ(-1, result.GetI());
243
244 args[0].i = INT_MAX;
245 args[1].i = INT_MAX;
246 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
247 EXPECT_EQ(-2, result.GetI());
248 }
249
InvokeSumIntIntIntMethod(bool is_static)250 void InvokeSumIntIntIntMethod(bool is_static) {
251 ScopedObjectAccess soa(env_);
252 ArtMethod* method;
253 ObjPtr<mirror::Object> receiver;
254 ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(III)I");
255 ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
256 jvalue args[3];
257
258 args[0].i = 0;
259 args[1].i = 0;
260 args[2].i = 0;
261 JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
262 EXPECT_EQ(0, result.GetI());
263
264 args[0].i = 1;
265 args[1].i = 2;
266 args[2].i = 3;
267 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
268 EXPECT_EQ(6, result.GetI());
269
270 args[0].i = -1;
271 args[1].i = 2;
272 args[2].i = -3;
273 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
274 EXPECT_EQ(-2, result.GetI());
275
276 args[0].i = INT_MAX;
277 args[1].i = INT_MIN;
278 args[2].i = INT_MAX;
279 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
280 EXPECT_EQ(2147483646, result.GetI());
281
282 args[0].i = INT_MAX;
283 args[1].i = INT_MAX;
284 args[2].i = INT_MAX;
285 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
286 EXPECT_EQ(2147483645, result.GetI());
287 }
288
InvokeSumIntIntIntIntMethod(bool is_static)289 void InvokeSumIntIntIntIntMethod(bool is_static) {
290 ScopedObjectAccess soa(env_);
291 ArtMethod* method;
292 ObjPtr<mirror::Object> receiver;
293 ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(IIII)I");
294 ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
295 jvalue args[4];
296
297 args[0].i = 0;
298 args[1].i = 0;
299 args[2].i = 0;
300 args[3].i = 0;
301 JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
302 EXPECT_EQ(0, result.GetI());
303
304 args[0].i = 1;
305 args[1].i = 2;
306 args[2].i = 3;
307 args[3].i = 4;
308 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
309 EXPECT_EQ(10, result.GetI());
310
311 args[0].i = -1;
312 args[1].i = 2;
313 args[2].i = -3;
314 args[3].i = 4;
315 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
316 EXPECT_EQ(2, result.GetI());
317
318 args[0].i = INT_MAX;
319 args[1].i = INT_MIN;
320 args[2].i = INT_MAX;
321 args[3].i = INT_MIN;
322 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
323 EXPECT_EQ(-2, result.GetI());
324
325 args[0].i = INT_MAX;
326 args[1].i = INT_MAX;
327 args[2].i = INT_MAX;
328 args[3].i = INT_MAX;
329 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
330 EXPECT_EQ(-4, result.GetI());
331 }
332
InvokeSumIntIntIntIntIntMethod(bool is_static)333 void InvokeSumIntIntIntIntIntMethod(bool is_static) {
334 ScopedObjectAccess soa(env_);
335 ArtMethod* method;
336 ObjPtr<mirror::Object> receiver;
337 ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(IIIII)I");
338 ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
339 jvalue args[5];
340
341 args[0].i = 0;
342 args[1].i = 0;
343 args[2].i = 0;
344 args[3].i = 0;
345 args[4].i = 0;
346 JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
347 EXPECT_EQ(0, result.GetI());
348
349 args[0].i = 1;
350 args[1].i = 2;
351 args[2].i = 3;
352 args[3].i = 4;
353 args[4].i = 5;
354 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
355 EXPECT_EQ(15, result.GetI());
356
357 args[0].i = -1;
358 args[1].i = 2;
359 args[2].i = -3;
360 args[3].i = 4;
361 args[4].i = -5;
362 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
363 EXPECT_EQ(-3, result.GetI());
364
365 args[0].i = INT_MAX;
366 args[1].i = INT_MIN;
367 args[2].i = INT_MAX;
368 args[3].i = INT_MIN;
369 args[4].i = INT_MAX;
370 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
371 EXPECT_EQ(2147483645, result.GetI());
372
373 args[0].i = INT_MAX;
374 args[1].i = INT_MAX;
375 args[2].i = INT_MAX;
376 args[3].i = INT_MAX;
377 args[4].i = INT_MAX;
378 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
379 EXPECT_EQ(2147483643, result.GetI());
380 }
381
InvokeSumDoubleDoubleMethod(bool is_static)382 void InvokeSumDoubleDoubleMethod(bool is_static) {
383 ScopedObjectAccess soa(env_);
384 ArtMethod* method;
385 ObjPtr<mirror::Object> receiver;
386 ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(DD)D");
387 ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
388 jvalue args[2];
389
390 args[0].d = 0.0;
391 args[1].d = 0.0;
392 JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
393 EXPECT_DOUBLE_EQ(0.0, result.GetD());
394
395 args[0].d = 1.0;
396 args[1].d = 2.0;
397 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
398 EXPECT_DOUBLE_EQ(3.0, result.GetD());
399
400 args[0].d = 1.0;
401 args[1].d = -2.0;
402 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
403 EXPECT_DOUBLE_EQ(-1.0, result.GetD());
404
405 args[0].d = DBL_MAX;
406 args[1].d = DBL_MIN;
407 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
408 EXPECT_DOUBLE_EQ(1.7976931348623157e308, result.GetD());
409
410 args[0].d = DBL_MAX;
411 args[1].d = DBL_MAX;
412 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
413 EXPECT_DOUBLE_EQ(INFINITY, result.GetD());
414 }
415
InvokeSumDoubleDoubleDoubleMethod(bool is_static)416 void InvokeSumDoubleDoubleDoubleMethod(bool is_static) {
417 ScopedObjectAccess soa(env_);
418 ArtMethod* method;
419 ObjPtr<mirror::Object> receiver;
420 ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(DDD)D");
421 ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
422 jvalue args[3];
423
424 args[0].d = 0.0;
425 args[1].d = 0.0;
426 args[2].d = 0.0;
427 JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
428 EXPECT_DOUBLE_EQ(0.0, result.GetD());
429
430 args[0].d = 1.0;
431 args[1].d = 2.0;
432 args[2].d = 3.0;
433 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
434 EXPECT_DOUBLE_EQ(6.0, result.GetD());
435
436 args[0].d = 1.0;
437 args[1].d = -2.0;
438 args[2].d = 3.0;
439 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
440 EXPECT_DOUBLE_EQ(2.0, result.GetD());
441 }
442
InvokeSumDoubleDoubleDoubleDoubleMethod(bool is_static)443 void InvokeSumDoubleDoubleDoubleDoubleMethod(bool is_static) {
444 ScopedObjectAccess soa(env_);
445 ArtMethod* method;
446 ObjPtr<mirror::Object> receiver;
447 ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(DDDD)D");
448 ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
449 jvalue args[4];
450
451 args[0].d = 0.0;
452 args[1].d = 0.0;
453 args[2].d = 0.0;
454 args[3].d = 0.0;
455 JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
456 EXPECT_DOUBLE_EQ(0.0, result.GetD());
457
458 args[0].d = 1.0;
459 args[1].d = 2.0;
460 args[2].d = 3.0;
461 args[3].d = 4.0;
462 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
463 EXPECT_DOUBLE_EQ(10.0, result.GetD());
464
465 args[0].d = 1.0;
466 args[1].d = -2.0;
467 args[2].d = 3.0;
468 args[3].d = -4.0;
469 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
470 EXPECT_DOUBLE_EQ(-2.0, result.GetD());
471 }
472
InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(bool is_static)473 void InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(bool is_static) {
474 ScopedObjectAccess soa(env_);
475 ArtMethod* method;
476 ObjPtr<mirror::Object> receiver;
477 ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(DDDDD)D");
478 ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
479 jvalue args[5];
480
481 args[0].d = 0.0;
482 args[1].d = 0.0;
483 args[2].d = 0.0;
484 args[3].d = 0.0;
485 args[4].d = 0.0;
486 JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
487 EXPECT_DOUBLE_EQ(0.0, result.GetD());
488
489 args[0].d = 1.0;
490 args[1].d = 2.0;
491 args[2].d = 3.0;
492 args[3].d = 4.0;
493 args[4].d = 5.0;
494 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
495 EXPECT_DOUBLE_EQ(15.0, result.GetD());
496
497 args[0].d = 1.0;
498 args[1].d = -2.0;
499 args[2].d = 3.0;
500 args[3].d = -4.0;
501 args[4].d = 5.0;
502 result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
503 EXPECT_DOUBLE_EQ(3.0, result.GetD());
504 }
505
506 JavaVMExt* vm_;
507 JNIEnv* env_;
508 jclass aioobe_;
509 jclass ase_;
510 jclass sioobe_;
511 };
512
TEST_F(ReflectionTest,StaticNopMethod)513 TEST_F(ReflectionTest, StaticNopMethod) {
514 InvokeNopMethod(true);
515 }
516
TEST_F(ReflectionTest,NonStaticNopMethod)517 TEST_F(ReflectionTest, NonStaticNopMethod) {
518 InvokeNopMethod(false);
519 }
520
TEST_F(ReflectionTest,StaticIdentityByteMethod)521 TEST_F(ReflectionTest, StaticIdentityByteMethod) {
522 InvokeIdentityByteMethod(true);
523 }
524
TEST_F(ReflectionTest,NonStaticIdentityByteMethod)525 TEST_F(ReflectionTest, NonStaticIdentityByteMethod) {
526 InvokeIdentityByteMethod(false);
527 }
528
TEST_F(ReflectionTest,StaticIdentityIntMethod)529 TEST_F(ReflectionTest, StaticIdentityIntMethod) {
530 InvokeIdentityIntMethod(true);
531 }
532
TEST_F(ReflectionTest,NonStaticIdentityIntMethod)533 TEST_F(ReflectionTest, NonStaticIdentityIntMethod) {
534 InvokeIdentityIntMethod(false);
535 }
536
TEST_F(ReflectionTest,StaticIdentityDoubleMethod)537 TEST_F(ReflectionTest, StaticIdentityDoubleMethod) {
538 InvokeIdentityDoubleMethod(true);
539 }
540
TEST_F(ReflectionTest,NonStaticIdentityDoubleMethod)541 TEST_F(ReflectionTest, NonStaticIdentityDoubleMethod) {
542 InvokeIdentityDoubleMethod(false);
543 }
544
TEST_F(ReflectionTest,StaticSumIntIntMethod)545 TEST_F(ReflectionTest, StaticSumIntIntMethod) {
546 InvokeSumIntIntMethod(true);
547 }
548
TEST_F(ReflectionTest,NonStaticSumIntIntMethod)549 TEST_F(ReflectionTest, NonStaticSumIntIntMethod) {
550 InvokeSumIntIntMethod(false);
551 }
552
TEST_F(ReflectionTest,StaticSumIntIntIntMethod)553 TEST_F(ReflectionTest, StaticSumIntIntIntMethod) {
554 InvokeSumIntIntIntMethod(true);
555 }
556
TEST_F(ReflectionTest,NonStaticSumIntIntIntMethod)557 TEST_F(ReflectionTest, NonStaticSumIntIntIntMethod) {
558 InvokeSumIntIntIntMethod(false);
559 }
560
TEST_F(ReflectionTest,StaticSumIntIntIntIntMethod)561 TEST_F(ReflectionTest, StaticSumIntIntIntIntMethod) {
562 InvokeSumIntIntIntIntMethod(true);
563 }
564
TEST_F(ReflectionTest,NonStaticSumIntIntIntIntMethod)565 TEST_F(ReflectionTest, NonStaticSumIntIntIntIntMethod) {
566 InvokeSumIntIntIntIntMethod(false);
567 }
568
TEST_F(ReflectionTest,StaticSumIntIntIntIntIntMethod)569 TEST_F(ReflectionTest, StaticSumIntIntIntIntIntMethod) {
570 InvokeSumIntIntIntIntIntMethod(true);
571 }
572
TEST_F(ReflectionTest,NonStaticSumIntIntIntIntIntMethod)573 TEST_F(ReflectionTest, NonStaticSumIntIntIntIntIntMethod) {
574 InvokeSumIntIntIntIntIntMethod(false);
575 }
576
TEST_F(ReflectionTest,StaticSumDoubleDoubleMethod)577 TEST_F(ReflectionTest, StaticSumDoubleDoubleMethod) {
578 InvokeSumDoubleDoubleMethod(true);
579 }
580
TEST_F(ReflectionTest,NonStaticSumDoubleDoubleMethod)581 TEST_F(ReflectionTest, NonStaticSumDoubleDoubleMethod) {
582 InvokeSumDoubleDoubleMethod(false);
583 }
584
TEST_F(ReflectionTest,StaticSumDoubleDoubleDoubleMethod)585 TEST_F(ReflectionTest, StaticSumDoubleDoubleDoubleMethod) {
586 InvokeSumDoubleDoubleDoubleMethod(true);
587 }
588
TEST_F(ReflectionTest,NonStaticSumDoubleDoubleDoubleMethod)589 TEST_F(ReflectionTest, NonStaticSumDoubleDoubleDoubleMethod) {
590 InvokeSumDoubleDoubleDoubleMethod(false);
591 }
592
TEST_F(ReflectionTest,StaticSumDoubleDoubleDoubleDoubleMethod)593 TEST_F(ReflectionTest, StaticSumDoubleDoubleDoubleDoubleMethod) {
594 InvokeSumDoubleDoubleDoubleDoubleMethod(true);
595 }
596
TEST_F(ReflectionTest,NonStaticSumDoubleDoubleDoubleDoubleMethod)597 TEST_F(ReflectionTest, NonStaticSumDoubleDoubleDoubleDoubleMethod) {
598 InvokeSumDoubleDoubleDoubleDoubleMethod(false);
599 }
600
TEST_F(ReflectionTest,StaticSumDoubleDoubleDoubleDoubleDoubleMethod)601 TEST_F(ReflectionTest, StaticSumDoubleDoubleDoubleDoubleDoubleMethod) {
602 InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(true);
603 }
604
TEST_F(ReflectionTest,NonStaticSumDoubleDoubleDoubleDoubleDoubleMethod)605 TEST_F(ReflectionTest, NonStaticSumDoubleDoubleDoubleDoubleDoubleMethod) {
606 InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(false);
607 }
608
609 } // namespace art
610