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

Method RegisterInstance

test-app/runtime/src/main/cpp/CallbackHandlers.cpp:69–131  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

67}
68
69bool CallbackHandlers::RegisterInstance(Isolate *isolate, const Local<Object> &jsObject,
70 const std::string &fullClassName,
71 const ArgsWrapper &argWrapper,
72 const Local<Object> &implementationObject,
73 bool isInterface,
74 const std::string &baseClassName) {
75 bool success;
76
77 DEBUG_WRITE("RegisterInstance called for '%s'", fullClassName.c_str());
78
79 auto runtime = Runtime::GetRuntime(isolate);
80 auto objectManager = runtime->GetObjectManager();
81
82 JEnv env;
83
84 jclass generatedJavaClass = ResolveClass(isolate, baseClassName, fullClassName,
85 implementationObject,
86 isInterface);
87
88 int javaObjectID = objectManager->GenerateNewObjectID();
89
90 objectManager->Link(jsObject, javaObjectID, nullptr);
91
92 // resolve constructor
93 auto mi = MethodCache::ResolveConstructorSignature(argWrapper, fullClassName,
94 generatedJavaClass, isInterface);
95
96 // while the "instance" is being created, if an exception is thrown during the construction
97 // this scope will guarantee the "javaObjectID" will be set to -1 and won't have an invalid value
98 jobject instance;
99 {
100 JavaObjectIdScope objIdScope(env, CURRENT_OBJECTID_FIELD_ID, runtime->GetJavaRuntime(),
101 javaObjectID);
102
103 if (argWrapper.type == ArgType::Interface) {
104 instance = env.NewObject(generatedJavaClass, mi.mid);
105 } else {
106 // resolve arguments before passing them on to the constructor
107// JSToJavaConverter argConverter(isolate, argWrapper.args, mi.signature);
108 JsArgConverter argConverter(argWrapper.args, mi.signature);
109 auto ctorArgs = argConverter.ToArgs();
110
111 instance = env.NewObjectA(generatedJavaClass, mi.mid, ctorArgs);
112 }
113 }
114
115 env.CallVoidMethod(runtime->GetJavaRuntime(), MAKE_INSTANCE_STRONG_ID, instance, javaObjectID);
116
117 AdjustAmountOfExternalAllocatedMemory(env, isolate);
118
119 JniLocalRef localInstance(instance);
120 success = !localInstance.IsNull();
121
122 if (success) {
123 jclass instanceClass = env.FindClass(fullClassName);
124 objectManager->SetJavaClass(jsObject, instanceClass);
125 } else {
126 DEBUG_WRITE_FORCE("RegisterInstance failed with null new instance class: %s",

Callers

nothing calls this directly

Calls 11

GetObjectManagerMethod · 0.80
GenerateNewObjectIDMethod · 0.80
LinkMethod · 0.80
GetJavaRuntimeMethod · 0.80
NewObjectMethod · 0.80
NewObjectAMethod · 0.80
CallVoidMethodMethod · 0.80
SetJavaClassMethod · 0.80
ToArgsMethod · 0.45
IsNullMethod · 0.45
FindClassMethod · 0.45

Tested by

no test coverage detected