Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(312)

Side by Side Diff: base/android/jni_generator/golden_sample_for_tests_jni.h

Issue 2154293002: jni_generator: handle inner class natives properly. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleForTests.java » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file is autogenerated by 5 // This file is autogenerated by
6 // base/android/jni_generator/jni_generator.py 6 // base/android/jni_generator/jni_generator.py
7 // For 7 // For
8 // org/chromium/example/jni_generator/SampleForTests 8 // org/chromium/example/jni_generator/SampleForTests
9 9
10 #ifndef org_chromium_example_jni_generator_SampleForTests_JNI 10 #ifndef org_chromium_example_jni_generator_SampleForTests_JNI
11 #define org_chromium_example_jni_generator_SampleForTests_JNI 11 #define org_chromium_example_jni_generator_SampleForTests_JNI
12 12
13 #include <jni.h> 13 #include <jni.h>
14 14
15 #include "base/android/jni_generator/jni_generator_helper.h" 15 #include "base/android/jni_generator/jni_generator_helper.h"
16 16
17 #include "base/android/jni_int_wrapper.h" 17 #include "base/android/jni_int_wrapper.h"
18 18
19 // Step 1: forward declarations. 19 // Step 1: forward declarations.
20 namespace { 20 namespace {
21 const char kInnerStructAClassPath[] = 21 const char kInnerStructAClassPath[] =
22 "org/chromium/example/jni_generator/SampleForTests$InnerStructA"; 22 "org/chromium/example/jni_generator/SampleForTests$InnerStructA";
23 const char kInnerClassClassPath[] =
24 "org/chromium/example/jni_generator/SampleForTests$InnerClass";
23 const char kSampleForTestsClassPath[] = 25 const char kSampleForTestsClassPath[] =
24 "org/chromium/example/jni_generator/SampleForTests"; 26 "org/chromium/example/jni_generator/SampleForTests";
25 const char kInnerStructBClassPath[] = 27 const char kInnerStructBClassPath[] =
26 "org/chromium/example/jni_generator/SampleForTests$InnerStructB"; 28 "org/chromium/example/jni_generator/SampleForTests$InnerStructB";
27 // Leaking this jclass as we cannot use LazyInstance from some threads. 29 // Leaking this jclass as we cannot use LazyInstance from some threads.
28 jclass g_InnerStructA_clazz = NULL; 30 jclass g_InnerStructA_clazz = NULL;
29 #define InnerStructA_clazz(env) g_InnerStructA_clazz 31 #define InnerStructA_clazz(env) g_InnerStructA_clazz
30 // Leaking this jclass as we cannot use LazyInstance from some threads. 32 // Leaking this jclass as we cannot use LazyInstance from some threads.
33 jclass g_InnerClass_clazz = NULL;
34 #define InnerClass_clazz(env) g_InnerClass_clazz
35 // Leaking this jclass as we cannot use LazyInstance from some threads.
31 jclass g_SampleForTests_clazz = NULL; 36 jclass g_SampleForTests_clazz = NULL;
32 #define SampleForTests_clazz(env) g_SampleForTests_clazz 37 #define SampleForTests_clazz(env) g_SampleForTests_clazz
33 // Leaking this jclass as we cannot use LazyInstance from some threads. 38 // Leaking this jclass as we cannot use LazyInstance from some threads.
34 jclass g_InnerStructB_clazz = NULL; 39 jclass g_InnerStructB_clazz = NULL;
35 #define InnerStructB_clazz(env) g_InnerStructB_clazz 40 #define InnerStructB_clazz(env) g_InnerStructB_clazz
36 41
37 } // namespace 42 } // namespace
38 43
39 namespace base { 44 namespace base {
40 namespace android { 45 namespace android {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 Java_org_chromium_example_jni_1generator_SampleForTests_nativeReturnAString( JNIEnv* 153 Java_org_chromium_example_jni_1generator_SampleForTests_nativeReturnAString( JNIEnv*
149 env, 154 env,
150 jobject jcaller, 155 jobject jcaller,
151 jlong nativeCPPClass) { 156 jlong nativeCPPClass) {
152 CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass); 157 CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass);
153 CHECK_NATIVE_PTR(env, jcaller, native, "ReturnAString", NULL); 158 CHECK_NATIVE_PTR(env, jcaller, native, "ReturnAString", NULL);
154 return native->ReturnAString(env, JavaParamRef<jobject>(env, 159 return native->ReturnAString(env, JavaParamRef<jobject>(env,
155 jcaller)).Release(); 160 jcaller)).Release();
156 } 161 }
157 162
163 static jint GetInnerIntFunction(JNIEnv* env, const JavaParamRef<jclass>&
164 jcaller);
165
166 static jint
167 Java_org_chromium_example_jni_1generator_SampleForTests_00024InnerClass_nati veGetInnerIntFunction(JNIEnv*
168 env, jclass jcaller) {
169 return GetInnerIntFunction(env, JavaParamRef<jclass>(env, jcaller));
170 }
171
158 static base::subtle::AtomicWord g_SampleForTests_javaMethod = 0; 172 static base::subtle::AtomicWord g_SampleForTests_javaMethod = 0;
159 static jint Java_SampleForTests_javaMethod(JNIEnv* env, jobject obj, 173 static jint Java_SampleForTests_javaMethod(JNIEnv* env, jobject obj,
160 JniIntWrapper foo, 174 JniIntWrapper foo,
161 JniIntWrapper bar) { 175 JniIntWrapper bar) {
162 /* Must call RegisterNativesImpl() */ 176 /* Must call RegisterNativesImpl() */
163 CHECK_CLAZZ(env, obj, 177 CHECK_CLAZZ(env, obj,
164 SampleForTests_clazz(env), 0); 178 SampleForTests_clazz(env), 0);
165 jmethodID method_id = 179 jmethodID method_id =
166 base::android::MethodID::LazyGet< 180 base::android::MethodID::LazyGet<
167 base::android::MethodID::TYPE_INSTANCE>( 181 base::android::MethodID::TYPE_INSTANCE>(
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 382
369 jstring ret = 383 jstring ret =
370 static_cast<jstring>(env->CallObjectMethod(obj, 384 static_cast<jstring>(env->CallObjectMethod(obj,
371 method_id)); 385 method_id));
372 jni_generator::CheckException(env); 386 jni_generator::CheckException(env);
373 return ScopedJavaLocalRef<jstring>(env, ret); 387 return ScopedJavaLocalRef<jstring>(env, ret);
374 } 388 }
375 389
376 // Step 3: RegisterNatives. 390 // Step 3: RegisterNatives.
377 391
392 static const JNINativeMethod kMethodsInnerClass[] = {
393 { "nativeGetInnerIntFunction",
394 "("
395 ")"
396 "I",
397 reinterpret_cast<void*>(Java_org_chromium_example_jni_1generator_SampleForTe sts_00024InnerClass_nativeGetInnerIntFunction)
398 },
399 };
400
378 static const JNINativeMethod kMethodsSampleForTests[] = { 401 static const JNINativeMethod kMethodsSampleForTests[] = {
379 { "nativeInit", 402 { "nativeInit",
380 "(" 403 "("
381 "Ljava/lang/String;" 404 "Ljava/lang/String;"
382 ")" 405 ")"
383 "J", 406 "J",
384 reinterpret_cast<void*>(Java_org_chromium_example_jni_1generator_SampleForTe sts_nativeInit) 407 reinterpret_cast<void*>(Java_org_chromium_example_jni_1generator_SampleForTe sts_nativeInit)
385 }, 408 },
386 { "nativeDestroy", 409 { "nativeDestroy",
387 "(" 410 "("
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 ")" 473 ")"
451 "Ljava/lang/String;", 474 "Ljava/lang/String;",
452 reinterpret_cast<void*>(Java_org_chromium_example_jni_1generator_SampleForTe sts_nativeReturnAString) 475 reinterpret_cast<void*>(Java_org_chromium_example_jni_1generator_SampleForTe sts_nativeReturnAString)
453 }, 476 },
454 }; 477 };
455 478
456 static bool RegisterNativesImpl(JNIEnv* env) { 479 static bool RegisterNativesImpl(JNIEnv* env) {
457 480
458 g_InnerStructA_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( 481 g_InnerStructA_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
459 base::android::GetClass(env, kInnerStructAClassPath).obj())); 482 base::android::GetClass(env, kInnerStructAClassPath).obj()));
483 g_InnerClass_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
484 base::android::GetClass(env, kInnerClassClassPath).obj()));
460 g_SampleForTests_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( 485 g_SampleForTests_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
461 base::android::GetClass(env, kSampleForTestsClassPath).obj())); 486 base::android::GetClass(env, kSampleForTestsClassPath).obj()));
462 g_InnerStructB_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( 487 g_InnerStructB_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
463 base::android::GetClass(env, kInnerStructBClassPath).obj())); 488 base::android::GetClass(env, kInnerStructBClassPath).obj()));
464 489
490 const int kMethodsInnerClassSize = arraysize(kMethodsInnerClass);
491
492 if (env->RegisterNatives(InnerClass_clazz(env),
493 kMethodsInnerClass,
494 kMethodsInnerClassSize) < 0) {
495 jni_generator::HandleRegistrationError(
496 env, InnerClass_clazz(env), __FILE__);
497 return false;
498 }
499
465 const int kMethodsSampleForTestsSize = arraysize(kMethodsSampleForTests); 500 const int kMethodsSampleForTestsSize = arraysize(kMethodsSampleForTests);
466 501
467 if (env->RegisterNatives(SampleForTests_clazz(env), 502 if (env->RegisterNatives(SampleForTests_clazz(env),
468 kMethodsSampleForTests, 503 kMethodsSampleForTests,
469 kMethodsSampleForTestsSize) < 0) { 504 kMethodsSampleForTestsSize) < 0) {
470 jni_generator::HandleRegistrationError( 505 jni_generator::HandleRegistrationError(
471 env, SampleForTests_clazz(env), __FILE__); 506 env, SampleForTests_clazz(env), __FILE__);
472 return false; 507 return false;
473 } 508 }
474 509
475 return true; 510 return true;
476 } 511 }
477 512
478 } // namespace android 513 } // namespace android
479 } // namespace base 514 } // namespace base
480 515
481 #endif // org_chromium_example_jni_generator_SampleForTests_JNI 516 #endif // org_chromium_example_jni_generator_SampleForTests_JNI
OLDNEW
« no previous file with comments | « no previous file | base/android/jni_generator/java/src/org/chromium/example/jni_generator/SampleForTests.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698