MCPcopy Create free account
hub / github.com/NativeScript/android / Link

Method Link

test-app/runtime/src/main/cpp/ObjectManager.cpp:265–300  ·  view source on GitHub ↗

* Link the JavaScript object and it's java counterpart with an ID */

Source from the content-addressed store, hash-verified

263 * Link the JavaScript object and it's java counterpart with an ID
264 */
265void ObjectManager::Link(const Local<Object>& object, uint32_t javaObjectID,
266 jclass clazz) {
267 if (!IsJsRuntimeObject(object)) {
268 string errMsg("Trying to link invalid 'this' to a Java object");
269 throw NativeScriptException(errMsg);
270 }
271
272 auto isolate = m_isolate;
273
274 DEBUG_WRITE("Linking js object: %d and java instance id: %d",
275 object->GetIdentityHash(), javaObjectID);
276
277 auto jsInstanceInfo =
278 new JSInstanceInfo(false /*isJavaObjWeak*/, javaObjectID, clazz);
279
280 auto objectHandle = new Persistent<Object>(isolate, object);
281 auto state = new ObjectWeakCallbackState(this, jsInstanceInfo, objectHandle);
282
283 // subscribe for JS GC event
284 if (m_markingMode == JavaScriptMarkingMode::None) {
285 objectHandle->SetWeak(state, JSObjectFinalizerStatic,
286 WeakCallbackType::kFinalizer);
287 } else {
288 objectHandle->SetWeak(state, JSObjectWeakCallbackStatic,
289 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 m_idToObject.emplace(javaObjectID, objectHandle);
300}
301
302bool ObjectManager::CloneLink(const Local<Object>& src,
303 const Local<Object>& dest) {

Callers 5

RegisterInstanceMethod · 0.80
ConvertArgMethod · 0.80
ConvertArgMethod · 0.80

Calls 4

NewFunction · 0.85
SetWeakMethod · 0.80
emplaceMethod · 0.80

Tested by

no test coverage detected