1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // This file is autogenerated by
6 // base/android/jni_generator/jni_generator.py
7 // For
8 // org/chromium/example/jni_generator/SampleForTests
9
10 #ifndef org_chromium_example_jni_generator_SampleForTests_JNI
11 #define org_chromium_example_jni_generator_SampleForTests_JNI
12
13 #include <jni.h>
14
15 #include "base/android/jni_android.h"
16 #include "base/android/scoped_java_ref.h"
17 #include "base/basictypes.h"
18 #include "base/logging.h"
19
20 using base::android::ScopedJavaLocalRef;
21
22 // Step 1: forward declarations.
23 namespace {
24 const char kInnerStructAClassPath[] =
25 "org/chromium/example/jni_generator/SampleForTests$InnerStructA";
26 const char kSampleForTestsClassPath[] =
27 "org/chromium/example/jni_generator/SampleForTests";
28 const char kInnerStructBClassPath[] =
29 "org/chromium/example/jni_generator/SampleForTests$InnerStructB";
30 // Leaking this jclass as we cannot use LazyInstance from some threads.
31 jclass g_InnerStructA_clazz = NULL;
32 // Leaking this jclass as we cannot use LazyInstance from some threads.
33 jclass g_SampleForTests_clazz = NULL;
34 // Leaking this jclass as we cannot use LazyInstance from some threads.
35 jclass g_InnerStructB_clazz = NULL;
36 } // namespace
37
38 namespace base {
39 namespace android {
40
41 static jint Init(JNIEnv* env, jobject obj,
42 jstring param);
43
44 static jdouble GetDoubleFunction(JNIEnv* env, jobject obj);
45
46 static jfloat GetFloatFunction(JNIEnv* env, jclass clazz);
47
48 static void SetNonPODDatatype(JNIEnv* env, jobject obj,
49 jobject rect);
50
51 static jobject GetNonPODDatatype(JNIEnv* env, jobject obj);
52
53 // Step 2: method stubs.
Destroy(JNIEnv * env,jobject obj,jint nativeCPPClass)54 static void Destroy(JNIEnv* env, jobject obj,
55 jint nativeCPPClass) {
56 DCHECK(nativeCPPClass) << "Destroy";
57 CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass);
58 return native->Destroy(env, obj);
59 }
60
Method(JNIEnv * env,jobject obj,jint nativeCPPClass)61 static jint Method(JNIEnv* env, jobject obj,
62 jint nativeCPPClass) {
63 DCHECK(nativeCPPClass) << "Method";
64 CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass);
65 return native->Method(env, obj);
66 }
67
MethodOtherP0(JNIEnv * env,jobject obj,jint nativePtr)68 static jdouble MethodOtherP0(JNIEnv* env, jobject obj,
69 jint nativePtr) {
70 DCHECK(nativePtr) << "MethodOtherP0";
71 CPPClass::InnerClass* native =
72 reinterpret_cast<CPPClass::InnerClass*>(nativePtr);
73 return native->MethodOtherP0(env, obj);
74 }
75
AddStructB(JNIEnv * env,jobject obj,jint nativeCPPClass,jobject b)76 static void AddStructB(JNIEnv* env, jobject obj,
77 jint nativeCPPClass,
78 jobject b) {
79 DCHECK(nativeCPPClass) << "AddStructB";
80 CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass);
81 return native->AddStructB(env, obj, b);
82 }
83
IterateAndDoSomethingWithStructB(JNIEnv * env,jobject obj,jint nativeCPPClass)84 static void IterateAndDoSomethingWithStructB(JNIEnv* env, jobject obj,
85 jint nativeCPPClass) {
86 DCHECK(nativeCPPClass) << "IterateAndDoSomethingWithStructB";
87 CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass);
88 return native->IterateAndDoSomethingWithStructB(env, obj);
89 }
90
91 static base::subtle::AtomicWord g_SampleForTests_javaMethod = 0;
Java_SampleForTests_javaMethod(JNIEnv * env,jobject obj,jint foo,jint bar)92 static jint Java_SampleForTests_javaMethod(JNIEnv* env, jobject obj, jint foo,
93 jint bar) {
94 /* Must call RegisterNativesImpl() */
95 DCHECK(g_SampleForTests_clazz);
96 jmethodID method_id =
97 base::android::MethodID::LazyGet<
98 base::android::MethodID::TYPE_INSTANCE>(
99 env, g_SampleForTests_clazz,
100 "javaMethod",
101
102 "("
103 "I"
104 "I"
105 ")"
106 "I",
107 &g_SampleForTests_javaMethod);
108
109 jint ret =
110 env->CallIntMethod(obj,
111 method_id, foo, bar);
112 base::android::CheckException(env);
113 return ret;
114 }
115
116 static base::subtle::AtomicWord g_SampleForTests_staticJavaMethod = 0;
Java_SampleForTests_staticJavaMethod(JNIEnv * env)117 static jboolean Java_SampleForTests_staticJavaMethod(JNIEnv* env) {
118 /* Must call RegisterNativesImpl() */
119 DCHECK(g_SampleForTests_clazz);
120 jmethodID method_id =
121 base::android::MethodID::LazyGet<
122 base::android::MethodID::TYPE_STATIC>(
123 env, g_SampleForTests_clazz,
124 "staticJavaMethod",
125
126 "("
127 ")"
128 "Z",
129 &g_SampleForTests_staticJavaMethod);
130
131 jboolean ret =
132 env->CallStaticBooleanMethod(g_SampleForTests_clazz,
133 method_id);
134 base::android::CheckException(env);
135 return ret;
136 }
137
138 static base::subtle::AtomicWord g_SampleForTests_packagePrivateJavaMethod = 0;
Java_SampleForTests_packagePrivateJavaMethod(JNIEnv * env,jobject obj)139 static void Java_SampleForTests_packagePrivateJavaMethod(JNIEnv* env, jobject
140 obj) {
141 /* Must call RegisterNativesImpl() */
142 DCHECK(g_SampleForTests_clazz);
143 jmethodID method_id =
144 base::android::MethodID::LazyGet<
145 base::android::MethodID::TYPE_INSTANCE>(
146 env, g_SampleForTests_clazz,
147 "packagePrivateJavaMethod",
148
149 "("
150 ")"
151 "V",
152 &g_SampleForTests_packagePrivateJavaMethod);
153
154 env->CallVoidMethod(obj,
155 method_id);
156 base::android::CheckException(env);
157
158 }
159
160 static base::subtle::AtomicWord g_SampleForTests_methodThatThrowsException = 0;
Java_SampleForTests_methodThatThrowsException(JNIEnv * env,jobject obj)161 static void Java_SampleForTests_methodThatThrowsException(JNIEnv* env, jobject
162 obj) {
163 /* Must call RegisterNativesImpl() */
164 DCHECK(g_SampleForTests_clazz);
165 jmethodID method_id =
166 base::android::MethodID::LazyGet<
167 base::android::MethodID::TYPE_INSTANCE>(
168 env, g_SampleForTests_clazz,
169 "methodThatThrowsException",
170
171 "("
172 ")"
173 "V",
174 &g_SampleForTests_methodThatThrowsException);
175
176 env->CallVoidMethod(obj,
177 method_id);
178
179 }
180
181 static base::subtle::AtomicWord g_InnerStructA_create = 0;
Java_InnerStructA_create(JNIEnv * env,jlong l,jint i,jstring s)182 static ScopedJavaLocalRef<jobject> Java_InnerStructA_create(JNIEnv* env, jlong
183 l,
184 jint i,
185 jstring s) {
186 /* Must call RegisterNativesImpl() */
187 DCHECK(g_InnerStructA_clazz);
188 jmethodID method_id =
189 base::android::MethodID::LazyGet<
190 base::android::MethodID::TYPE_STATIC>(
191 env, g_InnerStructA_clazz,
192 "create",
193
194 "("
195 "J"
196 "I"
197 "Ljava/lang/String;"
198 ")"
199 "Lorg/chromium/example/jni_generator/SampleForTests$InnerStructA;",
200 &g_InnerStructA_create);
201
202 jobject ret =
203 env->CallStaticObjectMethod(g_InnerStructA_clazz,
204 method_id, l, i, s);
205 base::android::CheckException(env);
206 return ScopedJavaLocalRef<jobject>(env, ret);
207 }
208
209 static base::subtle::AtomicWord g_SampleForTests_addStructA = 0;
Java_SampleForTests_addStructA(JNIEnv * env,jobject obj,jobject a)210 static void Java_SampleForTests_addStructA(JNIEnv* env, jobject obj, jobject a)
211 {
212 /* Must call RegisterNativesImpl() */
213 DCHECK(g_SampleForTests_clazz);
214 jmethodID method_id =
215 base::android::MethodID::LazyGet<
216 base::android::MethodID::TYPE_INSTANCE>(
217 env, g_SampleForTests_clazz,
218 "addStructA",
219
220 "("
221 "Lorg/chromium/example/jni_generator/SampleForTests$InnerStructA;"
222 ")"
223 "V",
224 &g_SampleForTests_addStructA);
225
226 env->CallVoidMethod(obj,
227 method_id, a);
228 base::android::CheckException(env);
229
230 }
231
232 static base::subtle::AtomicWord g_SampleForTests_iterateAndDoSomething = 0;
Java_SampleForTests_iterateAndDoSomething(JNIEnv * env,jobject obj)233 static void Java_SampleForTests_iterateAndDoSomething(JNIEnv* env, jobject obj)
234 {
235 /* Must call RegisterNativesImpl() */
236 DCHECK(g_SampleForTests_clazz);
237 jmethodID method_id =
238 base::android::MethodID::LazyGet<
239 base::android::MethodID::TYPE_INSTANCE>(
240 env, g_SampleForTests_clazz,
241 "iterateAndDoSomething",
242
243 "("
244 ")"
245 "V",
246 &g_SampleForTests_iterateAndDoSomething);
247
248 env->CallVoidMethod(obj,
249 method_id);
250 base::android::CheckException(env);
251
252 }
253
254 static base::subtle::AtomicWord g_InnerStructB_getKey = 0;
Java_InnerStructB_getKey(JNIEnv * env,jobject obj)255 static jlong Java_InnerStructB_getKey(JNIEnv* env, jobject obj) {
256 /* Must call RegisterNativesImpl() */
257 DCHECK(g_InnerStructB_clazz);
258 jmethodID method_id =
259 base::android::MethodID::LazyGet<
260 base::android::MethodID::TYPE_INSTANCE>(
261 env, g_InnerStructB_clazz,
262 "getKey",
263
264 "("
265 ")"
266 "J",
267 &g_InnerStructB_getKey);
268
269 jlong ret =
270 env->CallLongMethod(obj,
271 method_id);
272 base::android::CheckException(env);
273 return ret;
274 }
275
276 static base::subtle::AtomicWord g_InnerStructB_getValue = 0;
Java_InnerStructB_getValue(JNIEnv * env,jobject obj)277 static ScopedJavaLocalRef<jstring> Java_InnerStructB_getValue(JNIEnv* env,
278 jobject obj) {
279 /* Must call RegisterNativesImpl() */
280 DCHECK(g_InnerStructB_clazz);
281 jmethodID method_id =
282 base::android::MethodID::LazyGet<
283 base::android::MethodID::TYPE_INSTANCE>(
284 env, g_InnerStructB_clazz,
285 "getValue",
286
287 "("
288 ")"
289 "Ljava/lang/String;",
290 &g_InnerStructB_getValue);
291
292 jstring ret =
293 static_cast<jstring>(env->CallObjectMethod(obj,
294 method_id));
295 base::android::CheckException(env);
296 return ScopedJavaLocalRef<jstring>(env, ret);
297 }
298
299 // Step 3: RegisterNatives.
300
RegisterNativesImpl(JNIEnv * env)301 static bool RegisterNativesImpl(JNIEnv* env) {
302
303 g_InnerStructA_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
304 base::android::GetClass(env, kInnerStructAClassPath).obj()));
305 g_SampleForTests_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
306 base::android::GetClass(env, kSampleForTestsClassPath).obj()));
307 g_InnerStructB_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
308 base::android::GetClass(env, kInnerStructBClassPath).obj()));
309 static const JNINativeMethod kMethodsSampleForTests[] = {
310 { "nativeInit",
311 "("
312 "Ljava/lang/String;"
313 ")"
314 "I", reinterpret_cast<void*>(Init) },
315 { "nativeDestroy",
316 "("
317 "I"
318 ")"
319 "V", reinterpret_cast<void*>(Destroy) },
320 { "nativeGetDoubleFunction",
321 "("
322 ")"
323 "D", reinterpret_cast<void*>(GetDoubleFunction) },
324 { "nativeGetFloatFunction",
325 "("
326 ")"
327 "F", reinterpret_cast<void*>(GetFloatFunction) },
328 { "nativeSetNonPODDatatype",
329 "("
330 "Landroid/graphics/Rect;"
331 ")"
332 "V", reinterpret_cast<void*>(SetNonPODDatatype) },
333 { "nativeGetNonPODDatatype",
334 "("
335 ")"
336 "Ljava/lang/Object;", reinterpret_cast<void*>(GetNonPODDatatype) },
337 { "nativeMethod",
338 "("
339 "I"
340 ")"
341 "I", reinterpret_cast<void*>(Method) },
342 { "nativeMethodOtherP0",
343 "("
344 "I"
345 ")"
346 "D", reinterpret_cast<void*>(MethodOtherP0) },
347 { "nativeAddStructB",
348 "("
349 "I"
350 "Lorg/chromium/example/jni_generator/SampleForTests$InnerStructB;"
351 ")"
352 "V", reinterpret_cast<void*>(AddStructB) },
353 { "nativeIterateAndDoSomethingWithStructB",
354 "("
355 "I"
356 ")"
357 "V", reinterpret_cast<void*>(IterateAndDoSomethingWithStructB) },
358 };
359 const int kMethodsSampleForTestsSize = arraysize(kMethodsSampleForTests);
360
361 if (env->RegisterNatives(g_SampleForTests_clazz,
362 kMethodsSampleForTests,
363 kMethodsSampleForTestsSize) < 0) {
364 LOG(ERROR) << "RegisterNatives failed in " << __FILE__;
365 return false;
366 }
367
368 return true;
369 }
370 } // namespace android
371 } // namespace base
372
373 #endif // org_chromium_example_jni_generator_SampleForTests_JNI
374