blob: 0e9cb8439516729c05f77a7e473bb0c62485ba13 [file] [log] [blame]
Ian Rogersdf20fe02011-07-20 20:34:16 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
Brian Carlstrom578bbdc2011-07-21 14:07:47 -07003#include "jni_internal.h"
Carl Shapiro2ed144c2011-07-26 16:52:08 -07004
Carl Shapiro9b9ba282011-08-14 15:30:39 -07005#include <cstdarg>
Carl Shapiro2ed144c2011-07-26 16:52:08 -07006#include <vector>
7#include <utility>
Carl Shapiro9b9ba282011-08-14 15:30:39 -07008#include <sys/mman.h>
Carl Shapiro2ed144c2011-07-26 16:52:08 -07009
Elliott Hughes40ef99e2011-08-11 17:44:34 -070010#include "class_linker.h"
Carl Shapiroea4dca82011-08-01 13:45:38 -070011#include "jni.h"
Brian Carlstrom578bbdc2011-07-21 14:07:47 -070012#include "logging.h"
Carl Shapiro9b9ba282011-08-14 15:30:39 -070013#include "object.h"
Carl Shapiro2ed144c2011-07-26 16:52:08 -070014#include "runtime.h"
Carl Shapirofc322c72011-07-27 00:20:01 -070015#include "scoped_ptr.h"
16#include "stringpiece.h"
Carl Shapiro2ed144c2011-07-26 16:52:08 -070017#include "thread.h"
Ian Rogersdf20fe02011-07-20 20:34:16 -070018
19namespace art {
20
Elliott Hughes22f40932011-08-12 13:06:37 -070021// Entry/exit processing for all JNI calls.
22//
23// This performs the necessary thread state switching, lets us amortize the
24// cost of working out the current thread, and lets us check (and repair) apps
25// that are using a JNIEnv on the wrong thread.
26class ScopedJniThreadState {
27 public:
28 explicit ScopedJniThreadState(JNIEnv* env) {
Elliott Hughesb20a5542011-08-12 18:03:12 -070029 self_ = ThreadForEnv(env);
Elliott Hughes22f40932011-08-12 13:06:37 -070030 self_->SetState(Thread::kRunnable);
31 }
32
33 ~ScopedJniThreadState() {
34 self_->SetState(Thread::kNative);
35 }
36
Elliott Hughesb20a5542011-08-12 18:03:12 -070037 Thread* Self() {
Elliott Hughes22f40932011-08-12 13:06:37 -070038 return self_;
39 }
40
Elliott Hughesb20a5542011-08-12 18:03:12 -070041 private:
42 static Thread* ThreadForEnv(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -070043 // TODO: need replacement for gDvmJni.
44 bool workAroundAppJniBugs = true;
45 Thread* env_self = reinterpret_cast<JNIEnvExt*>(env)->self;
46 Thread* self = workAroundAppJniBugs ? Thread::Current() : env_self;
47 if (self != env_self) {
Elliott Hughes330304d2011-08-12 14:28:05 -070048 LOG(ERROR) << "JNI ERROR: JNIEnv for " << *env_self
49 << " used on " << *self;
50 // TODO: dump stack
Elliott Hughes22f40932011-08-12 13:06:37 -070051 }
52 return self;
53 }
54
Elliott Hughes22f40932011-08-12 13:06:37 -070055 Thread* self_;
56 DISALLOW_COPY_AND_ASSIGN(ScopedJniThreadState);
57};
58
Carl Shapiro9b9ba282011-08-14 15:30:39 -070059void CreateInvokeStub(Assembler* assembler, Method* method);
60
61bool EnsureInvokeStub(Method* method) {
62 if (method->GetInvokeStub() != NULL) {
63 return true;
64 }
65 // TODO: use signature to find a matching stub
66 // TODO: failed, acquire a lock on the stub table
67 Assembler assembler;
68 CreateInvokeStub(&assembler, method);
69 // TODO: store native_entry in the stub table
70 int prot = PROT_READ | PROT_WRITE | PROT_EXEC;
71 size_t length = assembler.CodeSize();
72 void* addr = mmap(NULL, length, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
73 if (addr == MAP_FAILED) {
74 PLOG(FATAL) << "mmap failed";
75 }
76 MemoryRegion region(addr, length);
77 assembler.FinalizeInstructions(region);
78 method->SetInvokeStub(reinterpret_cast<Method::InvokeStub*>(region.pointer()));
79 return true;
80}
81
Elliott Hughesd8ddfd52011-08-15 14:32:53 -070082byte* CreateArgArray(Method* method, va_list ap) {
Carl Shapiro9b9ba282011-08-14 15:30:39 -070083 size_t num_bytes = method->NumArgArrayBytes();
84 scoped_array<byte> arg_array(new byte[num_bytes]);
85 const StringPiece& shorty = method->GetShorty();
86 for (int i = 1, offset = 0; i < shorty.size() - 1; ++i) {
87 switch (shorty[i]) {
88 case 'Z':
89 case 'B':
90 case 'C':
91 case 'S':
92 case 'I':
93 *reinterpret_cast<int32_t*>(&arg_array[offset]) = va_arg(ap, jint);
94 offset += 4;
95 break;
96 case 'F':
97 *reinterpret_cast<float*>(&arg_array[offset]) = va_arg(ap, jdouble);
98 offset += 4;
99 break;
100 case 'L': {
101 // TODO: local reference
102 Object* obj = reinterpret_cast<Object*>(va_arg(ap, jobject));
103 *reinterpret_cast<Object**>(&arg_array[offset]) = obj;
104 offset += sizeof(Object*);
105 break;
106 }
107 case 'D':
108 *reinterpret_cast<double*>(&arg_array[offset]) = va_arg(ap, jdouble);
109 offset += 8;
110 break;
111 case 'J':
112 *reinterpret_cast<int64_t*>(&arg_array[offset]) = va_arg(ap, jlong);
113 offset += 8;
114 break;
115 }
116 }
117 return arg_array.release();
118}
119
Elliott Hughesd8ddfd52011-08-15 14:32:53 -0700120byte* CreateArgArray(Method* method, jvalue* args) {
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700121 size_t num_bytes = method->NumArgArrayBytes();
122 scoped_array<byte> arg_array(new byte[num_bytes]);
123 const StringPiece& shorty = method->GetShorty();
124 for (int i = 1, offset = 0; i < shorty.size() - 1; ++i) {
125 switch (shorty[i]) {
126 case 'Z':
127 case 'B':
128 case 'C':
129 case 'S':
130 case 'I':
131 *reinterpret_cast<uint32_t*>(&arg_array[offset]) = args[i - 1].i;
132 offset += 4;
133 break;
134 case 'F':
135 *reinterpret_cast<float*>(&arg_array[offset]) = args[i - 1].f;
136 offset += 4;
137 break;
138 case 'L': {
139 Object* obj = reinterpret_cast<Object*>(args[i - 1].l); // TODO: local reference
140 *reinterpret_cast<Object**>(&arg_array[offset]) = obj;
141 offset += sizeof(Object*);
142 break;
143 }
144 case 'D':
145 *reinterpret_cast<double*>(&arg_array[offset]) = args[i - 1].d;
146 offset += 8;
147 break;
148 case 'J':
149 *reinterpret_cast<uint64_t*>(&arg_array[offset]) = args[i - 1].j;
150 offset += 8;
151 break;
152 }
153 }
154 return arg_array.release();
155}
156
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700157JValue InvokeWithArgArray(Thread* self, Object* obj, jmethodID method_id,
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700158 byte* args) {
159 Method* method = reinterpret_cast<Method*>(method_id); // TODO
160 // Call the invoke stub associated with the method
161 // Pass everything as arguments
162 const Method::InvokeStub* stub = method->GetInvokeStub();
163 CHECK(stub != NULL);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700164 JValue result;
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700165 (*stub)(method, obj, self, args, &result);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700166 return result;
167}
168
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700169JValue InvokeWithJValues(Thread* self, Object* obj, jmethodID method_id,
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700170 jvalue* args) {
171 Method* method = reinterpret_cast<Method*>(method_id);
172 scoped_array<byte> arg_array(CreateArgArray(method, args));
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700173 return InvokeWithArgArray(self, obj, method_id, arg_array.get());
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700174}
175
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700176JValue InvokeWithVarArgs(Thread* self, Object* obj, jmethodID method_id,
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700177 va_list args) {
178 Method* method = reinterpret_cast<Method*>(method_id);
179 scoped_array<byte> arg_array(CreateArgArray(method, args));
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700180 return InvokeWithArgArray(self, obj, method_id, arg_array.get());
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700181}
182
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700183jint GetVersion(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700184 ScopedJniThreadState ts(env);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700185 return JNI_VERSION_1_6;
186}
187
Elliott Hughesb20a5542011-08-12 18:03:12 -0700188jclass DefineClass(JNIEnv* env, const char*, jobject, const jbyte*, jsize) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700189 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -0700190 LOG(WARNING) << "JNI DefineClass is not supported";
Carl Shapiroea4dca82011-08-01 13:45:38 -0700191 return NULL;
192}
193
Elliott Hughes6b436852011-08-12 10:16:44 -0700194// Section 12.3.2 of the JNI spec describes JNI class descriptors. They're
195// separated with slashes but aren't wrapped with "L;" like regular descriptors
196// (i.e. "a/b/C" rather than "La/b/C;"). Arrays of reference types are an
197// exception; there the "L;" must be present ("[La/b/C;"). Historically we've
198// supported names with dots too (such as "a.b.C").
199std::string NormalizeJniClassDescriptor(const char* name) {
200 std::string result;
201 // Add the missing "L;" if necessary.
202 if (name[0] == '[') {
203 result = name;
204 } else {
205 result += 'L';
206 result += name;
207 result += ';';
208 }
209 // Rewrite '.' as '/' for backwards compatibility.
210 for (size_t i = 0; i < result.size(); ++i) {
211 if (result[i] == '.') {
212 result[i] = '/';
213 }
214 }
215 return result;
216}
217
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700218jclass FindClass(JNIEnv* env, const char* name) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700219 ScopedJniThreadState ts(env);
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700220 ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
Elliott Hughes6b436852011-08-12 10:16:44 -0700221 std::string descriptor(NormalizeJniClassDescriptor(name));
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700222 // TODO: need to get the appropriate ClassLoader.
Elliott Hughes6b436852011-08-12 10:16:44 -0700223 Class* c = class_linker->FindClass(descriptor, NULL);
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700224 // TODO: local reference.
225 return reinterpret_cast<jclass>(c);
226}
227
228jmethodID FromReflectedMethod(JNIEnv* env, jobject method) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700229 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700230 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700231 return NULL;
232}
233
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700234jfieldID FromReflectedField(JNIEnv* env, jobject field) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700235 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700236 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700237 return NULL;
238}
239
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700240jobject ToReflectedMethod(JNIEnv* env, jclass cls,
241 jmethodID methodID, jboolean isStatic) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700242 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700243 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700244 return NULL;
245}
246
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700247jclass GetSuperclass(JNIEnv* env, jclass sub) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700248 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700249 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700250 return NULL;
251}
252
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700253jboolean IsAssignableFrom(JNIEnv* env, jclass sub, jclass sup) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700254 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700255 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700256 return JNI_FALSE;
257}
258
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700259jobject ToReflectedField(JNIEnv* env, jclass cls,
260 jfieldID fieldID, jboolean isStatic) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700261 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700262 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700263 return NULL;
264}
265
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700266jint Throw(JNIEnv* env, jthrowable obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700267 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700268 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700269 return 0;
270}
271
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700272jint ThrowNew(JNIEnv* env, jclass clazz, const char* msg) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700273 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700274 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700275 return 0;
276}
277
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700278jthrowable ExceptionOccurred(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700279 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700280 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700281 return NULL;
282}
283
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700284void ExceptionDescribe(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700285 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700286 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700287}
288
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700289void ExceptionClear(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700290 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -0700291 ts.Self()->ClearException();
Carl Shapiroea4dca82011-08-01 13:45:38 -0700292}
293
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700294void FatalError(JNIEnv* env, const char* msg) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700295 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -0700296 LOG(FATAL) << "JNI FatalError called: " << msg;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700297}
298
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700299jint PushLocalFrame(JNIEnv* env, jint cap) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700300 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700301 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700302 return 0;
303}
304
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700305jobject PopLocalFrame(JNIEnv* env, jobject res) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700306 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700307 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700308 return NULL;
309}
310
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700311jobject NewGlobalRef(JNIEnv* env, jobject lobj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700312 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700313 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700314 return NULL;
315}
316
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700317void DeleteGlobalRef(JNIEnv* env, jobject gref) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700318 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700319 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700320}
321
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700322void DeleteLocalRef(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700323 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700324 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700325}
326
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700327jboolean IsSameObject(JNIEnv* env, jobject obj1, jobject obj2) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700328 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700329 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700330 return JNI_FALSE;
331}
332
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700333jobject NewLocalRef(JNIEnv* env, jobject ref) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700334 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700335 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700336 return NULL;
337}
338
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700339jint EnsureLocalCapacity(JNIEnv* env, jint) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700340 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700341 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700342 return 0;
343}
344
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700345jobject AllocObject(JNIEnv* env, jclass clazz) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700346 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700347 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700348 return NULL;
349}
350
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700351jobject NewObject(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700352 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700353 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700354 return NULL;
355}
356
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700357jobject NewObjectV(JNIEnv* env,
358 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700359 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700360 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700361 return NULL;
362}
363
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700364jobject NewObjectA(JNIEnv* env,
365 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700366 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700367 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700368 return NULL;
369}
370
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700371jclass GetObjectClass(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700372 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700373 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700374 return NULL;
375}
376
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700377jboolean IsInstanceOf(JNIEnv* env, jobject obj, jclass clazz) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700378 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700379 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700380 return JNI_FALSE;
381}
382
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700383jmethodID GetMethodID(JNIEnv* env,
384 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700385 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700386 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700387 return NULL;
388}
389
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700390jobject CallObjectMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700391 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700392 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700393 return NULL;
394}
395
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700396jobject CallObjectMethodV(JNIEnv* env,
397 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700398 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700399 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700400 return NULL;
401}
402
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700403jobject CallObjectMethodA(JNIEnv* env,
404 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700405 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700406 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700407 return NULL;
408}
409
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700410jboolean CallBooleanMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700411 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700412 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700413 return JNI_FALSE;
414}
415
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700416jboolean CallBooleanMethodV(JNIEnv* env,
417 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700418 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700419 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700420 return JNI_FALSE;
421}
422
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700423jboolean CallBooleanMethodA(JNIEnv* env,
424 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700425 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700426 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700427 return JNI_FALSE;
428}
429
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700430jbyte CallByteMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700431 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700432 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700433 return 0;
434}
435
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700436jbyte CallByteMethodV(JNIEnv* env,
437 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700438 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700439 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700440 return 0;
441}
442
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700443jbyte CallByteMethodA(JNIEnv* env,
444 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700445 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700446 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700447 return 0;
448}
449
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700450jchar CallCharMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700451 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700452 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700453 return 0;
454}
455
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700456jchar CallCharMethodV(JNIEnv* env,
457 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700458 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700459 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700460 return 0;
461}
462
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700463jchar CallCharMethodA(JNIEnv* env,
464 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700465 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700466 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700467 return 0;
468}
469
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700470jshort CallShortMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700471 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700472 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700473 return 0;
474}
475
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700476jshort CallShortMethodV(JNIEnv* env,
477 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700478 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700479 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700480 return 0;
481}
482
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700483jshort CallShortMethodA(JNIEnv* env,
484 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700485 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700486 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700487 return 0;
488}
489
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700490jint CallIntMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700491 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700492 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700493 return 0;
494}
495
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700496jint CallIntMethodV(JNIEnv* env,
497 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700498 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700499 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700500 return 0;
501}
502
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700503jint CallIntMethodA(JNIEnv* env,
504 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700505 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700506 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700507 return 0;
508}
509
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700510jlong CallLongMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700511 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700512 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700513 return 0;
514}
515
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700516jlong CallLongMethodV(JNIEnv* env,
517 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700518 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700519 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700520 return 0;
521}
522
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700523jlong CallLongMethodA(JNIEnv* env,
524 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700525 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700526 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700527 return 0;
528}
529
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700530jfloat CallFloatMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700531 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700532 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700533 return 0;
534}
535
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700536jfloat CallFloatMethodV(JNIEnv* env,
537 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700538 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700539 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700540 return 0;
541}
542
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700543jfloat CallFloatMethodA(JNIEnv* env,
544 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700545 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700546 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700547 return 0;
548}
549
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700550jdouble CallDoubleMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700551 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700552 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700553 return 0;
554}
555
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700556jdouble CallDoubleMethodV(JNIEnv* env,
557 jobject obj, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700558 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700559 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700560 return 0;
561}
562
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700563jdouble CallDoubleMethodA(JNIEnv* env,
564 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700565 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700566 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700567 return 0;
568}
569
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700570void CallVoidMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700571 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700572 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700573}
574
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700575void CallVoidMethodV(JNIEnv* env, jobject obj,
576 jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700577 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700578 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700579}
580
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700581void CallVoidMethodA(JNIEnv* env, jobject obj,
582 jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700583 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700584 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700585}
586
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700587jobject CallNonvirtualObjectMethod(JNIEnv* env,
588 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700589 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700590 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700591 return NULL;
592}
593
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700594jobject CallNonvirtualObjectMethodV(JNIEnv* env,
595 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700596 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700597 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700598 return NULL;
599}
600
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700601jobject CallNonvirtualObjectMethodA(JNIEnv* env,
602 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700603 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700604 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700605 return NULL;
606}
607
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700608jboolean CallNonvirtualBooleanMethod(JNIEnv* env,
609 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700610 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700611 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700612 return JNI_FALSE;
613}
614
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700615jboolean CallNonvirtualBooleanMethodV(JNIEnv* env,
616 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700617 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700618 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700619 return JNI_FALSE;
620}
621
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700622jboolean CallNonvirtualBooleanMethodA(JNIEnv* env,
623 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700624 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700625 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700626 return JNI_FALSE;
627}
628
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700629jbyte CallNonvirtualByteMethod(JNIEnv* env,
630 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700631 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700632 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700633 return 0;
634}
635
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700636jbyte CallNonvirtualByteMethodV(JNIEnv* env,
637 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700638 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700639 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700640 return 0;
641}
642
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700643jbyte CallNonvirtualByteMethodA(JNIEnv* env,
644 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700645 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700646 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700647 return 0;
648}
649
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700650jchar CallNonvirtualCharMethod(JNIEnv* env,
651 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700652 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700653 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700654 return 0;
655}
656
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700657jchar CallNonvirtualCharMethodV(JNIEnv* env,
658 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700659 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700660 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700661 return 0;
662}
663
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700664jchar CallNonvirtualCharMethodA(JNIEnv* env,
665 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700666 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700667 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700668 return 0;
669}
670
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700671jshort CallNonvirtualShortMethod(JNIEnv* env,
672 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700673 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700674 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700675 return 0;
676}
677
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700678jshort CallNonvirtualShortMethodV(JNIEnv* env,
679 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700680 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700681 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700682 return 0;
683}
684
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700685jshort CallNonvirtualShortMethodA(JNIEnv* env,
686 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700687 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700688 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700689 return 0;
690}
691
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700692jint CallNonvirtualIntMethod(JNIEnv* env,
693 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700694 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700695 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700696 return 0;
697}
698
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700699jint CallNonvirtualIntMethodV(JNIEnv* env,
700 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700701 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700702 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700703 return 0;
704}
705
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700706jint CallNonvirtualIntMethodA(JNIEnv* env,
707 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700708 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700709 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700710 return 0;
711}
712
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700713jlong CallNonvirtualLongMethod(JNIEnv* env,
714 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700715 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700716 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700717 return 0;
718}
719
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700720jlong CallNonvirtualLongMethodV(JNIEnv* env,
721 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700722 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700723 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700724 return 0;
725}
726
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700727jlong CallNonvirtualLongMethodA(JNIEnv* env,
728 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700729 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700730 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700731 return 0;
732}
733
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700734jfloat CallNonvirtualFloatMethod(JNIEnv* env,
735 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700736 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700737 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700738 return 0;
739}
740
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700741jfloat CallNonvirtualFloatMethodV(JNIEnv* env,
742 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700743 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700744 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700745 return 0;
746}
747
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700748jfloat CallNonvirtualFloatMethodA(JNIEnv* env,
749 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700750 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700751 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700752 return 0;
753}
754
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700755jdouble CallNonvirtualDoubleMethod(JNIEnv* env,
756 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700757 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700758 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700759 return 0;
760}
761
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700762jdouble CallNonvirtualDoubleMethodV(JNIEnv* env,
763 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700764 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700765 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700766 return 0;
767}
768
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700769jdouble CallNonvirtualDoubleMethodA(JNIEnv* env,
770 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700771 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700772 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700773 return 0;
774}
775
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700776void CallNonvirtualVoidMethod(JNIEnv* env,
777 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700778 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700779 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700780}
781
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700782void CallNonvirtualVoidMethodV(JNIEnv* env,
783 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700784 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700785 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700786}
787
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700788void CallNonvirtualVoidMethodA(JNIEnv* env,
789 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700790 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700791 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700792}
793
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700794jfieldID GetFieldID(JNIEnv* env,
795 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700796 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700797 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700798 return NULL;
799}
800
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700801jobject GetObjectField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700802 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700803 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700804 return NULL;
805}
806
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700807jboolean GetBooleanField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700808 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700809 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700810 return JNI_FALSE;
811}
812
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700813jbyte GetByteField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700814 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700815 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700816 return 0;
817}
818
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700819jchar GetCharField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700820 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700821 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700822 return 0;
823}
824
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700825jshort GetShortField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700826 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700827 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700828 return 0;
829}
830
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700831jint GetIntField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700832 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700833 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700834 return 0;
835}
836
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700837jlong GetLongField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700838 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700839 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700840 return 0;
841}
842
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700843jfloat GetFloatField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700844 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700845 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700846 return 0;
847}
848
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700849jdouble GetDoubleField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700850 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700851 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700852 return 0;
853}
854
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700855void SetObjectField(JNIEnv* env, jobject obj, jfieldID fieldID, jobject val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700856 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700857 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700858}
859
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700860void SetBooleanField(JNIEnv* env, jobject obj, jfieldID fieldID, jboolean val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700861 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700862 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700863}
864
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700865void SetByteField(JNIEnv* env, jobject obj, jfieldID fieldID, jbyte val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700866 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700867 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700868}
869
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700870void SetCharField(JNIEnv* env, jobject obj, jfieldID fieldID, jchar val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700871 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700872 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700873}
874
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700875void SetShortField(JNIEnv* env, jobject obj, jfieldID fieldID, jshort val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700876 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700877 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700878}
879
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700880void SetIntField(JNIEnv* env, jobject obj, jfieldID fieldID, jint val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700881 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700882 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700883}
884
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700885void SetLongField(JNIEnv* env, jobject obj, jfieldID fieldID, jlong val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700886 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700887 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700888}
889
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700890void SetFloatField(JNIEnv* env, jobject obj, jfieldID fieldID, jfloat val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700891 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700892 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700893}
894
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700895void SetDoubleField(JNIEnv* env, jobject obj, jfieldID fieldID, jdouble val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700896 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700897 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700898}
899
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700900jmethodID GetStaticMethodID(JNIEnv* env,
901 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700902 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700903 // TODO: retrieve handle value for class
904 Class* klass = reinterpret_cast<Class*>(clazz);
905 // TODO: check that klass is initialized
906 Method* method = klass->FindDirectMethod(name, sig);
907 if (method == NULL || !method->IsStatic()) {
908 // TODO: throw NoSuchMethodError
909 return NULL;
910 }
911 // TODO: create a JNI weak global reference for method
912 bool success = EnsureInvokeStub(method);
913 if (!success) {
914 // TODO: throw OutOfMemoryException
915 return NULL;
916 }
917 return reinterpret_cast<jmethodID>(method);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700918}
919
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700920jobject CallStaticObjectMethod(JNIEnv* env,
921 jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700922 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700923 va_list ap;
924 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700925 JValue result = InvokeWithVarArgs(ts.Self(), NULL, methodID, ap);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700926 jobject obj = reinterpret_cast<jobject>(result.l); // TODO: local reference
927 return obj;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700928}
929
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700930jobject CallStaticObjectMethodV(JNIEnv* env,
931 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700932 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700933 JValue result = InvokeWithVarArgs(ts.Self(), NULL, methodID, args);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700934 jobject obj = reinterpret_cast<jobject>(result.l); // TODO: local reference
935 return obj;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700936}
937
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700938jobject CallStaticObjectMethodA(JNIEnv* env,
939 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700940 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700941 JValue result = InvokeWithJValues(ts.Self(), NULL, methodID, args);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700942 jobject obj = reinterpret_cast<jobject>(result.l); // TODO: local reference
943 return obj;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700944}
945
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700946jboolean CallStaticBooleanMethod(JNIEnv* env,
947 jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700948 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700949 va_list ap;
950 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700951 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).z;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700952}
953
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700954jboolean CallStaticBooleanMethodV(JNIEnv* env,
955 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700956 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700957 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).z;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700958}
959
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700960jboolean CallStaticBooleanMethodA(JNIEnv* env,
961 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700962 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700963 return InvokeWithJValues(ts.Self(), NULL, methodID, args).z;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700964}
965
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700966jbyte CallStaticByteMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700967 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700968 va_list ap;
969 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700970 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).b;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700971}
972
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700973jbyte CallStaticByteMethodV(JNIEnv* env,
974 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700975 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700976 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).b;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700977}
978
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700979jbyte CallStaticByteMethodA(JNIEnv* env,
980 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700981 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700982 return InvokeWithJValues(ts.Self(), NULL, methodID, args).b;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700983}
984
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700985jchar CallStaticCharMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700986 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700987 va_list ap;
988 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700989 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).c;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700990}
991
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700992jchar CallStaticCharMethodV(JNIEnv* env,
993 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700994 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700995 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).c;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700996}
997
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700998jchar CallStaticCharMethodA(JNIEnv* env,
999 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001000 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001001 return InvokeWithJValues(ts.Self(), NULL, methodID, args).c;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001002}
1003
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001004jshort CallStaticShortMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001005 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001006 va_list ap;
1007 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001008 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).s;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001009}
1010
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001011jshort CallStaticShortMethodV(JNIEnv* env,
1012 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001013 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001014 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).s;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001015}
1016
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001017jshort CallStaticShortMethodA(JNIEnv* env,
1018 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001019 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001020 return InvokeWithJValues(ts.Self(), NULL, methodID, args).s;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001021}
1022
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001023jint CallStaticIntMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001024 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001025 va_list ap;
1026 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001027 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).i;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001028}
1029
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001030jint CallStaticIntMethodV(JNIEnv* env,
1031 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001032 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001033 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).i;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001034}
1035
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001036jint CallStaticIntMethodA(JNIEnv* env,
1037 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001038 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001039 return InvokeWithJValues(ts.Self(), NULL, methodID, args).i;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001040}
1041
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001042jlong CallStaticLongMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001043 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001044 va_list ap;
1045 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001046 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).j;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001047}
1048
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001049jlong CallStaticLongMethodV(JNIEnv* env,
1050 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001051 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001052 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).j;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001053}
1054
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001055jlong CallStaticLongMethodA(JNIEnv* env,
1056 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001057 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001058 return InvokeWithJValues(ts.Self(), NULL, methodID, args).j;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001059}
1060
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001061jfloat CallStaticFloatMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001062 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001063 va_list ap;
1064 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001065 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).f;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001066}
1067
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001068jfloat CallStaticFloatMethodV(JNIEnv* env,
1069 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001070 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001071 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).f;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001072}
1073
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001074jfloat CallStaticFloatMethodA(JNIEnv* env,
1075 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001076 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001077 return InvokeWithJValues(ts.Self(), NULL, methodID, args).f;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001078}
1079
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001080jdouble CallStaticDoubleMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001081 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001082 va_list ap;
1083 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001084 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).d;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001085}
1086
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001087jdouble CallStaticDoubleMethodV(JNIEnv* env,
1088 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001089 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001090 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).d;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001091}
1092
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001093jdouble CallStaticDoubleMethodA(JNIEnv* env,
1094 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001095 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001096 return InvokeWithJValues(ts.Self(), NULL, methodID, args).d;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001097}
1098
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001099void CallStaticVoidMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001100 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001101 va_list ap;
1102 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001103 InvokeWithVarArgs(ts.Self(), NULL, methodID, ap);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001104}
1105
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001106void CallStaticVoidMethodV(JNIEnv* env,
1107 jclass cls, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001108 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001109 InvokeWithVarArgs(ts.Self(), NULL, methodID, args);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001110}
1111
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001112void CallStaticVoidMethodA(JNIEnv* env,
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001113 jclass cls, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001114 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001115 InvokeWithJValues(ts.Self(), NULL, methodID, args);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001116}
1117
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001118jfieldID GetStaticFieldID(JNIEnv* env,
1119 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001120 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001121 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001122 return 0;
1123}
1124
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001125jobject GetStaticObjectField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001126 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001127 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001128 return NULL;
1129}
1130
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001131jboolean GetStaticBooleanField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001132 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001133 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001134 return JNI_FALSE;
1135}
1136
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001137jbyte GetStaticByteField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001138 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001139 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001140 return 0;
1141}
1142
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001143jchar GetStaticCharField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001144 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001145 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001146 return 0;
1147}
1148
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001149jshort GetStaticShortField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001150 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001151 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001152 return 0;
1153}
1154
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001155jint GetStaticIntField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001156 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001157 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001158 return 0;
1159}
1160
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001161jlong GetStaticLongField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001162 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001163 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001164 return 0;
1165}
1166
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001167jfloat GetStaticFloatField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001168 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001169 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001170 return 0;
1171}
1172
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001173jdouble GetStaticDoubleField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001174 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001175 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001176 return 0;
1177}
1178
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001179void SetStaticObjectField(JNIEnv* env,
1180 jclass clazz, jfieldID fieldID, jobject value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001181 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001182 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001183}
1184
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001185void SetStaticBooleanField(JNIEnv* env,
1186 jclass clazz, jfieldID fieldID, jboolean value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001187 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001188 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001189}
1190
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001191void SetStaticByteField(JNIEnv* env,
1192 jclass clazz, jfieldID fieldID, jbyte value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001193 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001194 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001195}
1196
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001197void SetStaticCharField(JNIEnv* env,
1198 jclass clazz, jfieldID fieldID, jchar value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001199 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001200 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001201}
1202
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001203void SetStaticShortField(JNIEnv* env,
1204 jclass clazz, jfieldID fieldID, jshort value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001205 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001206 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001207}
1208
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001209void SetStaticIntField(JNIEnv* env,
1210 jclass clazz, jfieldID fieldID, jint value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001211 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001212 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001213}
1214
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001215void SetStaticLongField(JNIEnv* env,
1216 jclass clazz, jfieldID fieldID, jlong value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001217 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001218 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001219}
1220
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001221void SetStaticFloatField(JNIEnv* env,
1222 jclass clazz, jfieldID fieldID, jfloat value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001223 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001224 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001225}
1226
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001227void SetStaticDoubleField(JNIEnv* env,
1228 jclass clazz, jfieldID fieldID, jdouble value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001229 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001230 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001231}
1232
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001233jstring NewString(JNIEnv* env, const jchar* unicode, jsize len) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001234 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001235 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001236 return NULL;
1237}
1238
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001239jsize GetStringLength(JNIEnv* env, jstring str) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001240 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001241 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001242 return 0;
1243}
1244
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001245const jchar* GetStringChars(JNIEnv* env, jstring str, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001246 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001247 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001248 return NULL;
1249}
1250
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001251void ReleaseStringChars(JNIEnv* env, jstring str, const jchar* chars) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001252 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001253 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001254}
1255
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001256jstring NewStringUTF(JNIEnv* env, const char* utf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001257 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001258 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001259 return NULL;
1260}
1261
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001262jsize GetStringUTFLength(JNIEnv* env, jstring str) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001263 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001264 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001265 return 0;
1266}
1267
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001268const char* GetStringUTFChars(JNIEnv* env, jstring str, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001269 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001270 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001271 return NULL;
1272}
1273
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001274void ReleaseStringUTFChars(JNIEnv* env, jstring str, const char* chars) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001275 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001276 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001277}
1278
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001279jsize GetArrayLength(JNIEnv* env, jarray array) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001280 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001281 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001282 return 0;
1283}
1284
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001285jobjectArray NewObjectArray(JNIEnv* env,
1286 jsize len, jclass clazz, jobject init) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001287 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001288 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001289 return NULL;
1290}
1291
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001292jobject GetObjectArrayElement(JNIEnv* env, jobjectArray array, jsize index) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001293 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001294 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001295 return NULL;
1296}
1297
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001298void SetObjectArrayElement(JNIEnv* env,
1299 jobjectArray array, jsize index, jobject val) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001300 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001301 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001302}
1303
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001304template<typename JniT, typename ArtT>
1305JniT NewPrimitiveArray(ScopedJniThreadState& ts, jsize length) {
1306 CHECK_GE(length, 0); // TODO: ReportJniError
1307 ArtT* result = ArtT::Alloc(length);
1308 // TODO: local reference
1309 return reinterpret_cast<JniT>(result);
1310}
1311
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001312jbooleanArray NewBooleanArray(JNIEnv* env, jsize len) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001313 ScopedJniThreadState ts(env);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001314 return NewPrimitiveArray<jbooleanArray, BooleanArray>(ts, len);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001315}
1316
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001317jbyteArray NewByteArray(JNIEnv* env, jsize len) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001318 ScopedJniThreadState ts(env);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001319 return NewPrimitiveArray<jbyteArray, ByteArray>(ts, len);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001320}
1321
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001322jcharArray NewCharArray(JNIEnv* env, jsize len) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001323 ScopedJniThreadState ts(env);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001324 return NewPrimitiveArray<jcharArray, CharArray>(ts, len);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001325}
1326
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001327jdoubleArray NewDoubleArray(JNIEnv* env, jsize len) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001328 ScopedJniThreadState ts(env);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001329 return NewPrimitiveArray<jdoubleArray, DoubleArray>(ts, len);
1330}
1331
1332jfloatArray NewFloatArray(JNIEnv* env, jsize len) {
1333 ScopedJniThreadState ts(env);
1334 return NewPrimitiveArray<jfloatArray, FloatArray>(ts, len);
1335}
1336
1337jintArray NewIntArray(JNIEnv* env, jsize len) {
1338 ScopedJniThreadState ts(env);
1339 return NewPrimitiveArray<jintArray, IntArray>(ts, len);
1340}
1341
1342jlongArray NewLongArray(JNIEnv* env, jsize len) {
1343 ScopedJniThreadState ts(env);
1344 return NewPrimitiveArray<jlongArray, LongArray>(ts, len);
1345}
1346
1347jshortArray NewShortArray(JNIEnv* env, jsize len) {
1348 ScopedJniThreadState ts(env);
1349 return NewPrimitiveArray<jshortArray, ShortArray>(ts, len);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001350}
1351
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001352jboolean* GetBooleanArrayElements(JNIEnv* env,
1353 jbooleanArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001354 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001355 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001356 return NULL;
1357}
1358
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001359jbyte* GetByteArrayElements(JNIEnv* env, jbyteArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001360 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001361 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001362 return NULL;
1363}
1364
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001365jchar* GetCharArrayElements(JNIEnv* env, jcharArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001366 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001367 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001368 return NULL;
1369}
1370
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001371jshort* GetShortArrayElements(JNIEnv* env,
1372 jshortArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001373 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001374 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001375 return NULL;
1376}
1377
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001378jint* GetIntArrayElements(JNIEnv* env, jintArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001379 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001380 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001381 return NULL;
1382}
1383
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001384jlong* GetLongArrayElements(JNIEnv* env, jlongArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001385 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001386 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001387 return NULL;
1388}
1389
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001390jfloat* GetFloatArrayElements(JNIEnv* env,
1391 jfloatArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001392 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001393 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001394 return NULL;
1395}
1396
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001397jdouble* GetDoubleArrayElements(JNIEnv* env,
1398 jdoubleArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001399 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001400 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001401 return NULL;
1402}
1403
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001404void ReleaseBooleanArrayElements(JNIEnv* env,
1405 jbooleanArray array, jboolean* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001406 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001407 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001408}
1409
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001410void ReleaseByteArrayElements(JNIEnv* env,
1411 jbyteArray array, jbyte* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001412 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001413 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001414}
1415
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001416void ReleaseCharArrayElements(JNIEnv* env,
1417 jcharArray array, jchar* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001418 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001419 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001420}
1421
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001422void ReleaseShortArrayElements(JNIEnv* env,
1423 jshortArray array, jshort* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001424 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001425 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001426}
1427
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001428void ReleaseIntArrayElements(JNIEnv* env,
1429 jintArray array, jint* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001430 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001431 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001432}
1433
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001434void ReleaseLongArrayElements(JNIEnv* env,
1435 jlongArray array, jlong* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001436 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001437 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001438}
1439
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001440void ReleaseFloatArrayElements(JNIEnv* env,
1441 jfloatArray array, jfloat* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001442 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001443 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001444}
1445
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001446void ReleaseDoubleArrayElements(JNIEnv* env,
1447 jdoubleArray array, jdouble* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001448 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001449 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001450}
1451
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001452void GetBooleanArrayRegion(JNIEnv* env,
1453 jbooleanArray array, jsize start, jsize l, jboolean* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001454 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001455 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001456}
1457
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001458void GetByteArrayRegion(JNIEnv* env,
1459 jbyteArray array, jsize start, jsize len, jbyte* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001460 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001461 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001462}
1463
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001464void GetCharArrayRegion(JNIEnv* env,
1465 jcharArray array, jsize start, jsize len, jchar* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001466 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001467 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001468}
1469
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001470void GetShortArrayRegion(JNIEnv* env,
1471 jshortArray array, jsize start, jsize len, jshort* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001472 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001473 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001474}
1475
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001476void GetIntArrayRegion(JNIEnv* env,
1477 jintArray array, jsize start, jsize len, jint* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001478 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001479 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001480}
1481
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001482void GetLongArrayRegion(JNIEnv* env,
1483 jlongArray array, jsize start, jsize len, jlong* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001484 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001485 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001486}
1487
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001488void GetFloatArrayRegion(JNIEnv* env,
1489 jfloatArray array, jsize start, jsize len, jfloat* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001490 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001491 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001492}
1493
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001494void GetDoubleArrayRegion(JNIEnv* env,
1495 jdoubleArray array, jsize start, jsize len, jdouble* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001496 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001497 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001498}
1499
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001500void SetBooleanArrayRegion(JNIEnv* env,
1501 jbooleanArray array, jsize start, jsize l, const jboolean* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001502 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001503 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001504}
1505
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001506void SetByteArrayRegion(JNIEnv* env,
1507 jbyteArray array, jsize start, jsize len, const jbyte* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001508 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001509 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001510}
1511
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001512void SetCharArrayRegion(JNIEnv* env,
1513 jcharArray array, jsize start, jsize len, const jchar* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001514 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001515 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001516}
1517
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001518void SetShortArrayRegion(JNIEnv* env,
1519 jshortArray array, jsize start, jsize len, const jshort* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001520 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001521 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001522}
1523
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001524void SetIntArrayRegion(JNIEnv* env,
1525 jintArray array, jsize start, jsize len, const jint* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001526 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001527 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001528}
1529
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001530void SetLongArrayRegion(JNIEnv* env,
1531 jlongArray array, jsize start, jsize len, const jlong* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001532 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001533 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001534}
1535
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001536void SetFloatArrayRegion(JNIEnv* env,
1537 jfloatArray array, jsize start, jsize len, const jfloat* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001538 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001539 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001540}
1541
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001542void SetDoubleArrayRegion(JNIEnv* env,
1543 jdoubleArray array, jsize start, jsize len, const jdouble* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001544 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001545 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001546}
1547
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001548jint RegisterNatives(JNIEnv* env,
1549 jclass clazz, const JNINativeMethod* methods, jint nMethods) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001550 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001551 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001552 return 0;
1553}
1554
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001555jint UnregisterNatives(JNIEnv* env, jclass clazz) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001556 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001557 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001558 return 0;
1559}
1560
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001561jint MonitorEnter(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001562 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001563 UNIMPLEMENTED(WARNING);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001564 return 0;
1565}
1566
1567jint MonitorExit(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001568 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001569 UNIMPLEMENTED(WARNING);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001570 return 0;
1571}
1572
Elliott Hughesb20a5542011-08-12 18:03:12 -07001573jint GetJavaVM(JNIEnv* env, JavaVM** vm) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001574 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001575 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001576 return 0;
1577}
1578
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001579void GetStringRegion(JNIEnv* env,
1580 jstring str, jsize start, jsize len, jchar* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001581 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001582 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001583}
1584
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001585void GetStringUTFRegion(JNIEnv* env,
1586 jstring str, jsize start, jsize len, char* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001587 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001588 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001589}
1590
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001591void* GetPrimitiveArrayCritical(JNIEnv* env,
1592 jarray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001593 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001594 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001595 return NULL;
1596}
1597
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001598void ReleasePrimitiveArrayCritical(JNIEnv* env,
1599 jarray array, void* carray, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001600 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001601 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001602}
1603
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001604const jchar* GetStringCritical(JNIEnv* env, jstring s, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001605 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001606 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001607 return NULL;
1608}
1609
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001610void ReleaseStringCritical(JNIEnv* env, jstring s, const jchar* cstr) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001611 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001612 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001613}
1614
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001615jweak NewWeakGlobalRef(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001616 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001617 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001618 return NULL;
1619}
1620
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001621void DeleteWeakGlobalRef(JNIEnv* env, jweak obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001622 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001623 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001624}
1625
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001626jboolean ExceptionCheck(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001627 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -07001628 return ts.Self()->IsExceptionPending() ? JNI_TRUE : JNI_FALSE;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001629}
1630
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001631jobject NewDirectByteBuffer(JNIEnv* env, void* address, jlong capacity) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001632 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001633 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001634 return NULL;
1635}
1636
1637
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001638void* GetDirectBufferAddress(JNIEnv* env, jobject buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001639 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001640 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001641 return NULL;
1642}
1643
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001644jlong GetDirectBufferCapacity(JNIEnv* env, jobject buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001645 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001646 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001647 return 0;
1648}
1649
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001650jobjectRefType GetObjectRefType(JNIEnv* env, jobject jobj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001651 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001652 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001653 return JNIInvalidRefType;
1654}
1655
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001656static const struct JNINativeInterface gNativeInterface = {
Carl Shapiroea4dca82011-08-01 13:45:38 -07001657 NULL, // reserved0.
1658 NULL, // reserved1.
1659 NULL, // reserved2.
1660 NULL, // reserved3.
1661 GetVersion,
1662 DefineClass,
1663 FindClass,
1664 FromReflectedMethod,
1665 FromReflectedField,
1666 ToReflectedMethod,
1667 GetSuperclass,
1668 IsAssignableFrom,
1669 ToReflectedField,
1670 Throw,
1671 ThrowNew,
1672 ExceptionOccurred,
1673 ExceptionDescribe,
1674 ExceptionClear,
1675 FatalError,
1676 PushLocalFrame,
1677 PopLocalFrame,
1678 NewGlobalRef,
1679 DeleteGlobalRef,
1680 DeleteLocalRef,
1681 IsSameObject,
1682 NewLocalRef,
1683 EnsureLocalCapacity,
1684 AllocObject,
1685 NewObject,
1686 NewObjectV,
1687 NewObjectA,
1688 GetObjectClass,
1689 IsInstanceOf,
1690 GetMethodID,
1691 CallObjectMethod,
1692 CallObjectMethodV,
1693 CallObjectMethodA,
1694 CallBooleanMethod,
1695 CallBooleanMethodV,
1696 CallBooleanMethodA,
1697 CallByteMethod,
1698 CallByteMethodV,
1699 CallByteMethodA,
1700 CallCharMethod,
1701 CallCharMethodV,
1702 CallCharMethodA,
1703 CallShortMethod,
1704 CallShortMethodV,
1705 CallShortMethodA,
1706 CallIntMethod,
1707 CallIntMethodV,
1708 CallIntMethodA,
1709 CallLongMethod,
1710 CallLongMethodV,
1711 CallLongMethodA,
1712 CallFloatMethod,
1713 CallFloatMethodV,
1714 CallFloatMethodA,
1715 CallDoubleMethod,
1716 CallDoubleMethodV,
1717 CallDoubleMethodA,
1718 CallVoidMethod,
1719 CallVoidMethodV,
1720 CallVoidMethodA,
1721 CallNonvirtualObjectMethod,
1722 CallNonvirtualObjectMethodV,
1723 CallNonvirtualObjectMethodA,
1724 CallNonvirtualBooleanMethod,
1725 CallNonvirtualBooleanMethodV,
1726 CallNonvirtualBooleanMethodA,
1727 CallNonvirtualByteMethod,
1728 CallNonvirtualByteMethodV,
1729 CallNonvirtualByteMethodA,
1730 CallNonvirtualCharMethod,
1731 CallNonvirtualCharMethodV,
1732 CallNonvirtualCharMethodA,
1733 CallNonvirtualShortMethod,
1734 CallNonvirtualShortMethodV,
1735 CallNonvirtualShortMethodA,
1736 CallNonvirtualIntMethod,
1737 CallNonvirtualIntMethodV,
1738 CallNonvirtualIntMethodA,
1739 CallNonvirtualLongMethod,
1740 CallNonvirtualLongMethodV,
1741 CallNonvirtualLongMethodA,
1742 CallNonvirtualFloatMethod,
1743 CallNonvirtualFloatMethodV,
1744 CallNonvirtualFloatMethodA,
1745 CallNonvirtualDoubleMethod,
1746 CallNonvirtualDoubleMethodV,
1747 CallNonvirtualDoubleMethodA,
1748 CallNonvirtualVoidMethod,
1749 CallNonvirtualVoidMethodV,
1750 CallNonvirtualVoidMethodA,
1751 GetFieldID,
1752 GetObjectField,
1753 GetBooleanField,
1754 GetByteField,
1755 GetCharField,
1756 GetShortField,
1757 GetIntField,
1758 GetLongField,
1759 GetFloatField,
1760 GetDoubleField,
1761 SetObjectField,
1762 SetBooleanField,
1763 SetByteField,
1764 SetCharField,
1765 SetShortField,
1766 SetIntField,
1767 SetLongField,
1768 SetFloatField,
1769 SetDoubleField,
1770 GetStaticMethodID,
1771 CallStaticObjectMethod,
1772 CallStaticObjectMethodV,
1773 CallStaticObjectMethodA,
1774 CallStaticBooleanMethod,
1775 CallStaticBooleanMethodV,
1776 CallStaticBooleanMethodA,
1777 CallStaticByteMethod,
1778 CallStaticByteMethodV,
1779 CallStaticByteMethodA,
1780 CallStaticCharMethod,
1781 CallStaticCharMethodV,
1782 CallStaticCharMethodA,
1783 CallStaticShortMethod,
1784 CallStaticShortMethodV,
1785 CallStaticShortMethodA,
1786 CallStaticIntMethod,
1787 CallStaticIntMethodV,
1788 CallStaticIntMethodA,
1789 CallStaticLongMethod,
1790 CallStaticLongMethodV,
1791 CallStaticLongMethodA,
1792 CallStaticFloatMethod,
1793 CallStaticFloatMethodV,
1794 CallStaticFloatMethodA,
1795 CallStaticDoubleMethod,
1796 CallStaticDoubleMethodV,
1797 CallStaticDoubleMethodA,
1798 CallStaticVoidMethod,
1799 CallStaticVoidMethodV,
1800 CallStaticVoidMethodA,
1801 GetStaticFieldID,
1802 GetStaticObjectField,
1803 GetStaticBooleanField,
1804 GetStaticByteField,
1805 GetStaticCharField,
1806 GetStaticShortField,
1807 GetStaticIntField,
1808 GetStaticLongField,
1809 GetStaticFloatField,
1810 GetStaticDoubleField,
1811 SetStaticObjectField,
1812 SetStaticBooleanField,
1813 SetStaticByteField,
1814 SetStaticCharField,
1815 SetStaticShortField,
1816 SetStaticIntField,
1817 SetStaticLongField,
1818 SetStaticFloatField,
1819 SetStaticDoubleField,
1820 NewString,
1821 GetStringLength,
1822 GetStringChars,
1823 ReleaseStringChars,
1824 NewStringUTF,
1825 GetStringUTFLength,
1826 GetStringUTFChars,
1827 ReleaseStringUTFChars,
1828 GetArrayLength,
1829 NewObjectArray,
1830 GetObjectArrayElement,
1831 SetObjectArrayElement,
1832 NewBooleanArray,
1833 NewByteArray,
1834 NewCharArray,
1835 NewShortArray,
1836 NewIntArray,
1837 NewLongArray,
1838 NewFloatArray,
1839 NewDoubleArray,
1840 GetBooleanArrayElements,
1841 GetByteArrayElements,
1842 GetCharArrayElements,
1843 GetShortArrayElements,
1844 GetIntArrayElements,
1845 GetLongArrayElements,
1846 GetFloatArrayElements,
1847 GetDoubleArrayElements,
1848 ReleaseBooleanArrayElements,
1849 ReleaseByteArrayElements,
1850 ReleaseCharArrayElements,
1851 ReleaseShortArrayElements,
1852 ReleaseIntArrayElements,
1853 ReleaseLongArrayElements,
1854 ReleaseFloatArrayElements,
1855 ReleaseDoubleArrayElements,
1856 GetBooleanArrayRegion,
1857 GetByteArrayRegion,
1858 GetCharArrayRegion,
1859 GetShortArrayRegion,
1860 GetIntArrayRegion,
1861 GetLongArrayRegion,
1862 GetFloatArrayRegion,
1863 GetDoubleArrayRegion,
1864 SetBooleanArrayRegion,
1865 SetByteArrayRegion,
1866 SetCharArrayRegion,
1867 SetShortArrayRegion,
1868 SetIntArrayRegion,
1869 SetLongArrayRegion,
1870 SetFloatArrayRegion,
1871 SetDoubleArrayRegion,
1872 RegisterNatives,
1873 UnregisterNatives,
1874 MonitorEnter,
1875 MonitorExit,
1876 GetJavaVM,
1877 GetStringRegion,
1878 GetStringUTFRegion,
1879 GetPrimitiveArrayCritical,
1880 ReleasePrimitiveArrayCritical,
1881 GetStringCritical,
1882 ReleaseStringCritical,
1883 NewWeakGlobalRef,
1884 DeleteWeakGlobalRef,
1885 ExceptionCheck,
1886 NewDirectByteBuffer,
1887 GetDirectBufferAddress,
1888 GetDirectBufferCapacity,
1889 GetObjectRefType,
1890};
1891
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001892void MonitorEnterHelper(JNIEnv* env, jobject obj) {
Brian Carlstromdb4d5402011-08-09 12:18:28 -07001893 env = Thread::Current()->GetJniEnv(); // XXX bdc do not commit workaround
Elliott Hughes330304d2011-08-12 14:28:05 -07001894 CHECK_EQ(Thread::Current()->GetJniEnv(), env);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001895 MonitorEnter(env, obj); // Ignore the result.
1896}
1897
1898void MonitorExitHelper(JNIEnv* env, jobject obj) {
Elliott Hughes330304d2011-08-12 14:28:05 -07001899 CHECK_EQ(Thread::Current()->GetJniEnv(), env);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001900 MonitorExit(env, obj); // Ignore the result.
1901}
1902
1903JNIEnv* CreateJNIEnv() {
Elliott Hughes330304d2011-08-12 14:28:05 -07001904 Thread* self = Thread::Current();
1905 CHECK(self != NULL);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001906 JNIEnvExt* result = (JNIEnvExt*) calloc(1, sizeof(JNIEnvExt));
1907 result->fns = &gNativeInterface;
Elliott Hughes330304d2011-08-12 14:28:05 -07001908 result->self = self;
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001909 result->MonitorEnterHelper = &MonitorEnterHelper;
1910 result->MonitorExitHelper = &MonitorExitHelper;
1911 return reinterpret_cast<JNIEnv*>(result);
1912}
1913
Carl Shapiroea4dca82011-08-01 13:45:38 -07001914// JNI Invocation interface.
1915
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001916extern "C" jint JNI_CreateJavaVM(JavaVM** p_vm, void** p_env, void* vm_args) {
1917 const JavaVMInitArgs* args = static_cast<JavaVMInitArgs*>(vm_args);
1918 if (args->version < JNI_VERSION_1_2) {
1919 return JNI_EVERSION;
1920 }
1921 Runtime::Options options;
1922 for (int i = 0; i < args->nOptions; ++i) {
1923 JavaVMOption* option = &args->options[i];
Carl Shapirofc322c72011-07-27 00:20:01 -07001924 options.push_back(std::make_pair(StringPiece(option->optionString),
1925 option->extraInfo));
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001926 }
1927 bool ignore_unrecognized = args->ignoreUnrecognized;
1928 scoped_ptr<Runtime> runtime(Runtime::Create(options, ignore_unrecognized));
1929 if (runtime == NULL) {
1930 return JNI_ERR;
1931 } else {
1932 *p_env = reinterpret_cast<JNIEnv*>(Thread::Current()->GetJniEnv());
1933 *p_vm = reinterpret_cast<JavaVM*>(runtime.release());
1934 return JNI_OK;
1935 }
1936}
1937
1938extern "C" jint JNI_GetCreatedJavaVMs(JavaVM** vmBuf, jsize bufLen,
1939 jsize* nVMs) {
1940 Runtime* runtime = Runtime::Current();
1941 if (runtime == NULL) {
1942 *nVMs = 0;
1943 } else {
1944 *nVMs = 1;
1945 vmBuf[0] = reinterpret_cast<JavaVM*>(runtime);
1946 }
1947 return JNI_OK;
1948}
1949
1950// Historically unsupported.
1951extern "C" jint JNI_GetDefaultJavaVMInitArgs(void* vm_args) {
1952 return JNI_ERR;
1953}
1954
Carl Shapiroea4dca82011-08-01 13:45:38 -07001955jint JniInvokeInterface::DestroyJavaVM(JavaVM* vm) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001956 if (vm == NULL) {
1957 return JNI_ERR;
1958 } else {
1959 Runtime* runtime = reinterpret_cast<Runtime*>(vm);
1960 delete runtime;
1961 return JNI_OK;
1962 }
1963}
1964
Carl Shapiroea4dca82011-08-01 13:45:38 -07001965jint JniInvokeInterface::AttachCurrentThread(JavaVM* vm,
1966 JNIEnv** p_env,
1967 void* thr_args) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001968 if (vm == NULL || p_env == NULL) {
1969 return JNI_ERR;
1970 }
1971 Runtime* runtime = reinterpret_cast<Runtime*>(vm);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001972 const char* name = NULL;
1973 if (thr_args != NULL) {
1974 // TODO: check version
1975 name = static_cast<JavaVMAttachArgs*>(thr_args)->name;
1976 // TODO: thread group
1977 }
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001978 bool success = runtime->AttachCurrentThread(name, p_env);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001979 if (!success) {
1980 return JNI_ERR;
1981 } else {
1982 return JNI_OK;
1983 }
1984}
1985
Carl Shapiroea4dca82011-08-01 13:45:38 -07001986jint JniInvokeInterface::DetachCurrentThread(JavaVM* vm) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001987 if (vm == NULL) {
1988 return JNI_ERR;
1989 } else {
1990 Runtime* runtime = reinterpret_cast<Runtime*>(vm);
1991 runtime->DetachCurrentThread();
1992 return JNI_OK;
1993 }
1994}
1995
Elliott Hughesb20a5542011-08-12 18:03:12 -07001996jint JniInvokeInterface::GetEnv(JavaVM* vm, void** env, jint version) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001997 if (version < JNI_VERSION_1_1 || version > JNI_VERSION_1_6) {
1998 return JNI_EVERSION;
1999 }
2000 if (vm == NULL || env == NULL) {
2001 return JNI_ERR;
2002 }
2003 Thread* thread = Thread::Current();
2004 if (thread == NULL) {
2005 *env = NULL;
2006 return JNI_EDETACHED;
2007 }
2008 *env = thread->GetJniEnv();
2009 return JNI_OK;
2010}
2011
Carl Shapiroea4dca82011-08-01 13:45:38 -07002012jint JniInvokeInterface::AttachCurrentThreadAsDaemon(JavaVM* vm,
2013 JNIEnv** p_env,
2014 void* thr_args) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002015 if (vm == NULL || p_env == NULL) {
2016 return JNI_ERR;
2017 }
2018 Runtime* runtime = reinterpret_cast<Runtime*>(vm);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002019 const char* name = NULL;
2020 if (thr_args != NULL) {
2021 // TODO: check version
2022 name = static_cast<JavaVMAttachArgs*>(thr_args)->name;
2023 // TODO: thread group
2024 }
Elliott Hughes40ef99e2011-08-11 17:44:34 -07002025 bool success = runtime->AttachCurrentThreadAsDaemon(name, p_env);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002026 if (!success) {
2027 return JNI_ERR;
2028 } else {
2029 return JNI_OK;
2030 }
2031}
2032
Carl Shapiroea4dca82011-08-01 13:45:38 -07002033struct JNIInvokeInterface JniInvokeInterface::invoke_interface_ = {
2034 NULL, // reserved0
2035 NULL, // reserved1
2036 NULL, // reserved2
2037 DestroyJavaVM,
2038 AttachCurrentThread,
2039 DetachCurrentThread,
2040 GetEnv,
2041 AttachCurrentThreadAsDaemon
2042};
2043
Ian Rogersdf20fe02011-07-20 20:34:16 -07002044} // namespace art