Skip to content

Commit 2f75d99

Browse files
joefernerjsdevel
authored andcommitted
start the refactor to using nan
1 parent 696e086 commit 2f75d99

7 files changed

Lines changed: 215 additions & 210 deletions

File tree

binding.gyp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
],
3030
'include_dirs': [
3131
'<(javahome)/include',
32+
"<!(node -e \"require('nan')\")",
3233
],
3334
'cflags': ['-O3'],
3435
'conditions': [

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
},
2828
"dependencies": {
2929
"find-java-home": "0.1.1",
30-
"glob": "~3.2.9"
30+
"glob": "~3.2.9",
31+
"nan": "^0.8.0"
3132
},
3233
"devDependencies": {
3334
"nodeunit": "~0.6.4",

src/java.cpp

Lines changed: 167 additions & 166 deletions
Large diffs are not rendered by default.

src/java.h

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <node.h>
77
#include <jni.h>
88
#include <string>
9+
#include <nan.h>
910

1011
class Java : public node::ObjectWrap {
1112
public:
@@ -20,26 +21,26 @@ class Java : public node::ObjectWrap {
2021
v8::Handle<v8::Value> createJVM(JavaVM** jvm, JNIEnv** env);
2122
void destroyJVM(JavaVM** jvm, JNIEnv** env);
2223

23-
static v8::Handle<v8::Value> New(const v8::Arguments& args);
24-
static v8::Handle<v8::Value> getClassLoader(const v8::Arguments& args);
25-
static v8::Handle<v8::Value> newInstance(const v8::Arguments& args);
26-
static v8::Handle<v8::Value> newInstanceSync(const v8::Arguments& args);
27-
static v8::Handle<v8::Value> newProxy(const v8::Arguments& args);
28-
static v8::Handle<v8::Value> callStaticMethod(const v8::Arguments& args);
29-
static v8::Handle<v8::Value> callStaticMethodSync(const v8::Arguments& args);
30-
static v8::Handle<v8::Value> findClassSync(const v8::Arguments& args);
31-
static v8::Handle<v8::Value> newArray(const v8::Arguments& args);
32-
static v8::Handle<v8::Value> newByte(const v8::Arguments& args);
33-
static v8::Handle<v8::Value> newChar(const v8::Arguments& args);
34-
static v8::Handle<v8::Value> newShort(const v8::Arguments& args);
35-
static v8::Handle<v8::Value> newLong(const v8::Arguments& args);
36-
static v8::Handle<v8::Value> newFloat(const v8::Arguments& args);
37-
static v8::Handle<v8::Value> newDouble(const v8::Arguments& args);
38-
static v8::Handle<v8::Value> getStaticFieldValue(const v8::Arguments& args);
39-
static v8::Handle<v8::Value> setStaticFieldValue(const v8::Arguments& args);
40-
static v8::Handle<v8::Value> instanceOf(const v8::Arguments& args);
41-
static v8::Handle<v8::Value> AccessorProhibitsOverwritingGetter(v8::Local<v8::String> name, const v8::AccessorInfo &info);
42-
static void AccessorProhibitsOverwritingSetter(v8::Local<v8::String> property, v8::Local<v8::Value> value, const v8::AccessorInfo &info);
24+
static NAN_METHOD(New);
25+
static NAN_METHOD(getClassLoader);
26+
static NAN_METHOD(newInstance);
27+
static NAN_METHOD(newInstanceSync);
28+
static NAN_METHOD(newProxy);
29+
static NAN_METHOD(callStaticMethod);
30+
static NAN_METHOD(callStaticMethodSync);
31+
static NAN_METHOD(findClassSync);
32+
static NAN_METHOD(newArray);
33+
static NAN_METHOD(newByte);
34+
static NAN_METHOD(newChar);
35+
static NAN_METHOD(newShort);
36+
static NAN_METHOD(newLong);
37+
static NAN_METHOD(newFloat);
38+
static NAN_METHOD(newDouble);
39+
static NAN_METHOD(getStaticFieldValue);
40+
static NAN_METHOD(setStaticFieldValue);
41+
static NAN_METHOD(instanceOf);
42+
static NAN_GETTER(AccessorProhibitsOverwritingGetter);
43+
static NAN_SETTER(AccessorProhibitsOverwritingSetter);
4344
v8::Handle<v8::Value> ensureJvm();
4445

4546
static v8::Persistent<v8::FunctionTemplate> s_ct;

src/javaObject.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
}
1313

1414
/*static*/ v8::Local<v8::Object> JavaObject::New(Java *java, jobject obj) {
15-
v8::HandleScope scope;
15+
NanScope();
1616

1717
JNIEnv *env = java->getJavaEnv();
1818
JavaScope javaScope(env);
@@ -79,7 +79,7 @@
7979
JavaObject *self = new JavaObject(java, obj);
8080
self->Wrap(javaObjectObj);
8181

82-
return scope.Close(javaObjectObj);
82+
NanReturnValue(javaObjectObj);
8383
}
8484

8585
JavaObject::JavaObject(Java *java, jobject obj) {
@@ -107,8 +107,8 @@ JavaObject::~JavaObject() {
107107
env->DeleteGlobalRef(m_class);
108108
}
109109

110-
/*static*/ v8::Handle<v8::Value> JavaObject::methodCall(const v8::Arguments& args) {
111-
v8::HandleScope scope;
110+
NAN_METHOD(JavaObject::methodCall) {
111+
NanScope();
112112
JavaObject* self = node::ObjectWrap::Unwrap<JavaObject>(args.This());
113113
JNIEnv *env = self->m_java->getJavaEnv();
114114
JavaScope javaScope(env);
@@ -142,8 +142,8 @@ JavaObject::~JavaObject() {
142142
END_CALLBACK_FUNCTION("\"Method '" << methodNameStr << "' called without a callback did you mean to use the Sync version?\"");
143143
}
144144

145-
/*static*/ v8::Handle<v8::Value> JavaObject::methodCallSync(const v8::Arguments& args) {
146-
v8::HandleScope scope;
145+
NAN_METHOD(JavaObject::methodCallSync) {
146+
NanScope();
147147
JavaObject* self = node::ObjectWrap::Unwrap<JavaObject>(args.This());
148148
JNIEnv *env = self->m_java->getJavaEnv();
149149
JavaScope javaScope(env);
@@ -173,11 +173,11 @@ JavaObject::~JavaObject() {
173173
return ThrowException(result);
174174
}
175175

176-
return scope.Close(result);
176+
NanReturnValue(result);
177177
}
178178

179-
/*static*/ v8::Handle<v8::Value> JavaObject::fieldGetter(v8::Local<v8::String> property, const v8::AccessorInfo& info) {
180-
v8::HandleScope scope;
179+
NAN_GETTER(JavaObject::fieldGetter) {
180+
NanScope();
181181
JavaObject* self = node::ObjectWrap::Unwrap<JavaObject>(info.This());
182182
JNIEnv *env = self->m_java->getJavaEnv();
183183
JavaScope javaScope(env);
@@ -206,11 +206,11 @@ JavaObject::~JavaObject() {
206206

207207
v8::Handle<v8::Value> result = javaToV8(self->m_java, env, val);
208208

209-
return scope.Close(result);
209+
NanReturnValue(result);
210210
}
211211

212-
/*static*/ void JavaObject::fieldSetter(v8::Local<v8::String> property, v8::Local<v8::Value> value, const v8::AccessorInfo& info) {
213-
v8::HandleScope scope;
212+
NAN_SETTER(JavaObject::fieldSetter) {
213+
NanScope();
214214
JavaObject* self = node::ObjectWrap::Unwrap<JavaObject>(info.This());
215215
JNIEnv *env = self->m_java->getJavaEnv();
216216
JavaScope javaScope(env);

src/javaObject.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ class JavaObject : public node::ObjectWrap {
2525
private:
2626
JavaObject(Java* java, jobject obj);
2727
~JavaObject();
28-
static v8::Handle<v8::Value> methodCall(const v8::Arguments& args);
29-
static v8::Handle<v8::Value> methodCallSync(const v8::Arguments& args);
30-
static v8::Handle<v8::Value> fieldGetter(v8::Local<v8::String> property, const v8::AccessorInfo& info);
31-
static void fieldSetter(v8::Local<v8::String> property, v8::Local<v8::Value> value, const v8::AccessorInfo& info);
28+
static NAN_METHOD(methodCall);
29+
static NAN_METHOD(methodCallSync);
30+
static NAN_GETTER(fieldGetter);
31+
static NAN_SETTER(fieldSetter);
3232

3333
static std::map<std::string, v8::Persistent<v8::FunctionTemplate> > sFunctionTemplates;
3434
Java* m_java;

src/utils.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <vector>
1010
#include <string>
1111
#include <uv.h>
12+
#include <nan.h>
1213

1314
class Java;
1415

@@ -60,7 +61,7 @@ JNIEnv* javaGetEnv(JavaVM* jvm, jobject classLoader);
6061
jobject getSystemClassLoader(JNIEnv *env);
6162
jvalueType javaGetArrayComponentType(JNIEnv *env, jobjectArray array);
6263
jvalueType javaGetType(JNIEnv *env, jclass type);
63-
jobjectArray v8ToJava(JNIEnv* env, const v8::Arguments& args, int start, int end);
64+
jobjectArray v8ToJava(JNIEnv* env, _NAN_METHOD_ARGS_TYPE args, int start, int end);
6465
jobject v8ToJava(JNIEnv* env, v8::Local<v8::Value> arg);
6566
v8::Handle<v8::Value> javaExceptionToV8(Java* java, JNIEnv* env, const std::string& alternateMessage);
6667
v8::Handle<v8::Value> javaExceptionToV8(Java* java, JNIEnv* env, jthrowable ex, const std::string& alternateMessage);
@@ -76,15 +77,15 @@ jobject javaFindField(JNIEnv* env, jclass clazz, std::string& fieldName);
7677
jobject javaFindMethod(JNIEnv *env, jclass clazz, std::string& methodName, jobjectArray methodArgs);
7778
jobject javaFindConstructor(JNIEnv *env, jclass clazz, jobjectArray methodArgs);
7879

79-
std::string methodNotFoundToString(JNIEnv *env, jclass clazz, std::string methodName, bool constructor, const v8::Arguments& args, int argStart, int argEnd);
80+
std::string methodNotFoundToString(JNIEnv *env, jclass clazz, std::string methodName, bool constructor, _NAN_METHOD_ARGS_TYPE args, int argStart, int argEnd);
8081

8182
#define UNUSED_VARIABLE(var) var = var;
8283

8384
#define ARGS_FRONT_OBJECT(ARGNAME) \
8485
if(args.Length() < argsStart+1 || !args[argsStart]->IsObject()) { \
8586
std::ostringstream errStr; \
8687
errStr << "Argument " << (argsStart+1) << " must be an object"; \
87-
return ThrowException(v8::Exception::TypeError(v8::String::New(errStr.str().c_str()))); \
88+
return NanThrowError(v8::Exception::TypeError(v8::String::New(errStr.str().c_str()))); \
8889
} \
8990
v8::Local<v8::Object> ARGNAME = v8::Local<v8::Object>::Cast(args[argsStart]); \
9091
argsStart++;
@@ -93,11 +94,11 @@ std::string methodNotFoundToString(JNIEnv *env, jclass clazz, std::string method
9394
if(args.Length() < argsStart+1 || !args[argsStart]->IsString()) { \
9495
std::ostringstream errStr; \
9596
errStr << "Argument " << (argsStart+1) << " must be a string"; \
96-
return ThrowException(v8::Exception::TypeError(v8::String::New(errStr.str().c_str()))); \
97+
return NanThrowError(v8::Exception::TypeError(v8::String::New(errStr.str().c_str()))); \
9798
} \
9899
v8::Local<v8::String> _##ARGNAME##_obj = v8::Local<v8::String>::Cast(args[argsStart]); \
99100
v8::String::AsciiValue _##ARGNAME##_val(_##ARGNAME##_obj); \
100-
std::string ARGNAME = *_##ARGNAME##_val; \
101+
std::string ARGNAME = *_##ARGNAME##_val; \
101102
argsStart++;
102103

103104
#define ARGS_FRONT_CLASSNAME() ARGS_FRONT_STRING(className)
@@ -125,11 +126,11 @@ std::string methodNotFoundToString(JNIEnv *env, jclass clazz, std::string method
125126

126127
#define END_CALLBACK_FUNCTION(MSG) \
127128
if(callbackProvided) { \
128-
return v8::Undefined(); \
129+
NanReturnUndefined(); \
129130
} else { \
130131
std::ostringstream str; \
131132
str << MSG; \
132-
return scope.Close(v8::String::New(str.str().c_str())); \
133+
NanReturnValue(v8::String::New(str.str().c_str())); \
133134
}
134135

135136
#ifndef UNUSED_VARIABLE

0 commit comments

Comments
 (0)