Skip to content

Commit b6c0577

Browse files
committed
Replace Get/SetHiddenValue latest versions of V8 has removed them
1 parent 1d81ab0 commit b6c0577

3 files changed

Lines changed: 58 additions & 6 deletions

File tree

src/javaObject.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@
114114

115115
v8::Local<v8::Function> ctor = funcTemplate->GetFunction();
116116
v8::Local<v8::Object> javaObjectObj = ctor->NewInstance();
117-
javaObjectObj->SetHiddenValue(Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_OBJECT).ToLocalChecked(), Nan::New<v8::Boolean>(true));
117+
SetHiddenValue(javaObjectObj, Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_OBJECT).ToLocalChecked(), Nan::New<v8::Boolean>(true));
118118
JavaObject *self = new JavaObject(java, obj);
119119
self->Wrap(javaObjectObj);
120120

@@ -347,7 +347,7 @@ v8::Local<v8::Object> JavaProxyObject::New(Java *java, jobject obj, DynamicProxy
347347

348348
v8::Local<v8::Function> ctor = Nan::New(s_proxyCt)->GetFunction();
349349
v8::Local<v8::Object> javaObjectObj = ctor->NewInstance();
350-
javaObjectObj->SetHiddenValue(Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_OBJECT).ToLocalChecked(), Nan::New<v8::Boolean>(true));
350+
SetHiddenValue(javaObjectObj, Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_OBJECT).ToLocalChecked(), Nan::New<v8::Boolean>(true));
351351
JavaProxyObject *self = new JavaProxyObject(java, obj, dynamicProxyData);
352352
self->Wrap(javaObjectObj);
353353

src/utils.cpp

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ static std::string getArrayElementType(v8::Local<v8::Array> array, uint32_t arra
293293
}
294294
else if(arg->IsObject()) {
295295
v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(arg);
296-
v8::Local<v8::Value> isJavaLong = obj->GetHiddenValue(Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG).ToLocalChecked());
296+
v8::Local<v8::Value> isJavaLong = GetHiddenValue(obj, Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG).ToLocalChecked());
297297
if(!isJavaLong.IsEmpty() && isJavaLong->IsBoolean()) {
298298
types.insert(kLong);
299299
}
@@ -367,12 +367,12 @@ jobject v8ToJava(JNIEnv* env, v8::Local<v8::Value> arg) {
367367
if(arg->IsObject()) {
368368
v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(arg);
369369

370-
v8::Local<v8::Value> isJavaObject = obj->GetHiddenValue(Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_OBJECT).ToLocalChecked());
370+
v8::Local<v8::Value> isJavaObject = GetHiddenValue(obj, Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_OBJECT).ToLocalChecked());
371371
if(!isJavaObject.IsEmpty() && isJavaObject->IsBoolean()) {
372372
return v8ToJava_javaObject(env, obj);
373373
}
374374

375-
v8::Local<v8::Value> isJavaLong = obj->GetHiddenValue(Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG).ToLocalChecked());
375+
v8::Local<v8::Value> isJavaLong = GetHiddenValue(obj, Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG).ToLocalChecked());
376376
if(!isJavaLong.IsEmpty() && isJavaLong->IsBoolean()) {
377377
return v8ToJava_javaLong(env, obj);
378378
}
@@ -709,7 +709,7 @@ v8::Local<v8::Value> javaToV8(Java* java, JNIEnv* env, jobject obj, DynamicProxy
709709
v8::Local<v8::Value> v8Result = Nan::New<v8::NumberObject>((double)result);
710710
v8::NumberObject* v8ResultNumberObject = v8::NumberObject::Cast(*v8Result);
711711
v8ResultNumberObject->Set(Nan::New<v8::String>("longValue").ToLocalChecked(), Nan::New<v8::String>(strValue.c_str()).ToLocalChecked());
712-
v8ResultNumberObject->SetHiddenValue(Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG).ToLocalChecked(), Nan::New<v8::Boolean>(true));
712+
SetHiddenValue(v8ResultNumberObject, Nan::New<v8::String>(V8_HIDDEN_MARKER_JAVA_LONG).ToLocalChecked(), Nan::New<v8::Boolean>(true));
713713
return v8Result;
714714
}
715715
case TYPE_INT:
@@ -930,3 +930,50 @@ jarray javaGetArgsForConstructor(JNIEnv *env, jobject method, jarray args) {
930930
checkJavaException(env);
931931
return result;
932932
}
933+
934+
#if (NODE_MODULE_VERSION > 48)
935+
// The two methods below were copied from
936+
// https://github.com/electron/electron?branch=master&filepath=atom/common/api/atom_api_v8_util.cc
937+
// Copyright (c) 2013 GitHub, Inc.
938+
// Use of this source code is governed by the MIT license.
939+
940+
v8::Local<v8::Value> GetHiddenValue(v8::Local<v8::Object> object, v8::Local<v8::String> key) {
941+
v8::Local<v8::Context> context = v8::Isolate::GetCurrent()->GetCurrentContext();
942+
v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), key);
943+
v8::Local<v8::Value> value;
944+
v8::Maybe<bool> result = object->HasPrivate(context, privateKey);
945+
if (!(result.IsJust() && result.FromJust()))
946+
return v8::Local<v8::Value>();
947+
if (object->GetPrivate(context, privateKey).ToLocal(&value))
948+
return value;
949+
return v8::Local<v8::Value>();
950+
}
951+
952+
void SetHiddenValue(v8::NumberObject* object, v8::Local<v8::String> key, v8::Local<v8::Value> value) {
953+
if (value.IsEmpty())
954+
return;
955+
v8::Local<v8::Context> context = v8::Isolate::GetCurrent()->GetCurrentContext();
956+
v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), key);
957+
object->SetPrivate(context, privateKey, value);
958+
}
959+
960+
void SetHiddenValue(v8::Local<v8::Object> object, v8::Local<v8::String> key, v8::Local<v8::Value> value) {
961+
if (value.IsEmpty())
962+
return;
963+
v8::Local<v8::Context> context = v8::Isolate::GetCurrent()->GetCurrentContext();
964+
v8::Local<v8::Private> privateKey = v8::Private::ForApi(v8::Isolate::GetCurrent(), key);
965+
object->SetPrivate(context, privateKey, value);
966+
}
967+
#else
968+
v8::Local<v8::Value> GetHiddenValue(v8::Local<v8::Object> object, v8::Local<v8::String> key) {
969+
return object->GetHiddenValue(key);
970+
}
971+
972+
void SetHiddenValue(v8::NumberObject* object, v8::Local<v8::String> key, v8::Local<v8::Value> value) {
973+
object->SetHiddenValue(key, value);
974+
}
975+
976+
void SetHiddenValue(v8::Local<v8::Object> object, v8::Local<v8::String> key, v8::Local<v8::Value> value) {
977+
object->SetHiddenValue(key, value);
978+
}
979+
#endif

src/utils.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ jobject javaFindMethod(JNIEnv *env, jclass clazz, std::string& methodName, jobje
8282
jobject javaFindConstructor(JNIEnv *env, jclass clazz, jobjectArray methodArgs);
8383
void javaCastArguments(JNIEnv *env, jobjectArray methodArgs, jobject method);
8484

85+
// TODO remove these functions after node nan gets updated
86+
v8::Local<v8::Value> GetHiddenValue(v8::Local<v8::Object> object, v8::Local<v8::String> key);
87+
void SetHiddenValue(v8::Local<v8::Object> object, v8::Local<v8::String> key, v8::Local<v8::Value> value);
88+
void SetHiddenValue(v8::NumberObject*, v8::Local<v8::String> key, v8::Local<v8::Value> value);
89+
8590
#define assertNoException(env) \
8691
if (env->ExceptionCheck()) { \
8792
env->ExceptionDescribe(); \

0 commit comments

Comments
 (0)