blob: 81e2fdd1d4e997b341068258a94a797c9560da9c [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
Elliott Hughes8a26c5c2011-08-15 18:35:43 -070059template<typename T>
60T AddLocalReference(ScopedJniThreadState& ts, Object* obj) {
61 UNIMPLEMENTED(WARNING);
62 return reinterpret_cast<T>(obj);
63}
64
Carl Shapiro9b9ba282011-08-14 15:30:39 -070065void CreateInvokeStub(Assembler* assembler, Method* method);
66
67bool EnsureInvokeStub(Method* method) {
68 if (method->GetInvokeStub() != NULL) {
69 return true;
70 }
71 // TODO: use signature to find a matching stub
72 // TODO: failed, acquire a lock on the stub table
73 Assembler assembler;
74 CreateInvokeStub(&assembler, method);
75 // TODO: store native_entry in the stub table
76 int prot = PROT_READ | PROT_WRITE | PROT_EXEC;
77 size_t length = assembler.CodeSize();
78 void* addr = mmap(NULL, length, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
79 if (addr == MAP_FAILED) {
80 PLOG(FATAL) << "mmap failed";
81 }
82 MemoryRegion region(addr, length);
83 assembler.FinalizeInstructions(region);
84 method->SetInvokeStub(reinterpret_cast<Method::InvokeStub*>(region.pointer()));
85 return true;
86}
87
Elliott Hughesd8ddfd52011-08-15 14:32:53 -070088byte* CreateArgArray(Method* method, va_list ap) {
Carl Shapiro9b9ba282011-08-14 15:30:39 -070089 size_t num_bytes = method->NumArgArrayBytes();
90 scoped_array<byte> arg_array(new byte[num_bytes]);
91 const StringPiece& shorty = method->GetShorty();
92 for (int i = 1, offset = 0; i < shorty.size() - 1; ++i) {
93 switch (shorty[i]) {
94 case 'Z':
95 case 'B':
96 case 'C':
97 case 'S':
98 case 'I':
99 *reinterpret_cast<int32_t*>(&arg_array[offset]) = va_arg(ap, jint);
100 offset += 4;
101 break;
102 case 'F':
103 *reinterpret_cast<float*>(&arg_array[offset]) = va_arg(ap, jdouble);
104 offset += 4;
105 break;
106 case 'L': {
Elliott Hughesf2682d52011-08-15 16:37:04 -0700107 // TODO: DecodeReference
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700108 Object* obj = reinterpret_cast<Object*>(va_arg(ap, jobject));
109 *reinterpret_cast<Object**>(&arg_array[offset]) = obj;
110 offset += sizeof(Object*);
111 break;
112 }
113 case 'D':
114 *reinterpret_cast<double*>(&arg_array[offset]) = va_arg(ap, jdouble);
115 offset += 8;
116 break;
117 case 'J':
118 *reinterpret_cast<int64_t*>(&arg_array[offset]) = va_arg(ap, jlong);
119 offset += 8;
120 break;
121 }
122 }
123 return arg_array.release();
124}
125
Elliott Hughesd8ddfd52011-08-15 14:32:53 -0700126byte* CreateArgArray(Method* method, jvalue* args) {
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700127 size_t num_bytes = method->NumArgArrayBytes();
128 scoped_array<byte> arg_array(new byte[num_bytes]);
129 const StringPiece& shorty = method->GetShorty();
130 for (int i = 1, offset = 0; i < shorty.size() - 1; ++i) {
131 switch (shorty[i]) {
132 case 'Z':
133 case 'B':
134 case 'C':
135 case 'S':
136 case 'I':
137 *reinterpret_cast<uint32_t*>(&arg_array[offset]) = args[i - 1].i;
138 offset += 4;
139 break;
140 case 'F':
141 *reinterpret_cast<float*>(&arg_array[offset]) = args[i - 1].f;
142 offset += 4;
143 break;
144 case 'L': {
Elliott Hughesf2682d52011-08-15 16:37:04 -0700145 // TODO: DecodeReference
146 Object* obj = reinterpret_cast<Object*>(args[i - 1].l);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700147 *reinterpret_cast<Object**>(&arg_array[offset]) = obj;
148 offset += sizeof(Object*);
149 break;
150 }
151 case 'D':
152 *reinterpret_cast<double*>(&arg_array[offset]) = args[i - 1].d;
153 offset += 8;
154 break;
155 case 'J':
156 *reinterpret_cast<uint64_t*>(&arg_array[offset]) = args[i - 1].j;
157 offset += 8;
158 break;
159 }
160 }
161 return arg_array.release();
162}
163
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700164JValue InvokeWithArgArray(Thread* self, Object* obj, jmethodID method_id,
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700165 byte* args) {
Elliott Hughesf2682d52011-08-15 16:37:04 -0700166 // TODO: DecodeReference
167 Method* method = reinterpret_cast<Method*>(method_id);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700168 // Call the invoke stub associated with the method
169 // Pass everything as arguments
170 const Method::InvokeStub* stub = method->GetInvokeStub();
171 CHECK(stub != NULL);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700172 JValue result;
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700173 (*stub)(method, obj, self, args, &result);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700174 return result;
175}
176
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700177JValue InvokeWithJValues(Thread* self, Object* obj, jmethodID method_id,
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700178 jvalue* args) {
179 Method* method = reinterpret_cast<Method*>(method_id);
180 scoped_array<byte> arg_array(CreateArgArray(method, args));
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700181 return InvokeWithArgArray(self, obj, method_id, arg_array.get());
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700182}
183
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700184JValue InvokeWithVarArgs(Thread* self, Object* obj, jmethodID method_id,
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700185 va_list args) {
186 Method* method = reinterpret_cast<Method*>(method_id);
187 scoped_array<byte> arg_array(CreateArgArray(method, args));
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700188 return InvokeWithArgArray(self, obj, method_id, arg_array.get());
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700189}
190
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700191jint GetVersion(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700192 ScopedJniThreadState ts(env);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700193 return JNI_VERSION_1_6;
194}
195
Elliott Hughesb20a5542011-08-12 18:03:12 -0700196jclass DefineClass(JNIEnv* env, const char*, jobject, const jbyte*, jsize) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700197 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -0700198 LOG(WARNING) << "JNI DefineClass is not supported";
Carl Shapiroea4dca82011-08-01 13:45:38 -0700199 return NULL;
200}
201
Elliott Hughes6b436852011-08-12 10:16:44 -0700202// Section 12.3.2 of the JNI spec describes JNI class descriptors. They're
203// separated with slashes but aren't wrapped with "L;" like regular descriptors
204// (i.e. "a/b/C" rather than "La/b/C;"). Arrays of reference types are an
205// exception; there the "L;" must be present ("[La/b/C;"). Historically we've
206// supported names with dots too (such as "a.b.C").
207std::string NormalizeJniClassDescriptor(const char* name) {
208 std::string result;
209 // Add the missing "L;" if necessary.
210 if (name[0] == '[') {
211 result = name;
212 } else {
213 result += 'L';
214 result += name;
215 result += ';';
216 }
217 // Rewrite '.' as '/' for backwards compatibility.
218 for (size_t i = 0; i < result.size(); ++i) {
219 if (result[i] == '.') {
220 result[i] = '/';
221 }
222 }
223 return result;
224}
225
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700226jclass FindClass(JNIEnv* env, const char* name) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700227 ScopedJniThreadState ts(env);
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700228 ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
Elliott Hughes6b436852011-08-12 10:16:44 -0700229 std::string descriptor(NormalizeJniClassDescriptor(name));
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700230 // TODO: need to get the appropriate ClassLoader.
Elliott Hughes6b436852011-08-12 10:16:44 -0700231 Class* c = class_linker->FindClass(descriptor, NULL);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -0700232 return AddLocalReference<jclass>(ts, c);
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700233}
234
235jmethodID FromReflectedMethod(JNIEnv* env, jobject method) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700236 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700237 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700238 return NULL;
239}
240
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700241jfieldID FromReflectedField(JNIEnv* env, jobject field) {
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 -0700247jobject ToReflectedMethod(JNIEnv* env, jclass cls,
248 jmethodID methodID, jboolean isStatic) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700249 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700250 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700251 return NULL;
252}
253
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700254jclass GetSuperclass(JNIEnv* env, jclass sub) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700255 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700256 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700257 return NULL;
258}
259
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700260jboolean IsAssignableFrom(JNIEnv* env, jclass sub, jclass sup) {
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 JNI_FALSE;
264}
265
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700266jobject ToReflectedField(JNIEnv* env, jclass cls,
267 jfieldID fieldID, jboolean isStatic) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700268 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700269 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700270 return NULL;
271}
272
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700273jint Throw(JNIEnv* env, jthrowable obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700274 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700275 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700276 return 0;
277}
278
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700279jint ThrowNew(JNIEnv* env, jclass clazz, const char* msg) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700280 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700281 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700282 return 0;
283}
284
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700285jthrowable ExceptionOccurred(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700286 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700287 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700288 return NULL;
289}
290
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700291void ExceptionDescribe(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700292 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700293 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700294}
295
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700296void ExceptionClear(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700297 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -0700298 ts.Self()->ClearException();
Carl Shapiroea4dca82011-08-01 13:45:38 -0700299}
300
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700301void FatalError(JNIEnv* env, const char* msg) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700302 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -0700303 LOG(FATAL) << "JNI FatalError called: " << msg;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700304}
305
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700306jint PushLocalFrame(JNIEnv* env, jint cap) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700307 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700308 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700309 return 0;
310}
311
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700312jobject PopLocalFrame(JNIEnv* env, jobject res) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700313 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700314 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700315 return NULL;
316}
317
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700318jobject NewGlobalRef(JNIEnv* env, jobject lobj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700319 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700320 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700321 return NULL;
322}
323
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700324void DeleteGlobalRef(JNIEnv* env, jobject gref) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700325 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700326 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700327}
328
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700329void DeleteLocalRef(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700330 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -0700331 UNIMPLEMENTED(WARNING);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700332}
333
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700334jboolean IsSameObject(JNIEnv* env, jobject obj1, jobject obj2) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700335 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700336 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700337 return JNI_FALSE;
338}
339
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700340jobject NewLocalRef(JNIEnv* env, jobject ref) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700341 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700342 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700343 return NULL;
344}
345
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700346jint EnsureLocalCapacity(JNIEnv* env, jint) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700347 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700348 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700349 return 0;
350}
351
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700352jobject AllocObject(JNIEnv* env, jclass clazz) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700353 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700354 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700355 return NULL;
356}
357
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700358jobject NewObject(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
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 NewObjectV(JNIEnv* env,
365 jclass clazz, jmethodID methodID, va_list 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 -0700371jobject NewObjectA(JNIEnv* env,
372 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700373 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700374 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700375 return NULL;
376}
377
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700378jclass GetObjectClass(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700379 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700380 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700381 return NULL;
382}
383
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700384jboolean IsInstanceOf(JNIEnv* env, jobject obj, jclass clazz) {
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 JNI_FALSE;
388}
389
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700390jmethodID GetMethodID(JNIEnv* env,
391 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700392 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700393 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700394 return NULL;
395}
396
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700397jobject CallObjectMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
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 CallObjectMethodV(JNIEnv* env,
404 jobject obj, jmethodID methodID, va_list 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 -0700410jobject CallObjectMethodA(JNIEnv* env,
411 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700412 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700413 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700414 return NULL;
415}
416
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700417jboolean CallBooleanMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
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 CallBooleanMethodV(JNIEnv* env,
424 jobject obj, jmethodID methodID, va_list 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 -0700430jboolean CallBooleanMethodA(JNIEnv* env,
431 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700432 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700433 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700434 return JNI_FALSE;
435}
436
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700437jbyte CallByteMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
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 CallByteMethodV(JNIEnv* env,
444 jobject obj, jmethodID methodID, va_list 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 -0700450jbyte CallByteMethodA(JNIEnv* env,
451 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700452 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700453 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700454 return 0;
455}
456
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700457jchar CallCharMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
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 CallCharMethodV(JNIEnv* env,
464 jobject obj, jmethodID methodID, va_list 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 -0700470jchar CallCharMethodA(JNIEnv* env,
471 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700472 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700473 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700474 return 0;
475}
476
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700477jshort CallShortMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
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 CallShortMethodV(JNIEnv* env,
484 jobject obj, jmethodID methodID, va_list 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 -0700490jshort CallShortMethodA(JNIEnv* env,
491 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700492 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700493 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700494 return 0;
495}
496
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700497jint CallIntMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
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 CallIntMethodV(JNIEnv* env,
504 jobject obj, jmethodID methodID, va_list 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 -0700510jint CallIntMethodA(JNIEnv* env,
511 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700512 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700513 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700514 return 0;
515}
516
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700517jlong CallLongMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
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 CallLongMethodV(JNIEnv* env,
524 jobject obj, jmethodID methodID, va_list 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 -0700530jlong CallLongMethodA(JNIEnv* env,
531 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700532 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700533 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700534 return 0;
535}
536
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700537jfloat CallFloatMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
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 CallFloatMethodV(JNIEnv* env,
544 jobject obj, jmethodID methodID, va_list 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 -0700550jfloat CallFloatMethodA(JNIEnv* env,
551 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700552 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700553 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700554 return 0;
555}
556
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700557jdouble CallDoubleMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
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 CallDoubleMethodV(JNIEnv* env,
564 jobject obj, jmethodID methodID, va_list 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 -0700570jdouble CallDoubleMethodA(JNIEnv* env,
571 jobject obj, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700572 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700573 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700574 return 0;
575}
576
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700577void CallVoidMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700578 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700579 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700580}
581
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700582void CallVoidMethodV(JNIEnv* env, jobject obj,
583 jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700584 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700585 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700586}
587
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700588void CallVoidMethodA(JNIEnv* env, jobject obj,
589 jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700590 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700591 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700592}
593
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700594jobject CallNonvirtualObjectMethod(JNIEnv* env,
595 jobject obj, jclass clazz, jmethodID methodID, ...) {
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 CallNonvirtualObjectMethodV(JNIEnv* env,
602 jobject obj, jclass clazz, jmethodID methodID, va_list 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 -0700608jobject CallNonvirtualObjectMethodA(JNIEnv* env,
609 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
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 NULL;
613}
614
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700615jboolean CallNonvirtualBooleanMethod(JNIEnv* env,
616 jobject obj, jclass clazz, jmethodID methodID, ...) {
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 CallNonvirtualBooleanMethodV(JNIEnv* env,
623 jobject obj, jclass clazz, jmethodID methodID, va_list 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 -0700629jboolean CallNonvirtualBooleanMethodA(JNIEnv* env,
630 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
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 JNI_FALSE;
634}
635
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700636jbyte CallNonvirtualByteMethod(JNIEnv* env,
637 jobject obj, jclass clazz, jmethodID methodID, ...) {
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 CallNonvirtualByteMethodV(JNIEnv* env,
644 jobject obj, jclass clazz, jmethodID methodID, va_list 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 -0700650jbyte CallNonvirtualByteMethodA(JNIEnv* env,
651 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
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 CallNonvirtualCharMethod(JNIEnv* env,
658 jobject obj, jclass clazz, jmethodID methodID, ...) {
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 CallNonvirtualCharMethodV(JNIEnv* env,
665 jobject obj, jclass clazz, jmethodID methodID, va_list 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 -0700671jchar CallNonvirtualCharMethodA(JNIEnv* env,
672 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
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 CallNonvirtualShortMethod(JNIEnv* env,
679 jobject obj, jclass clazz, jmethodID methodID, ...) {
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 CallNonvirtualShortMethodV(JNIEnv* env,
686 jobject obj, jclass clazz, jmethodID methodID, va_list 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 -0700692jshort CallNonvirtualShortMethodA(JNIEnv* env,
693 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
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 CallNonvirtualIntMethod(JNIEnv* env,
700 jobject obj, jclass clazz, jmethodID methodID, ...) {
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 CallNonvirtualIntMethodV(JNIEnv* env,
707 jobject obj, jclass clazz, jmethodID methodID, va_list 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 -0700713jint CallNonvirtualIntMethodA(JNIEnv* env,
714 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
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 CallNonvirtualLongMethod(JNIEnv* env,
721 jobject obj, jclass clazz, jmethodID methodID, ...) {
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 CallNonvirtualLongMethodV(JNIEnv* env,
728 jobject obj, jclass clazz, jmethodID methodID, va_list 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 -0700734jlong CallNonvirtualLongMethodA(JNIEnv* env,
735 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
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 CallNonvirtualFloatMethod(JNIEnv* env,
742 jobject obj, jclass clazz, jmethodID methodID, ...) {
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 CallNonvirtualFloatMethodV(JNIEnv* env,
749 jobject obj, jclass clazz, jmethodID methodID, va_list 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 -0700755jfloat CallNonvirtualFloatMethodA(JNIEnv* env,
756 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
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 CallNonvirtualDoubleMethod(JNIEnv* env,
763 jobject obj, jclass clazz, jmethodID methodID, ...) {
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 CallNonvirtualDoubleMethodV(JNIEnv* env,
770 jobject obj, jclass clazz, jmethodID methodID, va_list 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 -0700776jdouble CallNonvirtualDoubleMethodA(JNIEnv* env,
777 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
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 return 0;
781}
782
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700783void CallNonvirtualVoidMethod(JNIEnv* env,
784 jobject obj, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700785 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700786 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700787}
788
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700789void CallNonvirtualVoidMethodV(JNIEnv* env,
790 jobject obj, jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700791 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700792 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700793}
794
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700795void CallNonvirtualVoidMethodA(JNIEnv* env,
796 jobject obj, jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700797 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700798 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700799}
800
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700801jfieldID GetFieldID(JNIEnv* env,
802 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700803 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700804 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700805 return NULL;
806}
807
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700808jobject GetObjectField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700809 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700810 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700811 return NULL;
812}
813
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700814jboolean GetBooleanField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700815 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700816 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700817 return JNI_FALSE;
818}
819
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700820jbyte GetByteField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700821 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700822 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700823 return 0;
824}
825
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700826jchar GetCharField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700827 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700828 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700829 return 0;
830}
831
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700832jshort GetShortField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700833 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700834 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700835 return 0;
836}
837
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700838jint GetIntField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700839 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700840 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700841 return 0;
842}
843
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700844jlong GetLongField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700845 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700846 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700847 return 0;
848}
849
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700850jfloat GetFloatField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700851 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700852 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700853 return 0;
854}
855
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700856jdouble GetDoubleField(JNIEnv* env, jobject obj, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700857 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700858 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700859 return 0;
860}
861
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700862void SetObjectField(JNIEnv* env, jobject obj, jfieldID fieldID, jobject val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700863 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700864 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700865}
866
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700867void SetBooleanField(JNIEnv* env, jobject obj, jfieldID fieldID, jboolean val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700868 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700869 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700870}
871
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700872void SetByteField(JNIEnv* env, jobject obj, jfieldID fieldID, jbyte val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700873 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700874 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700875}
876
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700877void SetCharField(JNIEnv* env, jobject obj, jfieldID fieldID, jchar val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700878 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700879 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700880}
881
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700882void SetShortField(JNIEnv* env, jobject obj, jfieldID fieldID, jshort val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700883 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700884 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700885}
886
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700887void SetIntField(JNIEnv* env, jobject obj, jfieldID fieldID, jint val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700888 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700889 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700890}
891
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700892void SetLongField(JNIEnv* env, jobject obj, jfieldID fieldID, jlong val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700893 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700894 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700895}
896
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700897void SetFloatField(JNIEnv* env, jobject obj, jfieldID fieldID, jfloat val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700898 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700899 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700900}
901
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700902void SetDoubleField(JNIEnv* env, jobject obj, jfieldID fieldID, jdouble val) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700903 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -0700904 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700905}
906
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700907jmethodID GetStaticMethodID(JNIEnv* env,
908 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700909 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -0700910 // TODO: DecodeReference
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700911 Class* klass = reinterpret_cast<Class*>(clazz);
912 // TODO: check that klass is initialized
913 Method* method = klass->FindDirectMethod(name, sig);
914 if (method == NULL || !method->IsStatic()) {
915 // TODO: throw NoSuchMethodError
916 return NULL;
917 }
918 // TODO: create a JNI weak global reference for method
919 bool success = EnsureInvokeStub(method);
920 if (!success) {
921 // TODO: throw OutOfMemoryException
922 return NULL;
923 }
924 return reinterpret_cast<jmethodID>(method);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700925}
926
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700927jobject CallStaticObjectMethod(JNIEnv* env,
928 jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700929 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700930 va_list ap;
931 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700932 JValue result = InvokeWithVarArgs(ts.Self(), NULL, methodID, ap);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -0700933 return AddLocalReference<jobject>(ts, result.l);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700934}
935
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700936jobject CallStaticObjectMethodV(JNIEnv* env,
937 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700938 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700939 JValue result = InvokeWithVarArgs(ts.Self(), NULL, methodID, args);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -0700940 return AddLocalReference<jobject>(ts, result.l);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700941}
942
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700943jobject CallStaticObjectMethodA(JNIEnv* env,
944 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700945 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700946 JValue result = InvokeWithJValues(ts.Self(), NULL, methodID, args);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -0700947 return AddLocalReference<jobject>(ts, result.l);
Carl Shapiroea4dca82011-08-01 13:45:38 -0700948}
949
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700950jboolean CallStaticBooleanMethod(JNIEnv* env,
951 jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700952 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700953 va_list ap;
954 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700955 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).z;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700956}
957
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700958jboolean CallStaticBooleanMethodV(JNIEnv* env,
959 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700960 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700961 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).z;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700962}
963
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700964jboolean CallStaticBooleanMethodA(JNIEnv* env,
965 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700966 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700967 return InvokeWithJValues(ts.Self(), NULL, methodID, args).z;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700968}
969
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700970jbyte CallStaticByteMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700971 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700972 va_list ap;
973 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700974 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).b;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700975}
976
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700977jbyte CallStaticByteMethodV(JNIEnv* env,
978 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700979 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700980 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).b;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700981}
982
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700983jbyte CallStaticByteMethodA(JNIEnv* env,
984 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700985 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700986 return InvokeWithJValues(ts.Self(), NULL, methodID, args).b;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700987}
988
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700989jchar CallStaticCharMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700990 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -0700991 va_list ap;
992 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700993 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).c;
Carl Shapiroea4dca82011-08-01 13:45:38 -0700994}
995
Elliott Hughes40ef99e2011-08-11 17:44:34 -0700996jchar CallStaticCharMethodV(JNIEnv* env,
997 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -0700998 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -0700999 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).c;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001000}
1001
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001002jchar CallStaticCharMethodA(JNIEnv* env,
1003 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001004 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001005 return InvokeWithJValues(ts.Self(), NULL, methodID, args).c;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001006}
1007
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001008jshort CallStaticShortMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001009 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001010 va_list ap;
1011 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001012 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).s;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001013}
1014
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001015jshort CallStaticShortMethodV(JNIEnv* env,
1016 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001017 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001018 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).s;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001019}
1020
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001021jshort CallStaticShortMethodA(JNIEnv* env,
1022 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001023 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001024 return InvokeWithJValues(ts.Self(), NULL, methodID, args).s;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001025}
1026
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001027jint CallStaticIntMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001028 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001029 va_list ap;
1030 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001031 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).i;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001032}
1033
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001034jint CallStaticIntMethodV(JNIEnv* env,
1035 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001036 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001037 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).i;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001038}
1039
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001040jint CallStaticIntMethodA(JNIEnv* env,
1041 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001042 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001043 return InvokeWithJValues(ts.Self(), NULL, methodID, args).i;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001044}
1045
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001046jlong CallStaticLongMethod(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001047 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001048 va_list ap;
1049 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001050 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).j;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001051}
1052
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001053jlong CallStaticLongMethodV(JNIEnv* env,
1054 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001055 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001056 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).j;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001057}
1058
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001059jlong CallStaticLongMethodA(JNIEnv* env,
1060 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001061 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001062 return InvokeWithJValues(ts.Self(), NULL, methodID, args).j;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001063}
1064
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001065jfloat CallStaticFloatMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001066 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001067 va_list ap;
1068 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001069 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).f;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001070}
1071
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001072jfloat CallStaticFloatMethodV(JNIEnv* env,
1073 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001074 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001075 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).f;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001076}
1077
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001078jfloat CallStaticFloatMethodA(JNIEnv* env,
1079 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001080 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001081 return InvokeWithJValues(ts.Self(), NULL, methodID, args).f;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001082}
1083
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001084jdouble CallStaticDoubleMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001085 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001086 va_list ap;
1087 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001088 return InvokeWithVarArgs(ts.Self(), NULL, methodID, ap).d;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001089}
1090
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001091jdouble CallStaticDoubleMethodV(JNIEnv* env,
1092 jclass clazz, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001093 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001094 return InvokeWithVarArgs(ts.Self(), NULL, methodID, args).d;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001095}
1096
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001097jdouble CallStaticDoubleMethodA(JNIEnv* env,
1098 jclass clazz, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001099 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001100 return InvokeWithJValues(ts.Self(), NULL, methodID, args).d;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001101}
1102
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001103void CallStaticVoidMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001104 ScopedJniThreadState ts(env);
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001105 va_list ap;
1106 va_start(ap, methodID);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001107 InvokeWithVarArgs(ts.Self(), NULL, methodID, ap);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001108}
1109
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001110void CallStaticVoidMethodV(JNIEnv* env,
1111 jclass cls, jmethodID methodID, va_list args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001112 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001113 InvokeWithVarArgs(ts.Self(), NULL, methodID, args);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001114}
1115
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001116void CallStaticVoidMethodA(JNIEnv* env,
Carl Shapiro9b9ba282011-08-14 15:30:39 -07001117 jclass cls, jmethodID methodID, jvalue* args) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001118 ScopedJniThreadState ts(env);
Elliott Hughes3cd987f2011-08-15 10:39:47 -07001119 InvokeWithJValues(ts.Self(), NULL, methodID, args);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001120}
1121
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001122jfieldID GetStaticFieldID(JNIEnv* env,
1123 jclass clazz, const char* name, const char* sig) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001124 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001125 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001126 return 0;
1127}
1128
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001129jobject GetStaticObjectField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001130 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001131 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001132 return NULL;
1133}
1134
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001135jboolean GetStaticBooleanField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001136 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001137 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001138 return JNI_FALSE;
1139}
1140
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001141jbyte GetStaticByteField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001142 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001143 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001144 return 0;
1145}
1146
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001147jchar GetStaticCharField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001148 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001149 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001150 return 0;
1151}
1152
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001153jshort GetStaticShortField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001154 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001155 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001156 return 0;
1157}
1158
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001159jint GetStaticIntField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001160 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001161 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001162 return 0;
1163}
1164
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001165jlong GetStaticLongField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001166 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001167 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001168 return 0;
1169}
1170
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001171jfloat GetStaticFloatField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001172 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001173 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001174 return 0;
1175}
1176
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001177jdouble GetStaticDoubleField(JNIEnv* env, jclass clazz, jfieldID fieldID) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001178 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001179 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001180 return 0;
1181}
1182
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001183void SetStaticObjectField(JNIEnv* env,
1184 jclass clazz, jfieldID fieldID, jobject value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001185 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001186 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001187}
1188
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001189void SetStaticBooleanField(JNIEnv* env,
1190 jclass clazz, jfieldID fieldID, jboolean value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001191 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001192 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001193}
1194
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001195void SetStaticByteField(JNIEnv* env,
1196 jclass clazz, jfieldID fieldID, jbyte value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001197 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001198 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001199}
1200
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001201void SetStaticCharField(JNIEnv* env,
1202 jclass clazz, jfieldID fieldID, jchar value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001203 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001204 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001205}
1206
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001207void SetStaticShortField(JNIEnv* env,
1208 jclass clazz, jfieldID fieldID, jshort value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001209 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001210 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001211}
1212
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001213void SetStaticIntField(JNIEnv* env,
1214 jclass clazz, jfieldID fieldID, jint value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001215 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001216 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001217}
1218
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001219void SetStaticLongField(JNIEnv* env,
1220 jclass clazz, jfieldID fieldID, jlong value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001221 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001222 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001223}
1224
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001225void SetStaticFloatField(JNIEnv* env,
1226 jclass clazz, jfieldID fieldID, jfloat value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001227 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001228 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001229}
1230
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001231void SetStaticDoubleField(JNIEnv* env,
1232 jclass clazz, jfieldID fieldID, jdouble value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001233 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001234 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001235}
1236
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001237jstring NewString(JNIEnv* env, const jchar* unicode, jsize len) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001238 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001239 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001240 return NULL;
1241}
1242
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001243jsize GetStringLength(JNIEnv* env, jstring str) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001244 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001245 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001246 return 0;
1247}
1248
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001249const jchar* GetStringChars(JNIEnv* env, jstring str, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001250 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001251 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001252 return NULL;
1253}
1254
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001255void ReleaseStringChars(JNIEnv* env, jstring str, const jchar* chars) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001256 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001257 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001258}
1259
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001260jstring NewStringUTF(JNIEnv* env, const char* utf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001261 ScopedJniThreadState ts(env);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -07001262 if (utf == NULL) {
1263 return NULL;
1264 }
1265 size_t char_count = String::ModifiedUtf8Len(utf);
1266 String* result = String::AllocFromModifiedUtf8(char_count, utf);
1267 return AddLocalReference<jstring>(ts, result);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001268}
1269
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001270jsize GetStringUTFLength(JNIEnv* env, jstring str) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001271 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001272 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001273 return 0;
1274}
1275
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001276const char* GetStringUTFChars(JNIEnv* env, jstring str, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001277 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001278 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001279 return NULL;
1280}
1281
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001282void ReleaseStringUTFChars(JNIEnv* env, jstring str, const char* chars) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001283 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001284 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001285}
1286
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001287jsize GetArrayLength(JNIEnv* env, jarray array) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001288 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001289 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001290 return 0;
1291}
1292
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001293jobject GetObjectArrayElement(JNIEnv* env, jobjectArray array, jsize index) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001294 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001295 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001296 return NULL;
1297}
1298
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001299void SetObjectArrayElement(JNIEnv* env,
Elliott Hughes8a26c5c2011-08-15 18:35:43 -07001300 jobjectArray java_array, jsize index, jobject java_value) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001301 ScopedJniThreadState ts(env);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -07001302 // TODO: DecodeReference
1303 ObjectArray<Object>* array = reinterpret_cast<ObjectArray<Object>*>(java_array);
1304 Object* value = reinterpret_cast<Object*>(java_value);
1305 // TODO: who should throw? JNI or ObjectArray?
1306 array->Set(index, value);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001307}
1308
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001309template<typename JniT, typename ArtT>
1310JniT NewPrimitiveArray(ScopedJniThreadState& ts, jsize length) {
1311 CHECK_GE(length, 0); // TODO: ReportJniError
1312 ArtT* result = ArtT::Alloc(length);
Elliott Hughes8a26c5c2011-08-15 18:35:43 -07001313 return AddLocalReference<JniT>(ts, result);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001314}
1315
Elliott Hughesf2682d52011-08-15 16:37:04 -07001316jbooleanArray NewBooleanArray(JNIEnv* env, jsize length) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001317 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001318 return NewPrimitiveArray<jbooleanArray, BooleanArray>(ts, length);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001319}
1320
Elliott Hughesf2682d52011-08-15 16:37:04 -07001321jbyteArray NewByteArray(JNIEnv* env, jsize length) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001322 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001323 return NewPrimitiveArray<jbyteArray, ByteArray>(ts, length);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001324}
1325
Elliott Hughesf2682d52011-08-15 16:37:04 -07001326jcharArray NewCharArray(JNIEnv* env, jsize length) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001327 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001328 return NewPrimitiveArray<jcharArray, CharArray>(ts, length);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001329}
1330
Elliott Hughesf2682d52011-08-15 16:37:04 -07001331jdoubleArray NewDoubleArray(JNIEnv* env, jsize length) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001332 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001333 return NewPrimitiveArray<jdoubleArray, DoubleArray>(ts, length);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001334}
1335
Elliott Hughesf2682d52011-08-15 16:37:04 -07001336jfloatArray NewFloatArray(JNIEnv* env, jsize length) {
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001337 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001338 return NewPrimitiveArray<jfloatArray, FloatArray>(ts, length);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001339}
1340
Elliott Hughesf2682d52011-08-15 16:37:04 -07001341jintArray NewIntArray(JNIEnv* env, jsize length) {
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001342 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001343 return NewPrimitiveArray<jintArray, IntArray>(ts, length);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001344}
1345
Elliott Hughesf2682d52011-08-15 16:37:04 -07001346jlongArray NewLongArray(JNIEnv* env, jsize length) {
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001347 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001348 return NewPrimitiveArray<jlongArray, LongArray>(ts, length);
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001349}
1350
Elliott Hughesf2682d52011-08-15 16:37:04 -07001351jobjectArray NewObjectArray(JNIEnv* env, jsize length, jclass element_jclass, jobject initial_element) {
Elliott Hughesd8ddfd52011-08-15 14:32:53 -07001352 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001353 CHECK_GE(length, 0); // TODO: ReportJniError
1354
1355 // Compute the array class corresponding to the given element class.
1356 // TODO: DecodeReference
1357 Class* element_class = reinterpret_cast<Class*>(element_jclass);
1358 std::string descriptor;
1359 descriptor += "[";
1360 descriptor += element_class->GetDescriptor().ToString();
1361
1362 // Find the class.
1363 ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
1364 // TODO: need to get the appropriate ClassLoader.
1365 Class* array_class = class_linker->FindClass(descriptor, NULL);
1366 if (array_class == NULL) {
1367 return NULL;
1368 }
1369
1370 ObjectArray<Object>* result = ObjectArray<Object>::Alloc(array_class, length);
1371 CHECK(initial_element == NULL); // TODO: support initial_element
Elliott Hughes8a26c5c2011-08-15 18:35:43 -07001372 return AddLocalReference<jobjectArray>(ts, result);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001373}
1374
1375jshortArray NewShortArray(JNIEnv* env, jsize length) {
1376 ScopedJniThreadState ts(env);
1377 return NewPrimitiveArray<jshortArray, ShortArray>(ts, length);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001378}
1379
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001380jboolean* GetBooleanArrayElements(JNIEnv* env,
1381 jbooleanArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001382 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001383 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001384 return NULL;
1385}
1386
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001387jbyte* GetByteArrayElements(JNIEnv* env, jbyteArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001388 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001389 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001390 return NULL;
1391}
1392
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001393jchar* GetCharArrayElements(JNIEnv* env, jcharArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001394 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001395 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001396 return NULL;
1397}
1398
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001399jshort* GetShortArrayElements(JNIEnv* env,
1400 jshortArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001401 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001402 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001403 return NULL;
1404}
1405
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001406jint* GetIntArrayElements(JNIEnv* env, jintArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001407 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001408 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001409 return NULL;
1410}
1411
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001412jlong* GetLongArrayElements(JNIEnv* env, jlongArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001413 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001414 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001415 return NULL;
1416}
1417
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001418jfloat* GetFloatArrayElements(JNIEnv* env,
1419 jfloatArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001420 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001421 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001422 return NULL;
1423}
1424
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001425jdouble* GetDoubleArrayElements(JNIEnv* env,
1426 jdoubleArray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001427 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001428 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001429 return NULL;
1430}
1431
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001432void ReleaseBooleanArrayElements(JNIEnv* env,
1433 jbooleanArray array, jboolean* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001434 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001435 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001436}
1437
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001438void ReleaseByteArrayElements(JNIEnv* env,
1439 jbyteArray array, jbyte* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001440 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001441 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001442}
1443
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001444void ReleaseCharArrayElements(JNIEnv* env,
1445 jcharArray array, jchar* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001446 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001447 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001448}
1449
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001450void ReleaseShortArrayElements(JNIEnv* env,
1451 jshortArray array, jshort* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001452 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001453 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001454}
1455
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001456void ReleaseIntArrayElements(JNIEnv* env,
1457 jintArray array, jint* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001458 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001459 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001460}
1461
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001462void ReleaseLongArrayElements(JNIEnv* env,
1463 jlongArray array, jlong* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001464 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001465 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001466}
1467
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001468void ReleaseFloatArrayElements(JNIEnv* env,
1469 jfloatArray array, jfloat* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001470 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001471 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001472}
1473
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001474void ReleaseDoubleArrayElements(JNIEnv* env,
1475 jdoubleArray array, jdouble* elems, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001476 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001477 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001478}
1479
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001480void GetBooleanArrayRegion(JNIEnv* env,
1481 jbooleanArray array, jsize start, jsize l, jboolean* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001482 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001483 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001484}
1485
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001486void GetByteArrayRegion(JNIEnv* env,
1487 jbyteArray array, jsize start, jsize len, jbyte* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001488 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001489 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001490}
1491
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001492void GetCharArrayRegion(JNIEnv* env,
1493 jcharArray array, jsize start, jsize len, jchar* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001494 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001495 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001496}
1497
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001498void GetShortArrayRegion(JNIEnv* env,
1499 jshortArray array, jsize start, jsize len, jshort* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001500 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001501 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001502}
1503
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001504void GetIntArrayRegion(JNIEnv* env,
1505 jintArray array, jsize start, jsize len, jint* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001506 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001507 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001508}
1509
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001510void GetLongArrayRegion(JNIEnv* env,
1511 jlongArray array, jsize start, jsize len, jlong* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001512 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001513 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001514}
1515
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001516void GetFloatArrayRegion(JNIEnv* env,
1517 jfloatArray array, jsize start, jsize len, jfloat* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001518 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001519 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001520}
1521
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001522void GetDoubleArrayRegion(JNIEnv* env,
1523 jdoubleArray array, jsize start, jsize len, jdouble* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001524 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001525 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001526}
1527
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001528void SetBooleanArrayRegion(JNIEnv* env,
1529 jbooleanArray array, jsize start, jsize l, const jboolean* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001530 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001531 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001532}
1533
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001534void SetByteArrayRegion(JNIEnv* env,
1535 jbyteArray array, jsize start, jsize len, const jbyte* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001536 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001537 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001538}
1539
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001540void SetCharArrayRegion(JNIEnv* env,
1541 jcharArray array, jsize start, jsize len, const jchar* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001542 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001543 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001544}
1545
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001546void SetShortArrayRegion(JNIEnv* env,
1547 jshortArray array, jsize start, jsize len, const jshort* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001548 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001549 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001550}
1551
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001552void SetIntArrayRegion(JNIEnv* env,
1553 jintArray array, jsize start, jsize len, const jint* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001554 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001555 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001556}
1557
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001558void SetLongArrayRegion(JNIEnv* env,
1559 jlongArray array, jsize start, jsize len, const jlong* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001560 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001561 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001562}
1563
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001564void SetFloatArrayRegion(JNIEnv* env,
1565 jfloatArray array, jsize start, jsize len, const jfloat* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001566 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001567 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001568}
1569
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001570void SetDoubleArrayRegion(JNIEnv* env,
1571 jdoubleArray array, jsize start, jsize len, const jdouble* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001572 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001573 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001574}
1575
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001576jint RegisterNatives(JNIEnv* env,
1577 jclass clazz, const JNINativeMethod* methods, jint nMethods) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001578 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001579 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001580 return 0;
1581}
1582
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001583jint UnregisterNatives(JNIEnv* env, jclass clazz) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001584 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001585 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001586 return 0;
1587}
1588
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001589jint MonitorEnter(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001590 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001591 UNIMPLEMENTED(WARNING);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001592 return 0;
1593}
1594
1595jint MonitorExit(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001596 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001597 UNIMPLEMENTED(WARNING);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001598 return 0;
1599}
1600
Elliott Hughesb20a5542011-08-12 18:03:12 -07001601jint GetJavaVM(JNIEnv* env, JavaVM** vm) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001602 ScopedJniThreadState ts(env);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001603 Runtime* runtime = Runtime::Current();
1604 if (runtime != NULL) {
1605 *vm = runtime->GetJavaVM();
1606 } else {
1607 *vm = NULL;
1608 }
1609 return (*vm != NULL) ? JNI_OK : JNI_ERR;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001610}
1611
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001612void GetStringRegion(JNIEnv* env,
1613 jstring str, jsize start, jsize len, jchar* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001614 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001615 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001616}
1617
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001618void GetStringUTFRegion(JNIEnv* env,
1619 jstring str, jsize start, jsize len, char* buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001620 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001621 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001622}
1623
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001624void* GetPrimitiveArrayCritical(JNIEnv* env,
1625 jarray array, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001626 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001627 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001628 return NULL;
1629}
1630
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001631void ReleasePrimitiveArrayCritical(JNIEnv* env,
1632 jarray array, void* carray, jint mode) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001633 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001634 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001635}
1636
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001637const jchar* GetStringCritical(JNIEnv* env, jstring s, jboolean* isCopy) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001638 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001639 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001640 return NULL;
1641}
1642
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001643void ReleaseStringCritical(JNIEnv* env, jstring s, const jchar* cstr) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001644 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001645 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001646}
1647
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001648jweak NewWeakGlobalRef(JNIEnv* env, jobject obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001649 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001650 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001651 return NULL;
1652}
1653
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001654void DeleteWeakGlobalRef(JNIEnv* env, jweak obj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001655 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001656 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001657}
1658
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001659jboolean ExceptionCheck(JNIEnv* env) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001660 ScopedJniThreadState ts(env);
Elliott Hughesb20a5542011-08-12 18:03:12 -07001661 return ts.Self()->IsExceptionPending() ? JNI_TRUE : JNI_FALSE;
Carl Shapiroea4dca82011-08-01 13:45:38 -07001662}
1663
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001664jobject NewDirectByteBuffer(JNIEnv* env, void* address, jlong capacity) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001665 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001666 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001667 return NULL;
1668}
1669
1670
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001671void* GetDirectBufferAddress(JNIEnv* env, jobject buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001672 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001673 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001674 return NULL;
1675}
1676
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001677jlong GetDirectBufferCapacity(JNIEnv* env, jobject buf) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001678 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001679 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001680 return 0;
1681}
1682
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001683jobjectRefType GetObjectRefType(JNIEnv* env, jobject jobj) {
Elliott Hughes22f40932011-08-12 13:06:37 -07001684 ScopedJniThreadState ts(env);
Elliott Hughesc7ac37f2011-08-12 12:21:58 -07001685 UNIMPLEMENTED(FATAL);
Carl Shapiroea4dca82011-08-01 13:45:38 -07001686 return JNIInvalidRefType;
1687}
1688
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001689static const struct JNINativeInterface gNativeInterface = {
Carl Shapiroea4dca82011-08-01 13:45:38 -07001690 NULL, // reserved0.
1691 NULL, // reserved1.
1692 NULL, // reserved2.
1693 NULL, // reserved3.
1694 GetVersion,
1695 DefineClass,
1696 FindClass,
1697 FromReflectedMethod,
1698 FromReflectedField,
1699 ToReflectedMethod,
1700 GetSuperclass,
1701 IsAssignableFrom,
1702 ToReflectedField,
1703 Throw,
1704 ThrowNew,
1705 ExceptionOccurred,
1706 ExceptionDescribe,
1707 ExceptionClear,
1708 FatalError,
1709 PushLocalFrame,
1710 PopLocalFrame,
1711 NewGlobalRef,
1712 DeleteGlobalRef,
1713 DeleteLocalRef,
1714 IsSameObject,
1715 NewLocalRef,
1716 EnsureLocalCapacity,
1717 AllocObject,
1718 NewObject,
1719 NewObjectV,
1720 NewObjectA,
1721 GetObjectClass,
1722 IsInstanceOf,
1723 GetMethodID,
1724 CallObjectMethod,
1725 CallObjectMethodV,
1726 CallObjectMethodA,
1727 CallBooleanMethod,
1728 CallBooleanMethodV,
1729 CallBooleanMethodA,
1730 CallByteMethod,
1731 CallByteMethodV,
1732 CallByteMethodA,
1733 CallCharMethod,
1734 CallCharMethodV,
1735 CallCharMethodA,
1736 CallShortMethod,
1737 CallShortMethodV,
1738 CallShortMethodA,
1739 CallIntMethod,
1740 CallIntMethodV,
1741 CallIntMethodA,
1742 CallLongMethod,
1743 CallLongMethodV,
1744 CallLongMethodA,
1745 CallFloatMethod,
1746 CallFloatMethodV,
1747 CallFloatMethodA,
1748 CallDoubleMethod,
1749 CallDoubleMethodV,
1750 CallDoubleMethodA,
1751 CallVoidMethod,
1752 CallVoidMethodV,
1753 CallVoidMethodA,
1754 CallNonvirtualObjectMethod,
1755 CallNonvirtualObjectMethodV,
1756 CallNonvirtualObjectMethodA,
1757 CallNonvirtualBooleanMethod,
1758 CallNonvirtualBooleanMethodV,
1759 CallNonvirtualBooleanMethodA,
1760 CallNonvirtualByteMethod,
1761 CallNonvirtualByteMethodV,
1762 CallNonvirtualByteMethodA,
1763 CallNonvirtualCharMethod,
1764 CallNonvirtualCharMethodV,
1765 CallNonvirtualCharMethodA,
1766 CallNonvirtualShortMethod,
1767 CallNonvirtualShortMethodV,
1768 CallNonvirtualShortMethodA,
1769 CallNonvirtualIntMethod,
1770 CallNonvirtualIntMethodV,
1771 CallNonvirtualIntMethodA,
1772 CallNonvirtualLongMethod,
1773 CallNonvirtualLongMethodV,
1774 CallNonvirtualLongMethodA,
1775 CallNonvirtualFloatMethod,
1776 CallNonvirtualFloatMethodV,
1777 CallNonvirtualFloatMethodA,
1778 CallNonvirtualDoubleMethod,
1779 CallNonvirtualDoubleMethodV,
1780 CallNonvirtualDoubleMethodA,
1781 CallNonvirtualVoidMethod,
1782 CallNonvirtualVoidMethodV,
1783 CallNonvirtualVoidMethodA,
1784 GetFieldID,
1785 GetObjectField,
1786 GetBooleanField,
1787 GetByteField,
1788 GetCharField,
1789 GetShortField,
1790 GetIntField,
1791 GetLongField,
1792 GetFloatField,
1793 GetDoubleField,
1794 SetObjectField,
1795 SetBooleanField,
1796 SetByteField,
1797 SetCharField,
1798 SetShortField,
1799 SetIntField,
1800 SetLongField,
1801 SetFloatField,
1802 SetDoubleField,
1803 GetStaticMethodID,
1804 CallStaticObjectMethod,
1805 CallStaticObjectMethodV,
1806 CallStaticObjectMethodA,
1807 CallStaticBooleanMethod,
1808 CallStaticBooleanMethodV,
1809 CallStaticBooleanMethodA,
1810 CallStaticByteMethod,
1811 CallStaticByteMethodV,
1812 CallStaticByteMethodA,
1813 CallStaticCharMethod,
1814 CallStaticCharMethodV,
1815 CallStaticCharMethodA,
1816 CallStaticShortMethod,
1817 CallStaticShortMethodV,
1818 CallStaticShortMethodA,
1819 CallStaticIntMethod,
1820 CallStaticIntMethodV,
1821 CallStaticIntMethodA,
1822 CallStaticLongMethod,
1823 CallStaticLongMethodV,
1824 CallStaticLongMethodA,
1825 CallStaticFloatMethod,
1826 CallStaticFloatMethodV,
1827 CallStaticFloatMethodA,
1828 CallStaticDoubleMethod,
1829 CallStaticDoubleMethodV,
1830 CallStaticDoubleMethodA,
1831 CallStaticVoidMethod,
1832 CallStaticVoidMethodV,
1833 CallStaticVoidMethodA,
1834 GetStaticFieldID,
1835 GetStaticObjectField,
1836 GetStaticBooleanField,
1837 GetStaticByteField,
1838 GetStaticCharField,
1839 GetStaticShortField,
1840 GetStaticIntField,
1841 GetStaticLongField,
1842 GetStaticFloatField,
1843 GetStaticDoubleField,
1844 SetStaticObjectField,
1845 SetStaticBooleanField,
1846 SetStaticByteField,
1847 SetStaticCharField,
1848 SetStaticShortField,
1849 SetStaticIntField,
1850 SetStaticLongField,
1851 SetStaticFloatField,
1852 SetStaticDoubleField,
1853 NewString,
1854 GetStringLength,
1855 GetStringChars,
1856 ReleaseStringChars,
1857 NewStringUTF,
1858 GetStringUTFLength,
1859 GetStringUTFChars,
1860 ReleaseStringUTFChars,
1861 GetArrayLength,
1862 NewObjectArray,
1863 GetObjectArrayElement,
1864 SetObjectArrayElement,
1865 NewBooleanArray,
1866 NewByteArray,
1867 NewCharArray,
1868 NewShortArray,
1869 NewIntArray,
1870 NewLongArray,
1871 NewFloatArray,
1872 NewDoubleArray,
1873 GetBooleanArrayElements,
1874 GetByteArrayElements,
1875 GetCharArrayElements,
1876 GetShortArrayElements,
1877 GetIntArrayElements,
1878 GetLongArrayElements,
1879 GetFloatArrayElements,
1880 GetDoubleArrayElements,
1881 ReleaseBooleanArrayElements,
1882 ReleaseByteArrayElements,
1883 ReleaseCharArrayElements,
1884 ReleaseShortArrayElements,
1885 ReleaseIntArrayElements,
1886 ReleaseLongArrayElements,
1887 ReleaseFloatArrayElements,
1888 ReleaseDoubleArrayElements,
1889 GetBooleanArrayRegion,
1890 GetByteArrayRegion,
1891 GetCharArrayRegion,
1892 GetShortArrayRegion,
1893 GetIntArrayRegion,
1894 GetLongArrayRegion,
1895 GetFloatArrayRegion,
1896 GetDoubleArrayRegion,
1897 SetBooleanArrayRegion,
1898 SetByteArrayRegion,
1899 SetCharArrayRegion,
1900 SetShortArrayRegion,
1901 SetIntArrayRegion,
1902 SetLongArrayRegion,
1903 SetFloatArrayRegion,
1904 SetDoubleArrayRegion,
1905 RegisterNatives,
1906 UnregisterNatives,
1907 MonitorEnter,
1908 MonitorExit,
1909 GetJavaVM,
1910 GetStringRegion,
1911 GetStringUTFRegion,
1912 GetPrimitiveArrayCritical,
1913 ReleasePrimitiveArrayCritical,
1914 GetStringCritical,
1915 ReleaseStringCritical,
1916 NewWeakGlobalRef,
1917 DeleteWeakGlobalRef,
1918 ExceptionCheck,
1919 NewDirectByteBuffer,
1920 GetDirectBufferAddress,
1921 GetDirectBufferCapacity,
1922 GetObjectRefType,
1923};
1924
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001925void MonitorEnterHelper(JNIEnv* env, jobject obj) {
Elliott Hughes330304d2011-08-12 14:28:05 -07001926 CHECK_EQ(Thread::Current()->GetJniEnv(), env);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001927 MonitorEnter(env, obj); // Ignore the result.
1928}
1929
1930void MonitorExitHelper(JNIEnv* env, jobject obj) {
Elliott Hughes330304d2011-08-12 14:28:05 -07001931 CHECK_EQ(Thread::Current()->GetJniEnv(), env);
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001932 MonitorExit(env, obj); // Ignore the result.
1933}
1934
1935JNIEnv* CreateJNIEnv() {
Elliott Hughes330304d2011-08-12 14:28:05 -07001936 Thread* self = Thread::Current();
1937 CHECK(self != NULL);
Elliott Hughesf2682d52011-08-15 16:37:04 -07001938 JNIEnvExt* result = new JNIEnvExt;
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001939 result->fns = &gNativeInterface;
Elliott Hughes330304d2011-08-12 14:28:05 -07001940 result->self = self;
Elliott Hughesf2682d52011-08-15 16:37:04 -07001941 result->critical = false;
Elliott Hughes40ef99e2011-08-11 17:44:34 -07001942 result->MonitorEnterHelper = &MonitorEnterHelper;
1943 result->MonitorExitHelper = &MonitorExitHelper;
1944 return reinterpret_cast<JNIEnv*>(result);
1945}
1946
Carl Shapiroea4dca82011-08-01 13:45:38 -07001947// JNI Invocation interface.
1948
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001949extern "C" jint JNI_CreateJavaVM(JavaVM** p_vm, void** p_env, void* vm_args) {
1950 const JavaVMInitArgs* args = static_cast<JavaVMInitArgs*>(vm_args);
1951 if (args->version < JNI_VERSION_1_2) {
1952 return JNI_EVERSION;
1953 }
1954 Runtime::Options options;
1955 for (int i = 0; i < args->nOptions; ++i) {
1956 JavaVMOption* option = &args->options[i];
Carl Shapirofc322c72011-07-27 00:20:01 -07001957 options.push_back(std::make_pair(StringPiece(option->optionString),
1958 option->extraInfo));
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001959 }
1960 bool ignore_unrecognized = args->ignoreUnrecognized;
Elliott Hughesf2682d52011-08-15 16:37:04 -07001961 Runtime* runtime = Runtime::Create(options, ignore_unrecognized);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001962 if (runtime == NULL) {
1963 return JNI_ERR;
1964 } else {
1965 *p_env = reinterpret_cast<JNIEnv*>(Thread::Current()->GetJniEnv());
Elliott Hughesf2682d52011-08-15 16:37:04 -07001966 *p_vm = runtime->GetJavaVM();
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001967 return JNI_OK;
1968 }
1969}
1970
Elliott Hughesf2682d52011-08-15 16:37:04 -07001971extern "C" jint JNI_GetCreatedJavaVMs(JavaVM** vms, jsize, jsize* vm_count) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001972 Runtime* runtime = Runtime::Current();
1973 if (runtime == NULL) {
Elliott Hughesf2682d52011-08-15 16:37:04 -07001974 *vm_count = 0;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001975 } else {
Elliott Hughesf2682d52011-08-15 16:37:04 -07001976 *vm_count = 1;
1977 vms[0] = runtime->GetJavaVM();
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001978 }
1979 return JNI_OK;
1980}
1981
1982// Historically unsupported.
1983extern "C" jint JNI_GetDefaultJavaVMInitArgs(void* vm_args) {
1984 return JNI_ERR;
1985}
1986
Elliott Hughesf2682d52011-08-15 16:37:04 -07001987jint DestroyJavaVM(JavaVM* vm) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001988 if (vm == NULL) {
1989 return JNI_ERR;
1990 } else {
Elliott Hughesf2682d52011-08-15 16:37:04 -07001991 JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
1992 delete raw_vm->runtime;
1993 raw_vm->runtime = NULL;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001994 return JNI_OK;
1995 }
1996}
1997
Elliott Hughesf2682d52011-08-15 16:37:04 -07001998jint AttachCurrentThread(JavaVM* vm, JNIEnv** p_env, void* thr_args) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07001999 if (vm == NULL || p_env == NULL) {
2000 return JNI_ERR;
2001 }
Elliott Hughesf2682d52011-08-15 16:37:04 -07002002 JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
2003 Runtime* runtime = raw_vm->runtime;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002004 const char* name = NULL;
2005 if (thr_args != NULL) {
2006 // TODO: check version
2007 name = static_cast<JavaVMAttachArgs*>(thr_args)->name;
2008 // TODO: thread group
2009 }
Elliott Hughes40ef99e2011-08-11 17:44:34 -07002010 bool success = runtime->AttachCurrentThread(name, p_env);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002011 if (!success) {
2012 return JNI_ERR;
2013 } else {
2014 return JNI_OK;
2015 }
2016}
2017
Elliott Hughesf2682d52011-08-15 16:37:04 -07002018jint DetachCurrentThread(JavaVM* vm) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002019 if (vm == NULL) {
2020 return JNI_ERR;
2021 } else {
Elliott Hughesf2682d52011-08-15 16:37:04 -07002022 JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
2023 Runtime* runtime = raw_vm->runtime;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002024 runtime->DetachCurrentThread();
2025 return JNI_OK;
2026 }
2027}
2028
Elliott Hughesf2682d52011-08-15 16:37:04 -07002029jint GetEnv(JavaVM* vm, void** env, jint version) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002030 if (version < JNI_VERSION_1_1 || version > JNI_VERSION_1_6) {
2031 return JNI_EVERSION;
2032 }
2033 if (vm == NULL || env == NULL) {
2034 return JNI_ERR;
2035 }
2036 Thread* thread = Thread::Current();
2037 if (thread == NULL) {
2038 *env = NULL;
2039 return JNI_EDETACHED;
2040 }
2041 *env = thread->GetJniEnv();
2042 return JNI_OK;
2043}
2044
Elliott Hughesf2682d52011-08-15 16:37:04 -07002045jint AttachCurrentThreadAsDaemon(JavaVM* vm, JNIEnv** p_env, void* thr_args) {
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002046 if (vm == NULL || p_env == NULL) {
2047 return JNI_ERR;
2048 }
Elliott Hughesf2682d52011-08-15 16:37:04 -07002049 JavaVMExt* raw_vm = reinterpret_cast<JavaVMExt*>(vm);
2050 Runtime* runtime = raw_vm->runtime;
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002051 const char* name = NULL;
2052 if (thr_args != NULL) {
2053 // TODO: check version
2054 name = static_cast<JavaVMAttachArgs*>(thr_args)->name;
2055 // TODO: thread group
2056 }
Elliott Hughes40ef99e2011-08-11 17:44:34 -07002057 bool success = runtime->AttachCurrentThreadAsDaemon(name, p_env);
Carl Shapiro2ed144c2011-07-26 16:52:08 -07002058 if (!success) {
2059 return JNI_ERR;
2060 } else {
2061 return JNI_OK;
2062 }
2063}
2064
Elliott Hughesf2682d52011-08-15 16:37:04 -07002065struct JNIInvokeInterface gInvokeInterface = {
Carl Shapiroea4dca82011-08-01 13:45:38 -07002066 NULL, // reserved0
2067 NULL, // reserved1
2068 NULL, // reserved2
2069 DestroyJavaVM,
2070 AttachCurrentThread,
2071 DetachCurrentThread,
2072 GetEnv,
2073 AttachCurrentThreadAsDaemon
2074};
2075
Elliott Hughesf2682d52011-08-15 16:37:04 -07002076JavaVM* CreateJavaVM(Runtime* runtime) {
2077 JavaVMExt* result = new JavaVMExt;
2078 result->fns = &gInvokeInterface;
2079 result->runtime = runtime;
2080 return reinterpret_cast<JavaVM*>(result);
2081}
2082
Ian Rogersdf20fe02011-07-20 20:34:16 -07002083} // namespace art