• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2012 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <iostream>
6 
7 #include "third_party/jni_zero/samples/sample_for_tests.h"
8 
9 #include "base/android/jni_android.h"
10 #include "base/android/jni_string.h"
11 #include "base/android/scoped_java_ref.h"
12 // Generated file for JNI bindings from C++ to Java @CalledByNative methods.
13 // Only to be included in one .cc file.
14 // Name is based on the java file name: *.java -> jni/*_jni.h
15 #include "third_party/jni_zero/samples/jni_sample_header/SampleForAnnotationProcessor_jni.h"  // Generated by JNI.
16 #include "third_party/jni_zero/samples/jni_sample_header/SampleForTests_jni.h"  // Generated by JNI.
17 
18 using base::android::AttachCurrentThread;
19 using base::android::ConvertJavaStringToUTF8;
20 using base::android::ConvertUTF8ToJavaString;
21 using base::android::ScopedJavaLocalRef;
22 
23 namespace base {
24 namespace android {
25 
MethodOtherP0(JNIEnv * env,const JavaParamRef<jobject> & caller)26 jdouble CPPClass::InnerClass::MethodOtherP0(
27     JNIEnv* env,
28     const JavaParamRef<jobject>& caller) {
29   return 0.0;
30 }
31 
CPPClass()32 CPPClass::CPPClass() {}
33 
~CPPClass()34 CPPClass::~CPPClass() {}
35 
36 // static
Destroy(JNIEnv * env,const JavaParamRef<jobject> & caller)37 void CPPClass::Destroy(JNIEnv* env, const JavaParamRef<jobject>& caller) {
38   delete this;
39 }
40 
Method(JNIEnv * env,const JavaParamRef<jobject> & caller)41 jint CPPClass::Method(JNIEnv* env, const JavaParamRef<jobject>& caller) {
42   return 0;
43 }
44 
AddStructB(JNIEnv * env,const JavaParamRef<jobject> & caller,const JavaParamRef<jobject> & structb)45 void CPPClass::AddStructB(JNIEnv* env,
46                           const JavaParamRef<jobject>& caller,
47                           const JavaParamRef<jobject>& structb) {
48   long key = Java_InnerStructB_getKey(env, structb);
49   std::string value =
50       ConvertJavaStringToUTF8(env, Java_InnerStructB_getValue(env, structb));
51   map_[key] = value;
52 }
53 
IterateAndDoSomethingWithStructB(JNIEnv * env,const JavaParamRef<jobject> & caller)54 void CPPClass::IterateAndDoSomethingWithStructB(
55     JNIEnv* env,
56     const JavaParamRef<jobject>& caller) {
57   // Iterate over the elements and do something with them.
58   for (std::map<long, std::string>::const_iterator it = map_.begin();
59        it != map_.end(); ++it) {
60     long key = it->first;
61     std::string value = it->second;
62     std::cout << key << value;
63   }
64   map_.clear();
65 }
66 
ReturnAString(JNIEnv * env,const JavaParamRef<jobject> & caller)67 ScopedJavaLocalRef<jstring> CPPClass::ReturnAString(
68     JNIEnv* env,
69     const JavaParamRef<jobject>& caller) {
70   return ConvertUTF8ToJavaString(env, "test");
71 }
72 
73 // Static free functions declared and called directly from java.
JNI_SampleForTests_Init(JNIEnv * env,const JavaParamRef<jobject> & caller,const JavaParamRef<jstring> & param)74 static jlong JNI_SampleForTests_Init(JNIEnv* env,
75                                      const JavaParamRef<jobject>& caller,
76                                      const JavaParamRef<jstring>& param) {
77   return 0;
78 }
79 
JNI_SampleForTests_GetDoubleFunction(JNIEnv *,const JavaParamRef<jobject> &)80 static jdouble JNI_SampleForTests_GetDoubleFunction(
81     JNIEnv*,
82     const JavaParamRef<jobject>&) {
83   return 0;
84 }
85 
JNI_SampleForTests_GetFloatFunction(JNIEnv *)86 static jfloat JNI_SampleForTests_GetFloatFunction(JNIEnv*) {
87   return 0;
88 }
89 
JNI_SampleForTests_SetNonPODDatatype(JNIEnv *,const JavaParamRef<jobject> &,const JavaParamRef<jobject> &)90 static void JNI_SampleForTests_SetNonPODDatatype(JNIEnv*,
91                                                  const JavaParamRef<jobject>&,
92                                                  const JavaParamRef<jobject>&) {
93 }
94 
JNI_SampleForTests_GetNonPODDatatype(JNIEnv *,const JavaParamRef<jobject> &)95 static ScopedJavaLocalRef<jobject> JNI_SampleForTests_GetNonPODDatatype(
96     JNIEnv*,
97     const JavaParamRef<jobject>&) {
98   return ScopedJavaLocalRef<jobject>();
99 }
100 
JNI_SampleForTests_GetNonPODDatatype(JNIEnv *,const JavaParamRef<jstring> &)101 static ScopedJavaLocalRef<jstring> JNI_SampleForTests_GetNonPODDatatype(
102     JNIEnv*,
103     const JavaParamRef<jstring>&) {
104   return ScopedJavaLocalRef<jstring>();
105 }
106 
JNI_SampleForTests_GetNonPODDatatype(JNIEnv *,const JavaParamRef<jobjectArray> &)107 static ScopedJavaLocalRef<jobjectArray> JNI_SampleForTests_GetNonPODDatatype(
108     JNIEnv*,
109     const JavaParamRef<jobjectArray>&) {
110   return ScopedJavaLocalRef<jobjectArray>();
111 }
112 
JNI_SampleForTests_GetClass(JNIEnv * env,const base::android::JavaParamRef<jclass> & arg0)113 static base::android::ScopedJavaLocalRef<jclass> JNI_SampleForTests_GetClass(
114     JNIEnv* env,
115     const base::android::JavaParamRef<jclass>& arg0) {
116   return ScopedJavaLocalRef<jclass>();
117 }
118 
119 static base::android::ScopedJavaLocalRef<jthrowable>
JNI_SampleForTests_GetThrowable(JNIEnv * env,const base::android::JavaParamRef<jthrowable> & arg0)120 JNI_SampleForTests_GetThrowable(
121     JNIEnv* env,
122     const base::android::JavaParamRef<jthrowable>& arg0) {
123   return ScopedJavaLocalRef<jthrowable>();
124 }
125 
126 }  // namespace android
127 }  // namespace base
128 
129 // Proxy natives.
JNI_SampleForAnnotationProcessor_Foo(JNIEnv * env)130 static void JNI_SampleForAnnotationProcessor_Foo(JNIEnv* env) {}
131 
132 static base::android::ScopedJavaLocalRef<jobject>
JNI_SampleForAnnotationProcessor_Bar(JNIEnv * env,const base::android::JavaParamRef<jobject> & sample)133 JNI_SampleForAnnotationProcessor_Bar(
134     JNIEnv* env,
135     const base::android::JavaParamRef<jobject>& sample) {
136   return JNI_SampleForTests_GetNonPODDatatype(env, sample);
137 }
138 
139 static base::android::ScopedJavaLocalRef<jstring>
JNI_SampleForAnnotationProcessor_RevString(JNIEnv * env,const base::android::JavaParamRef<jstring> & stringToReverse)140 JNI_SampleForAnnotationProcessor_RevString(
141     JNIEnv* env,
142     const base::android::JavaParamRef<jstring>& stringToReverse) {
143   return JNI_SampleForTests_GetNonPODDatatype(env, stringToReverse);
144 }
145 
146 static base::android::ScopedJavaLocalRef<jobjectArray>
JNI_SampleForAnnotationProcessor_SendToNative(JNIEnv * env,const base::android::JavaParamRef<jobjectArray> & strs)147 JNI_SampleForAnnotationProcessor_SendToNative(
148     JNIEnv* env,
149     const base::android::JavaParamRef<jobjectArray>& strs) {
150   return JNI_SampleForTests_GetNonPODDatatype(env, strs);
151 }
152 
153 static base::android::ScopedJavaLocalRef<jobjectArray>
JNI_SampleForAnnotationProcessor_SendSamplesToNative(JNIEnv * env,const base::android::JavaParamRef<jobjectArray> & strs)154 JNI_SampleForAnnotationProcessor_SendSamplesToNative(
155     JNIEnv* env,
156     const base::android::JavaParamRef<jobjectArray>& strs) {
157   return JNI_SampleForTests_GetNonPODDatatype(env, strs);
158 }
159 
JNI_SampleForAnnotationProcessor_HasPhalange(JNIEnv * env)160 static jboolean JNI_SampleForAnnotationProcessor_HasPhalange(JNIEnv* env) {
161   return jboolean(true);
162 }
163 
164 static base::android::ScopedJavaLocalRef<jintArray>
JNI_SampleForAnnotationProcessor_TestAllPrimitives(JNIEnv * env,jint zint,const base::android::JavaParamRef<jintArray> & ints,jlong zlong,const base::android::JavaParamRef<jlongArray> & longs,jshort zshort,const base::android::JavaParamRef<jshortArray> & shorts,jchar zchar,const base::android::JavaParamRef<jcharArray> & chars,jbyte zbyte,const base::android::JavaParamRef<jbyteArray> & bytes,jdouble zdouble,const base::android::JavaParamRef<jdoubleArray> & doubles,jfloat zfloat,const base::android::JavaParamRef<jfloatArray> & floats,jboolean zbool,const base::android::JavaParamRef<jbooleanArray> & bools)165 JNI_SampleForAnnotationProcessor_TestAllPrimitives(
166     JNIEnv* env,
167     jint zint,
168     const base::android::JavaParamRef<jintArray>& ints,
169     jlong zlong,
170     const base::android::JavaParamRef<jlongArray>& longs,
171     jshort zshort,
172     const base::android::JavaParamRef<jshortArray>& shorts,
173     jchar zchar,
174     const base::android::JavaParamRef<jcharArray>& chars,
175     jbyte zbyte,
176     const base::android::JavaParamRef<jbyteArray>& bytes,
177     jdouble zdouble,
178     const base::android::JavaParamRef<jdoubleArray>& doubles,
179     jfloat zfloat,
180     const base::android::JavaParamRef<jfloatArray>& floats,
181     jboolean zbool,
182     const base::android::JavaParamRef<jbooleanArray>& bools) {
183   return ScopedJavaLocalRef<jintArray>(ints);
184 }
185 
JNI_SampleForAnnotationProcessor_TestSpecialTypes(JNIEnv * env,const base::android::JavaParamRef<jclass> & clazz,const base::android::JavaParamRef<jobjectArray> & classes,const base::android::JavaParamRef<jthrowable> & throwable,const base::android::JavaParamRef<jobjectArray> & throwables,const base::android::JavaParamRef<jstring> & string,const base::android::JavaParamRef<jobjectArray> & strings,const base::android::JavaParamRef<jobject> & tStruct,const base::android::JavaParamRef<jobjectArray> & structs,const base::android::JavaParamRef<jobject> & obj,const base::android::JavaParamRef<jobjectArray> & objects)186 static void JNI_SampleForAnnotationProcessor_TestSpecialTypes(
187     JNIEnv* env,
188     const base::android::JavaParamRef<jclass>& clazz,
189     const base::android::JavaParamRef<jobjectArray>& classes,
190     const base::android::JavaParamRef<jthrowable>& throwable,
191     const base::android::JavaParamRef<jobjectArray>& throwables,
192     const base::android::JavaParamRef<jstring>& string,
193     const base::android::JavaParamRef<jobjectArray>& strings,
194     const base::android::JavaParamRef<jobject>& tStruct,
195     const base::android::JavaParamRef<jobjectArray>& structs,
196     const base::android::JavaParamRef<jobject>& obj,
197     const base::android::JavaParamRef<jobjectArray>& objects) {}
198 
199 static base::android::ScopedJavaLocalRef<jthrowable>
JNI_SampleForAnnotationProcessor_ReturnThrowable(JNIEnv * env)200 JNI_SampleForAnnotationProcessor_ReturnThrowable(JNIEnv* env) {
201   return ScopedJavaLocalRef<jthrowable>();
202 }
203 
204 static base::android::ScopedJavaLocalRef<jobjectArray>
JNI_SampleForAnnotationProcessor_ReturnThrowables(JNIEnv * env)205 JNI_SampleForAnnotationProcessor_ReturnThrowables(JNIEnv* env) {
206   return ScopedJavaLocalRef<jobjectArray>();
207 }
208 
209 static base::android::ScopedJavaLocalRef<jclass>
JNI_SampleForAnnotationProcessor_ReturnClass(JNIEnv * env)210 JNI_SampleForAnnotationProcessor_ReturnClass(JNIEnv* env) {
211   return ScopedJavaLocalRef<jclass>();
212 }
213 
214 static base::android::ScopedJavaLocalRef<jobjectArray>
JNI_SampleForAnnotationProcessor_ReturnClasses(JNIEnv * env)215 JNI_SampleForAnnotationProcessor_ReturnClasses(JNIEnv* env) {
216   return ScopedJavaLocalRef<jobjectArray>();
217 }
218 
219 static base::android::ScopedJavaLocalRef<jstring>
JNI_SampleForAnnotationProcessor_ReturnString(JNIEnv * env)220 JNI_SampleForAnnotationProcessor_ReturnString(JNIEnv* env) {
221   return ScopedJavaLocalRef<jstring>();
222 }
223 
224 static base::android::ScopedJavaLocalRef<jobjectArray>
JNI_SampleForAnnotationProcessor_ReturnStrings(JNIEnv * env)225 JNI_SampleForAnnotationProcessor_ReturnStrings(JNIEnv* env) {
226   return ScopedJavaLocalRef<jobjectArray>();
227 }
228 
229 static base::android::ScopedJavaLocalRef<jobject>
JNI_SampleForAnnotationProcessor_ReturnStruct(JNIEnv * env)230 JNI_SampleForAnnotationProcessor_ReturnStruct(JNIEnv* env) {
231   return ScopedJavaLocalRef<jobject>();
232 }
233 
234 static base::android::ScopedJavaLocalRef<jobjectArray>
JNI_SampleForAnnotationProcessor_ReturnStructs(JNIEnv * env)235 JNI_SampleForAnnotationProcessor_ReturnStructs(JNIEnv* env) {
236   return ScopedJavaLocalRef<jobjectArray>();
237 }
238 
239 static base::android::ScopedJavaLocalRef<jobject>
JNI_SampleForAnnotationProcessor_ReturnObject(JNIEnv * env)240 JNI_SampleForAnnotationProcessor_ReturnObject(JNIEnv* env) {
241   return ScopedJavaLocalRef<jobject>();
242 }
243 
244 static base::android::ScopedJavaLocalRef<jobjectArray>
JNI_SampleForAnnotationProcessor_ReturnObjects(JNIEnv * env)245 JNI_SampleForAnnotationProcessor_ReturnObjects(JNIEnv* env) {
246   return ScopedJavaLocalRef<jobjectArray>();
247 }
248 
main()249 int main() {
250   // On a regular application, you'd call AttachCurrentThread(). This sample is
251   // not yet linking with all the libraries.
252   JNIEnv* env = /* AttachCurrentThread() */ nullptr;
253 
254   // This is how you call a java static method from C++.
255   bool foo = base::android::Java_SampleForTests_staticJavaMethod(env);
256 
257   // This is how you call a java method from C++. Note that you must have
258   // obtained the jobject somehow.
259   ScopedJavaLocalRef<jobject> my_java_object;
260   int bar =
261       base::android::Java_SampleForTests_javaMethod(env, my_java_object, 1, 2);
262 
263   base::android::Java_SampleForTests_methodWithGenericParams(
264       env, my_java_object, nullptr, nullptr);
265 
266   // This is how you call a java constructor method from C++.
267   ScopedJavaLocalRef<jobject> my_created_object =
268       base::android::Java_SampleForTests_Constructor(env, 1, 2);
269 
270   std::cout << foo << bar;
271 
272   for (int i = 0; i < 10; ++i) {
273     // Creates a "struct" that will then be used by the java side.
274     ScopedJavaLocalRef<jobject> struct_a =
275         base::android::Java_InnerStructA_create(
276             env, 0, 1, ConvertUTF8ToJavaString(env, "test"));
277     base::android::Java_SampleForTests_addStructA(env, my_java_object,
278                                                   struct_a);
279   }
280   base::android::Java_SampleForTests_iterateAndDoSomething(env, my_java_object);
281   base::android::Java_SampleForTests_packagePrivateJavaMethod(env,
282                                                               my_java_object);
283   base::android::Java_SampleForTests_methodThatThrowsException(env,
284                                                                my_java_object);
285   base::android::Java_SampleForTests_javaMethodWithAnnotatedParam(
286       env, my_java_object, 42, 13, -1, 99);
287 
288   base::android::Java_SampleForTests_getInnerInterface(env);
289   base::android::Java_SampleForTests_getInnerEnum(env);
290   base::android::Java_SampleForTests_getInnerEnum(env, 0);
291 
292   base::android::ScopedJavaLocalRef<jthrowable> throwable;
293   throwable = base::android::Java_SampleForTests_getThrowable(
294       env, my_java_object, throwable);
295 
296   base::android::ScopedJavaLocalRef<jclass> clazz;
297   clazz =
298       base::android::Java_SampleForTests_getClass(env, my_java_object, clazz);
299 
300   return 0;
301 }
302