FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
node-java/src-cpp/utils.h at master · joeferner/node-java · GitHub
joeferner
/
node-java
Public
Notifications
You must be signed in to change notification settings
Fork
288
Star
1.9k
Code
Issues
208
Pull requests
7
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
node-java
/
src-cpp
/
utils.h
Copy path
More file actions
More file actions
Latest commit
History
History
History
175 lines (150 loc) · 10.1 KB
Breadcrumbs
node-java
/
src-cpp
/
utils.h
Copy path
File metadata and controls
175 lines (150 loc) · 10.1 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#
ifndef
_utils_h_
#
define
_utils_h_
#
define
BUILDING_NODE_EXTENSION
1
#
include
<
jni.h
>
#
include
<
list
>
#
include
<
nan.h
>
#
include
<
string
>
#
include
<
uv.h
>
#
include
<
v8.h
>
#
include
<
vector
>
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<v8::Object> functions;
Nan::Persistent<v8::Value> 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<jobject> *methods,
bool
includeStatic);
void
javaReflectionGetConstructors
(JNIEnv *env, jclass clazz, std::list<jobject> *methods);
void
javaReflectionGetFields
(JNIEnv *env, jclass clazz, std::list<jobject> *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<v8::Value> arg);
v8::Local<v8::Value>
javaExceptionToV8
(Java *java, JNIEnv *env,
const
std::string &alternateMessage);
v8::Local<v8::Value>
javaExceptionToV8
(Java *java, JNIEnv *env, jthrowable ex,
const
std::string &alternateMessage);
std::string
javaExceptionToString
(JNIEnv *env, jthrowable ex);
void
checkJavaException
(JNIEnv *env);
v8::Local<v8::Value>
javaArrayToV8
(Java *java, JNIEnv *env, jobjectArray objArray);
v8::Local<v8::Value>
javaToV8
(Java *java, JNIEnv *env, jobject obj);
v8::Local<v8::Value>
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<v8::Value>
GetHiddenValue
(v8::Local<v8::Object> object, v8::Local<v8::String> key);
void
SetHiddenValue
(v8::Local<v8::Object> object, v8::Local<v8::String> key, v8::Local<v8::Value> value);
void
SetHiddenValue
(v8::NumberObject *, v8::Local<v8::String> key, v8::Local<v8::Value> 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 <<
"
Argument
"
<< (argsStart +
1
) <<
"
must be an object
"
; \
Nan::ThrowError
(
Nan::TypeError
(errStr.
str
().
c_str
())); \
return
; \
} \
v8::Local<v8::Object>
ARGNAME
= v8::Local<v8::Object>::Cast(info[argsStart]); \
argsStart++;
#
define
ARGS_FRONT_STRING
(
ARGNAME
) \
if
(info.Length() < argsStart +
1
|| !info[argsStart]->
IsString
()) { \
std::ostringstream errStr; \
errStr <<
"
Argument
"
<< (argsStart +
1
) <<
"
must be a string
"
; \
Nan::ThrowError
(
Nan::TypeError
(errStr.
str
().
c_str
())); \
return
; \
} \
v8::Local<v8::String> _##
ARGNAME
##_obj = v8::Local<v8::String>::Cast(info[argsStart]); \
Nan::Utf8String _##
ARGNAME
##_val(_##
ARGNAME
##_obj); \
std::string
ARGNAME
= *_##
ARGNAME
##_val; \
argsStart++;
#
define
ARGS_FRONT_CLASSNAME
()
ARGS_FRONT_STRING
(className)
#
define
ARGS_BACK_CALLBACK
() \
bool
callbackProvided; \
v8::Local<v8::Value> callback; \
if
(info[info.Length() -
1
]->
IsFunction
()) { \
callback = info[argsEnd -
1
]; \
argsEnd--; \
callbackProvided =
true
; \
}
else
{ \
callback =
Nan::Null
(); \
callbackProvided =
false
; \
}
#
define
EXCEPTION_CALL_CALLBACK
(
JAVA, STRBUILDER
) \
std::ostringstream errStr; \
errStr <<
STRBUILDER
; \
v8::Local<v8::Value> error = javaExceptionToV8(
JAVA
, env, errStr.str()); \
v8::Local<v8::Value> argv[
2
]; \
argv[
0
] = error; \
argv[
1
] = Nan::Undefined(); \
Nan::Call
(callback.As<v8::Function>(), Nan::GetCurrentContext()->Global(), 2, argv);
#
define
END_CALLBACK_FUNCTION
(
MSG
) \
if
(callbackProvided) { \
info.
GetReturnValue
().
SetUndefined
(); \
return
; \
}
else
{ \
std::ostringstream str; \
str <<
MSG
; \
info.
GetReturnValue
().
Set
(
Nan::New
(str.
str
().
c_str
()).
ToLocalChecked
()); \
return
; \
}
#
ifndef
UNUSED_VARIABLE
#
define
UNUSED_VARIABLE
(
a
) a = a;
#
endif
#
endif
Back
|
FazBrowse Home
|
New Git URL