GitHub Viewer
#ifndef _utils_h_
#define _utils_h_
#define BUILDING_NODE_EXTENSION 1
#include
#include
#include
#include
#include
#include
#include
class Java;
#define V8_HIDDEN_MARKER_JAVA_LONG "__isJavaLong"
#define V8_HIDDEN_MARKER_JAVA_OBJECT "__isJavaObject"
#if NODE_MAJOR_VERSION >= 23
#define RETURN_INTERCEPTED_YES return v8::Intercepted::kYes
#define RETURN_INTERCEPTED_NO return v8::Intercepted::kNo
#else
#define RETURN_INTERCEPTED_YES return
#define RETURN_INTERCEPTED_NO return
#endif
typedef enum _jvalueType {
TYPE_VOID = 1,
TYPE_INT = 2,
TYPE_LONG = 3,
TYPE_OBJECT = 4,
TYPE_STRING = 5,
TYPE_BOOLEAN = 6,
TYPE_SHORT = 7,
TYPE_BYTE = 8,
TYPE_DOUBLE = 9,
TYPE_FLOAT = 10,
TYPE_ARRAY = 11,
TYPE_CHAR = 12
} jvalueType;
struct DynamicProxyData {
unsigned int markerStart;
Java *java;
std::string interfaceName;
Nan::Persistent functions;
Nan::Persistent jsObject;
unsigned int markerEnd;
};
struct DynamicProxyJsCallData {
DynamicProxyData *dynamicProxyData;
std::string methodName;
jobjectArray args;
jobject result;
std::string throwableClass;
std::string throwableMessage;
int done;
};
#define DYNAMIC_PROXY_DATA_MARKER_START 0x12345678
#define DYNAMIC_PROXY_DATA_MARKER_END 0x87654321
int dynamicProxyDataVerify(DynamicProxyData *data);
void javaReflectionGetMethods(JNIEnv *env, jclass clazz, std::list *methods, bool includeStatic);
void javaReflectionGetConstructors(JNIEnv *env, jclass clazz, std::list *methods);
void javaReflectionGetFields(JNIEnv *env, jclass clazz, std::list *fields);
std::string javaToString(JNIEnv *env, jstring str);
std::string javaObjectToString(JNIEnv *env, jobject obj);
std::string javaArrayToString(JNIEnv *env, jobjectArray arr);
std::string javaMethodCallToString(JNIEnv *env, jobject obj, jmethodID methodId, jarray args);
JNIEnv *javaGetEnv(JavaVM *jvm, jobject classLoader);
jobject getSystemClassLoader(JNIEnv *env);
jvalueType javaGetArrayComponentType(JNIEnv *env, jobjectArray array);
jvalueType javaGetType(JNIEnv *env, jclass type);
jobjectArray v8ToJava(JNIEnv *env, Nan::NAN_METHOD_ARGS_TYPE args, int start, int end);
jobject v8ToJava(JNIEnv *env, v8::Local arg);
v8::Local javaExceptionToV8(Java *java, JNIEnv *env, const std::string &alternateMessage);
v8::Local javaExceptionToV8(Java *java, JNIEnv *env, jthrowable ex, const std::string &alternateMessage);
std::string javaExceptionToString(JNIEnv *env, jthrowable ex);
void checkJavaException(JNIEnv *env);
v8::Local javaArrayToV8(Java *java, JNIEnv *env, jobjectArray objArray);
v8::Local javaToV8(Java *java, JNIEnv *env, jobject obj);
v8::Local javaToV8(Java *java, JNIEnv *env, jobject obj, DynamicProxyData *dynamicProxyData);
jobjectArray javaObjectArrayToClasses(JNIEnv *env, jobjectArray objs);
jobject longToJavaLongObj(JNIEnv *env, jlong l);
jarray javaGetArgsForMethod(JNIEnv *env, jobject method, jarray args);
jarray javaGetArgsForConstructor(JNIEnv *env, jobject method, jarray args);
jclass javaFindClass(JNIEnv *env, const std::string &className);
jobject javaFindField(JNIEnv *env, jclass clazz, const std::string &fieldName);
jobject javaFindMethod(JNIEnv *env, jclass clazz, const std::string &methodName, jobjectArray methodArgs);
jobject javaFindConstructor(JNIEnv *env, jclass clazz, jobjectArray methodArgs);
void javaCastArguments(JNIEnv *env, jobjectArray methodArgs, jobject method);
// TODO remove these functions after node nan gets updated
v8::Local GetHiddenValue(v8::Local object, v8::Local key);
void SetHiddenValue(v8::Local object, v8::Local key, v8::Local value);
void SetHiddenValue(v8::NumberObject *, v8::Local key, v8::Local value);
#define assertNoException(env) \
if (env->ExceptionCheck()) { \
env->ExceptionDescribe(); \
assert(false); \
}
std::string methodNotFoundToString(JNIEnv *env, jclass clazz, const std::string &methodNameSig, bool constructor,
Nan::NAN_METHOD_ARGS_TYPE args, int argStart, int argEnd);
void unref(DynamicProxyData *dynamicProxyData);
#define UNUSED_VARIABLE(var) var = var;
#define ARGS_FRONT_OBJECT(ARGNAME) \
if (info.Length() < argsStart + 1 || !info[argsStart]->IsObject()) { \
std::ostringstream errStr; \
errStr