@@ -266,41 +266,6 @@ void ObjectManager::Link(const Local<Object> &object, uint32_t javaObjectID, jcl
266266 m_idToObject.insert (make_pair (javaObjectID, objectHandle));
267267}
268268
269- void ObjectManager::LinkWithExtraData (const v8::Local<v8::Object>& object, uint32_t javaObjectID, jclass clazz, void * data) {
270- if (!IsJsRuntimeObject (object)) {
271- string errMsg (" Trying to link invalid 'this' to a Java object" );
272- throw NativeScriptException (errMsg);
273- }
274-
275- auto isolate = m_isolate;
276-
277- DEBUG_WRITE (" Linking js object: %d and java instance id: %d" , object->GetIdentityHash (),
278- javaObjectID);
279-
280- auto jsInstanceInfo = new JSInstanceInfo (false /* isJavaObjWeak*/ , javaObjectID, clazz);
281-
282- auto objectHandle = new Persistent<Object>(isolate, object);
283- auto state = new ObjectWeakCallbackState (this , jsInstanceInfo, objectHandle);
284-
285- // subscribe for JS GC event
286- if (m_markingMode == JavaScriptMarkingMode::None) {
287- objectHandle->SetWeak (state, JSObjectFinalizerStatic, WeakCallbackType::kFinalizer );
288- } else {
289- objectHandle->SetWeak (state, JSObjectWeakCallbackStatic, WeakCallbackType::kFinalizer );
290- }
291-
292- auto jsInfoIdx = static_cast <int >(MetadataNodeKeys::JsInfo);
293-
294- auto jsInfo = External::New (isolate, jsInstanceInfo);
295-
296- // link
297- object->SetInternalField (jsInfoIdx, jsInfo);
298-
299- V8SetPrivateValue (isolate, object, String::NewFromUtf8 (isolate," object_with_extra_data" ).ToLocalChecked (), External::New (isolate, data));
300-
301- m_idToObject.insert (make_pair (javaObjectID, objectHandle));
302- }
303-
304269bool ObjectManager::CloneLink (const Local<Object> &src, const Local<Object> &dest) {
305270 auto jsInfo = GetJSInstanceInfo (src);
306271
@@ -387,55 +352,6 @@ void ObjectManager::JSObjectFinalizer(Isolate *isolate, ObjectWeakCallbackState
387352}
388353
389354
390- void ObjectManager::JSObjectFinalizerStaticWithExtraData (const WeakCallbackInfo<ObjectWeakCallbackState> &data) {
391- ObjectWeakCallbackState *callbackState = data.GetParameter ();
392-
393- ObjectManager *thisPtr = callbackState->thisPtr ;
394-
395- auto isolate = data.GetIsolate ();
396-
397- thisPtr->JSObjectFinalizerWithExtraData (isolate, callbackState);
398- }
399-
400- void ObjectManager::JSObjectFinalizerWithExtraData (Isolate *isolate, ObjectWeakCallbackState *callbackState) {
401- HandleScope handleScope (m_isolate);
402- Persistent<Object> *po = callbackState->target ;
403- auto jsInstanceInfo = GetJSInstanceInfoFromRuntimeObject (po->Get (m_isolate));
404-
405- if (jsInstanceInfo == nullptr ) {
406- po->Reset ();
407- delete po;
408- delete callbackState;
409- return ;
410- }
411-
412- auto javaObjectID = jsInstanceInfo->JavaObjectID ;
413- JEnv env;
414- jboolean isJavaInstanceAlive = env.CallBooleanMethod (m_javaRuntimeObject,
415- MAKE_INSTANCE_WEAK_AND_CHECK_IF_ALIVE_METHOD_ID,
416- javaObjectID);
417- if (isJavaInstanceAlive) {
418- // If the Java instance is alive, keep the JavaScript instance alive.
419- po->SetWeak (callbackState, JSObjectFinalizerStatic, WeakCallbackType::kFinalizer );
420- } else {
421- // If the Java instance is dead, this JavaScript instance can be let die.
422- delete jsInstanceInfo;
423- auto jsInfoIdx = static_cast <int >(MetadataNodeKeys::JsInfo);
424- po->Get (m_isolate)->SetInternalField (jsInfoIdx, Undefined (m_isolate));
425- v8::Local<v8::Value> out;
426- V8GetPrivateValue (isolate, po->Get (m_isolate), String::NewFromUtf8 (isolate," object_with_extra_data" ).ToLocalChecked (), out);
427- V8SetPrivateValue (isolate, po->Get (m_isolate), String::NewFromUtf8 (isolate," object_with_extra_data" ).ToLocalChecked (), Undefined (m_isolate));
428- if (!out.IsEmpty () && out->IsExternal ()) {
429- auto data = out.As <v8::External>()->Value ();
430- free (data);
431- }
432- po->Reset ();
433- m_idToObject.erase (javaObjectID);
434- delete po;
435- delete callbackState;
436- }
437- }
438-
439355/*
440356 * When JS GC happens change state of the java counterpart to mirror state of JS object and REVIVE the JS object unconditionally
441357 * "Regular" js objects are pushed into the "regular objects" array
@@ -466,7 +382,7 @@ void ObjectManager::JSObjectWeakCallback(Isolate *isolate, ObjectWeakCallbackSta
466382
467383 if (hasImplObj) {
468384 if (jsInstanceInfo->IsJavaObjectWeak ) {
469- m_implObjWeak.push_back ( PersistentObjectIdPair ( po, javaObjectID) );
385+ m_implObjWeak.emplace_back ( po, javaObjectID);
470386 } else {
471387 m_implObjStrong.insert (make_pair (javaObjectID, po));
472388 jsInstanceInfo->IsJavaObjectWeak = true ;
0 commit comments