#ifndef _node_java_h_ #define _node_java_h_ #include #include #include #include #include #ifdef JNI_VERSION_1_8 #define JNI_BEST_VERSION JNI_VERSION_1_8 #else #define JNI_BEST_VERSION JNI_VERSION_1_6 #endif class Java : public Nan::ObjectWrap { public: static void Init(v8::Handle<:object> target); JavaVM* getJvm() { return m_jvm; } JNIEnv* getJavaEnv() { return m_env; } // can only be used safely by the main thread as this is the thread it belongs to jobject getClassLoader() { return m_classLoader; } public: bool DoSync() const { return doSync; } bool DoAsync() const { return doAsync; } bool DoPromise() const { return doPromise; } std::string SyncSuffix() const { return m_SyncSuffix; } std::string AsyncSuffix() const { return m_AsyncSuffix; } std::string PromiseSuffix() const { return m_PromiseSuffix; } private: Java(); ~Java(); v8::Local<:value> createJVM(JavaVM** jvm, JNIEnv** env); void destroyJVM(JavaVM** jvm, JNIEnv** env); void configureAsync(v8::Local<:value>& asyncOptions); static NAN_METHOD(New); static NAN_METHOD(getClassLoader); static NAN_METHOD(newInstance); static NAN_METHOD(newInstanceSync); static NAN_METHOD(newProxy); static NAN_METHOD(callStaticMethod); static NAN_METHOD(callStaticMethodSync); static NAN_METHOD(callMethod); static NAN_METHOD(callMethodSync); static NAN_METHOD(findClassSync); static NAN_METHOD(newArray); static NAN_METHOD(newByte); static NAN_METHOD(newChar); static NAN_METHOD(newShort); static NAN_METHOD(newLong); static NAN_METHOD(newFloat); static NAN_METHOD(newDouble); static NAN_METHOD(getStaticFieldValue); static NAN_METHOD(setStaticFieldValue); static NAN_METHOD(instanceOf); static NAN_GETTER(AccessorProhibitsOverwritingGetter); static NAN_SETTER(AccessorProhibitsOverwritingSetter); v8::Local<:value> ensureJvm(); static Nan::Persistent<:functiontemplate> s_ct; JavaVM* m_jvm; JNIEnv* m_env; // can only be used safely by the main thread as this is the thread it belongs to jobject m_classLoader; std::string m_classPath; static std::string s_nativeBindingLocation; Nan::Persistent<:array> m_classPathArray; Nan::Persistent<:array> m_optionsArray; Nan::Persistent<:object> m_asyncOptions; std::string m_SyncSuffix; std::string m_AsyncSuffix; std::string m_PromiseSuffix; bool doSync; bool doAsync; bool doPromise; }; #endif