11
22#include " javaObject.h"
33#include " java.h"
4+ #include " javaScope.h"
45#include " utils.h"
56#include < sstream>
67#include < algorithm>
1516
1617 JNIEnv *env = java->getJavaEnv ();
1718 obj = env->NewGlobalRef (obj);
18-
19- PUSH_LOCAL_JAVA_FRAME ();
19+ JavaScope javaScope (env);
2020
2121 jclass objClazz = env->GetObjectClass (obj);
2222 jclass classClazz = env->FindClass (" java/lang/Class" );
7777 JavaObject *self = new JavaObject (java, obj);
7878 self->Wrap (javaObjectObj);
7979
80- POP_LOCAL_JAVA_FRAME ();
81-
8280 return scope.Close (javaObjectObj);
8381}
8482
@@ -109,8 +107,7 @@ JavaObject::~JavaObject() {
109107 v8::HandleScope scope;
110108 JavaObject* self = node::ObjectWrap::Unwrap<JavaObject>(args.This ());
111109 JNIEnv *env = self->m_java ->getJavaEnv ();
112-
113- PUSH_LOCAL_JAVA_FRAME ();
110+ JavaScope javaScope (env);
114111
115112 v8::String::AsciiValue methodName (args.Data ());
116113 std::string methodNameStr = *methodName;
@@ -122,7 +119,6 @@ JavaObject::~JavaObject() {
122119 ARGS_BACK_CALLBACK ();
123120
124121 if (!callbackProvided && methodNameStr == " toString" ) {
125- POP_LOCAL_JAVA_FRAME ();
126122 return methodCallSync (args);
127123 }
128124
@@ -132,25 +128,21 @@ JavaObject::~JavaObject() {
132128 if (method == NULL ) {
133129 std::string msg = methodNotFoundToString (env, self->m_class , methodNameStr, false , args, argsStart, argsEnd);
134130 EXCEPTION_CALL_CALLBACK (msg);
135- POP_LOCAL_JAVA_FRAME ();
136131 return v8::Undefined ();
137132 }
138133
139134 // run
140135 InstanceMethodCallBaton* baton = new InstanceMethodCallBaton (self->m_java , self, method, methodArgs, callback);
141136 baton->run ();
142137
143- POP_LOCAL_JAVA_FRAME ();
144-
145138 END_CALLBACK_FUNCTION (" \" Method '" << methodNameStr << " ' called without a callback did you mean to use the Sync version?\" " );
146139}
147140
148141/* static*/ v8::Handle<v8::Value> JavaObject::methodCallSync (const v8::Arguments& args) {
149142 v8::HandleScope scope;
150143 JavaObject* self = node::ObjectWrap::Unwrap<JavaObject>(args.This ());
151144 JNIEnv *env = self->m_java ->getJavaEnv ();
152-
153- PUSH_LOCAL_JAVA_FRAME ();
145+ JavaScope javaScope (env);
154146
155147 v8::String::AsciiValue methodName (args.Data ());
156148 std::string methodNameStr = *methodName;
@@ -164,7 +156,6 @@ JavaObject::~JavaObject() {
164156 if (method == NULL ) {
165157 std::string msg = methodNotFoundToString (env, self->m_class , methodNameStr, false , args, argsStart, argsEnd);
166158 v8::Handle<v8::Value> ex = javaExceptionToV8 (env, msg);
167- POP_LOCAL_JAVA_FRAME ();
168159 return ThrowException (ex);
169160 }
170161
@@ -174,8 +165,6 @@ JavaObject::~JavaObject() {
174165 v8::Handle<v8::Value> result = baton->runSync ();
175166 delete baton;
176167
177- POP_LOCAL_JAVA_FRAME ();
178-
179168 if (result->IsNativeError ()) {
180169 return ThrowException (result);
181170 }
@@ -187,8 +176,7 @@ JavaObject::~JavaObject() {
187176 v8::HandleScope scope;
188177 JavaObject* self = node::ObjectWrap::Unwrap<JavaObject>(info.This ());
189178 JNIEnv *env = self->m_java ->getJavaEnv ();
190-
191- PUSH_LOCAL_JAVA_FRAME ();
179+ JavaScope javaScope (env);
192180
193181 v8::String::AsciiValue propertyCStr (property);
194182 std::string propertyStr = *propertyCStr;
@@ -197,7 +185,6 @@ JavaObject::~JavaObject() {
197185 std::ostringstream errStr;
198186 errStr << " Could not find field " << propertyStr;
199187 v8::Handle<v8::Value> ex = javaExceptionToV8 (env, errStr.str ());
200- POP_LOCAL_JAVA_FRAME ();
201188 return ThrowException (ex);
202189 }
203190
@@ -210,23 +197,20 @@ JavaObject::~JavaObject() {
210197 std::ostringstream errStr;
211198 errStr << " Could not get field " << propertyStr;
212199 v8::Handle<v8::Value> ex = javaExceptionToV8 (env, errStr.str ());
213- POP_LOCAL_JAVA_FRAME ();
214200 return ThrowException (ex);
215201 }
216202
217203 v8::Handle<v8::Value> result = javaToV8 (self->m_java , env, val);
218204
219- POP_LOCAL_JAVA_FRAME ();
220-
221205 return scope.Close (result);
222206}
223207
224208/* static*/ void JavaObject::fieldSetter (v8::Local<v8::String> property, v8::Local<v8::Value> value, const v8::AccessorInfo& info) {
225209 v8::HandleScope scope;
226210 JavaObject* self = node::ObjectWrap::Unwrap<JavaObject>(info.This ());
227211 JNIEnv *env = self->m_java ->getJavaEnv ();
212+ JavaScope javaScope (env);
228213
229- PUSH_LOCAL_JAVA_FRAME ();
230214 jobject newValue = v8ToJava (env, value);
231215
232216 v8::String::AsciiValue propertyCStr (property);
@@ -236,7 +220,6 @@ JavaObject::~JavaObject() {
236220 std::ostringstream errStr;
237221 errStr << " Could not find field " << propertyStr;
238222 v8::Handle<v8::Value> ex = javaExceptionToV8 (env, errStr.str ());
239- POP_LOCAL_JAVA_FRAME ();
240223 ThrowException (ex);
241224 return ;
242225 }
@@ -252,10 +235,7 @@ JavaObject::~JavaObject() {
252235 std::ostringstream errStr;
253236 errStr << " Could not set field " << propertyStr;
254237 v8::Handle<v8::Value> ex = javaExceptionToV8 (env, errStr.str ());
255- POP_LOCAL_JAVA_FRAME ();
256238 ThrowException (ex);
257239 return ;
258240 }
259-
260- POP_LOCAL_JAVA_FRAME ();
261241}
0 commit comments