diff --git a/package.json b/package.json index 04a2c03e..dc9bacd8 100644 --- a/package.json +++ b/package.json @@ -26,11 +26,11 @@ "url": "https://github.com/joeferner/node-java.git" }, "dependencies": { - "async": "0.9.0", + "async": "1.5.2", "find-java-home": "0.1.2", - "glob": "5.0.5", - "lodash": "3.7.0", - "nan": "2.0.9" + "glob": "7.0.3", + "lodash": "4.11.1", + "nan": "2.3.2" }, "devDependencies": { "chalk": "1.0.0", diff --git a/src/javaObject.cpp b/src/javaObject.cpp index 32c876fe..97a3ec24 100644 --- a/src/javaObject.cpp +++ b/src/javaObject.cpp @@ -57,13 +57,15 @@ v8::Local baseMethodName = Nan::New(methodNameStr.c_str()).ToLocalChecked(); - v8::Local methodNameAsync = Nan::New((methodNameStr + java->AsyncSuffix()).c_str()).ToLocalChecked(); + std::string methodNameAsyncStr = methodNameStr; + const char* methodNameAsync = methodNameAsyncStr.append(java->AsyncSuffix()).c_str(); v8::Local methodCallTemplate = Nan::New(methodCall, baseMethodName); - funcTemplate->PrototypeTemplate()->Set(methodNameAsync, methodCallTemplate->GetFunction()); + Nan::SetPrototypeTemplate(funcTemplate, methodNameAsync, methodCallTemplate); - v8::Local methodNameSync = Nan::New((methodNameStr + java->SyncSuffix()).c_str()).ToLocalChecked(); + std::string methodNameSyncStr = methodNameStr; + const char* methodNameSync = methodNameSyncStr.append(java->SyncSuffix()).c_str(); v8::Local methodCallSyncTemplate = Nan::New(methodCallSync, baseMethodName); - funcTemplate->PrototypeTemplate()->Set(methodNameSync, methodCallSyncTemplate->GetFunction()); + Nan::SetPrototypeTemplate(funcTemplate, methodNameSync, methodCallSyncTemplate); if (java->DoPromise()) { v8::Local recv = Nan::New(); @@ -74,8 +76,10 @@ assert(result->IsFunction()); } v8::Local promFunction = result.As(); - v8::Local methodNamePromise = Nan::New((methodNameStr + java->PromiseSuffix()).c_str()).ToLocalChecked(); - funcTemplate->PrototypeTemplate()->Set(methodNamePromise, promFunction); + v8::Local promFunctionTemplate = Nan::New(methodCallPromise, promFunction); + std::string methodNamePromiseStr = methodNameStr; + const char* methodNamePromise = methodNamePromiseStr.append(java->PromiseSuffix()).c_str(); + Nan::SetPrototypeTemplate(funcTemplate, methodNamePromise, promFunctionTemplate); } } @@ -202,6 +206,21 @@ NAN_METHOD(JavaObject::methodCallSync) { info.GetReturnValue().Set(result); } +NAN_METHOD(JavaObject::methodCallPromise) { + Nan::HandleScope scope; + v8::Local fn = info.Data().As(); + v8::Handle* argv = new v8::Handle[info.Length()]; + for (int i = 0 ; i < info.Length(); i++) { + argv[i] = info[i]; + } + + v8::Local result = fn->Call(info.This(), info.Length(), argv); + + delete[] argv; + + info.GetReturnValue().Set(result); +} + NAN_GETTER(JavaObject::fieldGetter) { Nan::HandleScope scope; JavaObject* self = Nan::ObjectWrap::Unwrap(info.This()); @@ -317,9 +336,7 @@ NAN_INDEX_GETTER(JavaObject::indexGetter) { t->InstanceTemplate()->SetInternalFieldCount(1); t->SetClassName(Nan::New("NodeDynamicProxy").ToLocalChecked()); - v8::Local methodName = Nan::New("unref").ToLocalChecked(); - v8::Local methodCallTemplate = Nan::New(doUnref); - t->PrototypeTemplate()->Set(methodName, methodCallTemplate->GetFunction()); + Nan::SetPrototypeTemplate(t, "unref", Nan::New(doUnref)); v8::Local fieldName = Nan::New("invocationHandler").ToLocalChecked(); Nan::SetAccessor(t->InstanceTemplate(), fieldName, invocationHandlerGetter); diff --git a/src/javaObject.h b/src/javaObject.h index dc36fbd2..cbf49e6f 100644 --- a/src/javaObject.h +++ b/src/javaObject.h @@ -30,6 +30,7 @@ class JavaObject : public Nan::ObjectWrap { private: static NAN_METHOD(methodCall); static NAN_METHOD(methodCallSync); + static NAN_METHOD(methodCallPromise); static NAN_GETTER(fieldGetter); static NAN_SETTER(fieldSetter); static NAN_INDEX_GETTER(indexGetter); diff --git a/testAsyncOptions/testAllThreeSuffix.js b/testAsyncOptions/testAllThreeSuffix.js index 32f7cd94..946e6210 100644 --- a/testAsyncOptions/testAllThreeSuffix.js +++ b/testAsyncOptions/testAllThreeSuffix.js @@ -20,11 +20,10 @@ module.exports = { test.ok(arrayList); test.ok(java.instanceOf(arrayList, "java.util.ArrayList")); - var api = _.functions(arrayList); - test.ok(_.includes(api, 'addSync'), 'Expected `addSync` to be present, but it is NOT.'); - test.ok(_.includes(api, 'addAsync'), 'Expected `addAsync` to be present, but it is NOT.'); - test.ok(_.includes(api, 'addPromise'), 'Expected addPromise to be present, but it is NOT.'); - test.ok(!_.includes(api, 'add'), 'Expected add to NOT be present, but it is.'); + test.ok(!_.isUndefined(arrayList.addSync), 'Expected `addSync` to be present, but it is NOT.'); + test.ok(!_.isUndefined(arrayList.addAsync), 'Expected `addAsync` to be present, but it is NOT.'); + test.ok(!_.isUndefined(arrayList.addPromise), 'Expected `addPromise` to be present, but it is NOT.'); + test.ok(_.isUndefined(arrayList.add), 'Expected `add` to NOT be present, but it is.'); test.done(); }, diff --git a/testAsyncOptions/testAsyncSuffixSyncDefault.js b/testAsyncOptions/testAsyncSuffixSyncDefault.js index 6cc50ab3..0e4bde6a 100644 --- a/testAsyncOptions/testAsyncSuffixSyncDefault.js +++ b/testAsyncOptions/testAsyncSuffixSyncDefault.js @@ -41,10 +41,9 @@ module.exports = { test.ok(arrayList); test.ok(java.instanceOf(arrayList, "java.util.ArrayList")); - var api = _.functions(arrayList); - test.ok(_.includes(api, 'addAsync'), 'Expected `addAsync` to be present, but it is NOT.'); - test.ok(_.includes(api, 'add'), 'Expected `add` to be present, but it is NOT.'); - test.ok(!_.includes(api, 'addPromise'), 'Expected addPromise to NOT be present, but it is.'); + test.ok(!_.isUndefined(arrayList.addAsync), 'Expected `addAsync` to be present, but it is NOT.'); + test.ok(!_.isUndefined(arrayList.add), 'Expected `add` to be present, but it is NOT.'); + test.ok(_.isUndefined(arrayList.addPromise), 'Expected `addPromise` to NOT be present, but it is.'); test.done(); }, diff --git a/testAsyncOptions/testDefacto.js b/testAsyncOptions/testDefacto.js index 67967f4b..e94e13b6 100644 --- a/testAsyncOptions/testDefacto.js +++ b/testAsyncOptions/testDefacto.js @@ -49,10 +49,9 @@ module.exports = { test.ok(arrayList); test.ok(java.instanceOf(arrayList, "java.util.ArrayList")); - var api = _.functions(arrayList); - test.ok(_.includes(api, 'addSync'), 'Expected `addSync` to be present, but it is NOT.'); - test.ok(_.includes(api, 'add'), 'Expected `add` to be present, but it is NOT.'); - test.ok(!_.includes(api, 'addPromise'), 'Expected addPromise to NOT be present, but it is.'); + test.ok(!_.isUndefined(arrayList.addSync), 'Expected `addSync` to be present, but it is NOT.'); + test.ok(!_.isUndefined(arrayList.add), 'Expected `add` to be present, but it is NOT.'); + test.ok(_.isUndefined(arrayList.addPromise), 'Expected `addPromise` to NOT be present, but it is.'); test.done(); }, diff --git a/testAsyncOptions/testDefactoPlusPromise.js b/testAsyncOptions/testDefactoPlusPromise.js index 4bbf2710..d6c33810 100644 --- a/testAsyncOptions/testDefactoPlusPromise.js +++ b/testAsyncOptions/testDefactoPlusPromise.js @@ -46,10 +46,9 @@ module.exports = { test.ok(arrayList); test.ok(java.instanceOf(arrayList, "java.util.ArrayList")); - var api = _.functions(arrayList); - test.ok(_.includes(api, 'addSync'), 'Expected `addSync` to be present, but it is NOT.'); - test.ok(_.includes(api, 'add'), 'Expected `add` to be present, but it is NOT.'); - test.ok(_.includes(api, 'addPromise'), 'Expected `addPromise` to be present, but it is NOT.'); + test.ok(!_.isUndefined(arrayList.addSync), 'Expected `addSync` to be present, but it is NOT.'); + test.ok(!_.isUndefined(arrayList.add), 'Expected `add` to be present, but it is NOT.'); + test.ok(!_.isUndefined(arrayList.addPromise), 'Expected `addPromise` to be present, but it is NOT.'); test.done(); }, diff --git a/testAsyncOptions/testDefault.js b/testAsyncOptions/testDefault.js index 8ac92c18..4bdc8e71 100644 --- a/testAsyncOptions/testDefault.js +++ b/testAsyncOptions/testDefault.js @@ -16,10 +16,9 @@ module.exports = { test.ok(arrayList); test.ok(java.instanceOf(arrayList, "java.util.ArrayList")); - var api = _.functions(arrayList); - test.ok(_.includes(api, 'addSync'), 'Expected `addSync` to be present, but it is NOT.'); - test.ok(_.includes(api, 'add'), 'Expected `add` to be present, but it is NOT.'); - test.ok(!_.includes(api, 'addPromise'), 'Expected addPromise to NOT be present, but it is.'); + test.ok(!_.isUndefined(arrayList.addSync), 'Expected `addSync` to be present, but it is NOT.'); + test.ok(!_.isUndefined(arrayList.add), 'Expected `add` to be present, but it is NOT.'); + test.ok(_.isUndefined(arrayList.addPromise), 'Expected `addPromise` to NOT be present, but it is.'); test.done(); }, diff --git a/testAsyncOptions/testNoAsync.js b/testAsyncOptions/testNoAsync.js index 59e4c733..4f86a681 100644 --- a/testAsyncOptions/testNoAsync.js +++ b/testAsyncOptions/testNoAsync.js @@ -52,11 +52,10 @@ module.exports = { test.ok(arrayList); test.ok(java.instanceOf(arrayList, "java.util.ArrayList")); - var api = _.functions(arrayList); - test.ok(_.includes(api, 'addSync'), 'Expected `addSync` to be present, but it is NOT.'); - test.ok(_.includes(api, 'addPromise'), 'Expected `addPromise` to be present, but it is NOT.'); - test.ok(!_.includes(api, 'add'), 'Expected `add` to NOT be present, but it is.'); - test.ok(!_.includes(api, 'addAsync'), 'Expected `addAsync` to NOT be present, but it is.'); + test.ok(!_.isUndefined(arrayList.addSync), 'Expected `addSync` to be present, but it is NOT.'); + test.ok(!_.isUndefined(arrayList.addPromise), 'Expected `addPromise` to be present, but it is NOT.'); + test.ok(_.isUndefined(arrayList.add), 'Expected `add` to NOT be present, but it is.'); + test.ok(_.isUndefined(arrayList.addAsync), 'Expected `addAsync` to NOT be present, but it is.'); test.done(); }, diff --git a/testAsyncOptions/testSyncDefaultPlusPromise.js b/testAsyncOptions/testSyncDefaultPlusPromise.js index 578a374f..ebd30627 100644 --- a/testAsyncOptions/testSyncDefaultPlusPromise.js +++ b/testAsyncOptions/testSyncDefaultPlusPromise.js @@ -20,11 +20,10 @@ module.exports = { test.ok(arrayList); test.ok(java.instanceOf(arrayList, "java.util.ArrayList")); - var api = _.functions(arrayList); - test.ok(_.includes(api, 'add'), 'Expected `add` to be present, but it is NOT.'); - test.ok(_.includes(api, 'addP'), 'Expected `addP` to be present, but it is NOT.'); - test.ok(!_.includes(api, 'addSync'), 'Expected `addSync` to NOT be present, but it is.'); - test.ok(!_.includes(api, 'addAsync'), 'Expected `addAsync` to NOT be present, but it is.'); + test.ok(!_.isUndefined(arrayList.add), 'Expected `add` to be present, but it is NOT.'); + test.ok(!_.isUndefined(arrayList.addP), 'Expected `addP` to be present, but it is NOT.'); + test.ok(_.isUndefined(arrayList.addSync), 'Expected `addSync` to NOT be present, but it is.'); + test.ok(_.isUndefined(arrayList.addAsync), 'Expected `addAsync` to NOT be present, but it is.'); test.done(); },