diff --git a/package.json b/package.json index 0afa5d3f..3756dff0 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "find-java-home": "0.1.3", "glob": "7.1.1", "lodash": "4.16.4", - "nan": "2.4.0" + "nan": "2.6.2" }, "devDependencies": { "chalk": "1.1.3", diff --git a/src/java.cpp b/src/java.cpp index fac5682e..ae254025 100644 --- a/src/java.cpp +++ b/src/java.cpp @@ -894,11 +894,11 @@ NAN_METHOD(Java::newByte) { return Nan::ThrowError(Nan::TypeError("Argument 1 must be a number")); } - v8::Local val = info[0]->ToNumber(); + jbyte val = Nan::To(info[0]).FromJust(); jclass clazz = env->FindClass("java/lang/Byte"); jmethodID constructor = env->GetMethodID(clazz, "", "(B)V"); - jobject newObj = env->NewObject(clazz, constructor, (jbyte)val->Value()); + jobject newObj = env->NewObject(clazz, constructor, val); info.GetReturnValue().Set(JavaObject::New(self, newObj)); return; @@ -924,11 +924,11 @@ NAN_METHOD(Java::newShort) { return Nan::ThrowError(Nan::TypeError("Argument 1 must be a number")); } - v8::Local val = info[0]->ToNumber(); + jshort val = Nan::To(info[0]).FromJust(); jclass clazz = env->FindClass("java/lang/Short"); jmethodID constructor = env->GetMethodID(clazz, "", "(S)V"); - jobject newObj = env->NewObject(clazz, constructor, (jshort)val->Value()); + jobject newObj = env->NewObject(clazz, constructor, val); info.GetReturnValue().Set(JavaObject::New(self, newObj)); } @@ -953,11 +953,11 @@ NAN_METHOD(Java::newLong) { return Nan::ThrowError(Nan::TypeError("Argument 1 must be a number")); } - v8::Local val = info[0]->ToNumber(); + jlong val = Nan::To(info[0]).FromJust(); jclass clazz = env->FindClass("java/lang/Long"); jmethodID constructor = env->GetMethodID(clazz, "", "(J)V"); - jobject newObj = env->NewObject(clazz, constructor, (jlong)val->Value()); + jobject newObj = env->NewObject(clazz, constructor, val); info.GetReturnValue().Set(JavaObject::New(self, newObj)); } @@ -980,8 +980,7 @@ NAN_METHOD(Java::newChar) { // argument - value jchar charVal; if(info[0]->IsNumber()) { - v8::Local val = info[0]->ToNumber(); - charVal = (jchar)val->Value(); + charVal = (jchar)Nan::To(info[0]).FromJust(); } else if(info[0]->IsString()) { v8::Local val = info[0]->ToString(); if(val->Length() != 1) { @@ -1016,11 +1015,11 @@ NAN_METHOD(Java::newFloat) { } else if(!info[0]->IsNumber()) { return Nan::ThrowError(Nan::TypeError("Argument 1 must be a number")); } - v8::Local val = info[0]->ToNumber(); + jfloat val = (jfloat)Nan::To(info[0]).FromJust(); jclass clazz = env->FindClass("java/lang/Float"); jmethodID constructor = env->GetMethodID(clazz, "", "(F)V"); - jobject newObj = env->NewObject(clazz, constructor, (jfloat)val->Value()); + jobject newObj = env->NewObject(clazz, constructor, val); info.GetReturnValue().Set(JavaObject::New(self, newObj)); } @@ -1041,11 +1040,12 @@ NAN_METHOD(Java::newDouble) { } else if(!info[0]->IsNumber()) { return Nan::ThrowError(Nan::TypeError("Argument 1 must be a number")); } - v8::Local val = info[0]->ToNumber(); + + jdouble val = (jdouble)Nan::To(info[0]).FromJust(); jclass clazz = env->FindClass("java/lang/Double"); jmethodID constructor = env->GetMethodID(clazz, "", "(D)V"); - jobject newObj = env->NewObject(clazz, constructor, (jdouble)val->Value()); + jobject newObj = env->NewObject(clazz, constructor, val); info.GetReturnValue().Set(JavaObject::New(self, newObj)); } @@ -1260,18 +1260,14 @@ void EIO_AfterCallJs(uv_work_t* req) { argv[i] = v8Args->Get(i); } - v8::TryCatch tryCatch; + Nan::TryCatch tryCatch; + tryCatch.SetCaptureMessage(true); v8Result = fn->Call(dynamicProxyDataFunctions, argc, argv); delete[] argv; if (tryCatch.HasCaught()) { dynamicProxyData->throwableClass = "node/NodeJsException"; - v8::String::Utf8Value stackTrace(tryCatch.StackTrace()); - if (stackTrace.length() > 0) { - dynamicProxyData->throwableMessage = std::string(*stackTrace); - } else { - v8::String::Utf8Value exception(tryCatch.Exception()); - dynamicProxyData->throwableMessage = std::string(*exception); - } + v8::String::Utf8Value message(tryCatch.Message()->Get()); + dynamicProxyData->throwableMessage = std::string(*message); tryCatch.Reset(); dynamicProxyData->done = DYNAMIC_PROXY_JS_ERROR; return; diff --git a/src/javaObject.cpp b/src/javaObject.cpp index db47d7df..be3ff6b6 100644 --- a/src/javaObject.cpp +++ b/src/javaObject.cpp @@ -112,8 +112,8 @@ sFunctionTemplates[className] = persistentFuncTemplate; } - v8::Local ctor = funcTemplate->GetFunction(); - v8::Local javaObjectObj = ctor->NewInstance(); + v8::Local ctor = Nan::GetFunction(funcTemplate).ToLocalChecked(); + v8::Local javaObjectObj = Nan::NewInstance(ctor).ToLocalChecked(); SetHiddenValue(javaObjectObj, Nan::New(V8_HIDDEN_MARKER_JAVA_OBJECT).ToLocalChecked(), Nan::New(true)); JavaObject *self = new JavaObject(java, obj); self->Wrap(javaObjectObj); @@ -346,7 +346,7 @@ v8::Local JavaProxyObject::New(Java *java, jobject obj, DynamicProxy Nan::EscapableHandleScope scope; v8::Local ctor = Nan::New(s_proxyCt)->GetFunction(); - v8::Local javaObjectObj = ctor->NewInstance(); + v8::Local javaObjectObj = Nan::NewInstance(ctor).ToLocalChecked(); SetHiddenValue(javaObjectObj, Nan::New(V8_HIDDEN_MARKER_JAVA_OBJECT).ToLocalChecked(), Nan::New(true)); JavaProxyObject *self = new JavaProxyObject(java, obj, dynamicProxyData); self->Wrap(javaObjectObj); diff --git a/src/utils.cpp b/src/utils.cpp index 2c495701..f20ad947 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -344,21 +344,21 @@ jobject v8ToJava(JNIEnv* env, v8::Local arg) { } if(arg->IsInt32() || arg->IsUint32()) { - jint val = arg->ToInt32()->Value(); + jint val = Nan::To(arg).FromJust(); jclass clazz = env->FindClass("java/lang/Integer"); jmethodID constructor = env->GetMethodID(clazz, "", "(I)V"); return env->NewObject(clazz, constructor, val); } if(arg->IsNumber()) { - jdouble val = arg->ToNumber()->Value(); + jdouble val = Nan::To(arg).FromJust(); jclass clazz = env->FindClass("java/lang/Double"); jmethodID constructor = env->GetMethodID(clazz, "", "(D)V"); return env->NewObject(clazz, constructor, val); } if(arg->IsBoolean()) { - jboolean val = arg->ToBoolean()->Value(); + jboolean val = Nan::To(arg).FromJust(); jclass clazz = env->FindClass("java/lang/Boolean"); jmethodID constructor = env->GetMethodID(clazz, "", "(Z)V"); return env->NewObject(clazz, constructor, val); diff --git a/test/dynamicProxy-test.js b/test/dynamicProxy-test.js index 4ca9d335..aef5fab7 100644 --- a/test/dynamicProxy-test.js +++ b/test/dynamicProxy-test.js @@ -237,7 +237,7 @@ exports['Dynamic Proxy'] = nodeunit.testCase({ test.fail("Exception was not thrown"); } catch (e) { test.equals(e.cause.getClassSync().getNameSync(), "java.lang.RuntimeException"); - test.ok(/Caused by: node\.NodeJsException: myError/.test(e.message)); + test.ok(/Caused by: node\.NodeJsException:.*myError/.test(e.message)); } test.done(); @@ -256,7 +256,7 @@ exports['Dynamic Proxy'] = nodeunit.testCase({ test.fail("Exception was not thrown"); } catch (e) { test.equals(e.cause.getClassSync().getNameSync(), "java.lang.RuntimeException"); - test.ok(/Caused by: node\.NodeJsException: Error: newError/.test(e.message)); + test.ok(/Caused by: node\.NodeJsException:.*newError/.test(e.message)); } test.done();