@@ -39,7 +39,7 @@ void CallbackHandlers::Init(Isolate *isolate, ObjectManager *objectManager)
3939 RESOLVE_CLASS_METHOD_ID = env.GetMethodID (RUNTIME_CLASS, " resolveClass" , " (Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Class;" );
4040 assert (RESOLVE_CLASS_METHOD_ID != nullptr );
4141
42- CURRENT_OBJECTID_FIELD_ID = env.GetStaticFieldID (RUNTIME_CLASS, " currentObjectId" , " I" );
42+ CURRENT_OBJECTID_FIELD_ID = env.GetFieldID (RUNTIME_CLASS, " currentObjectId" , " I" );
4343 assert (CURRENT_OBJECTID_FIELD_ID != nullptr );
4444
4545 MAKE_INSTANCE_STRONG_ID = env.GetMethodID (RUNTIME_CLASS, " makeInstanceStrong" , " (Ljava/lang/Object;I)V" );
@@ -85,25 +85,25 @@ bool CallbackHandlers::RegisterInstance(Isolate *isolate, const Local<Object>& j
8585
8686 jobject instance;
8787
88- env.SetStaticIntField (RUNTIME_CLASS, CURRENT_OBJECTID_FIELD_ID, javaObjectID);
89-
90- if (argWrapper.type == ArgType::Interface)
91- {
92- instance = env.NewObject (generatedJavaClass, mi.mid );
93- }
94- else
9588 {
96- // resolve arguments before passing them on to the constructor
97- JsArgConverter argConverter (argWrapper.args , mi.signature , argWrapper.outerThis );
98- auto ctorArgs = argConverter.ToArgs ();
89+ JavaObjectIdScope objIdScope (env, CURRENT_OBJECTID_FIELD_ID, runtime->GetJavaRuntime (), javaObjectID);
9990
100- instance = env.NewObjectA (generatedJavaClass, mi.mid , ctorArgs);
91+ if (argWrapper.type == ArgType::Interface)
92+ {
93+ instance = env.NewObject (generatedJavaClass, mi.mid );
94+ }
95+ else
96+ {
97+ // resolve arguments before passing them on to the constructor
98+ JsArgConverter argConverter (argWrapper.args , mi.signature , argWrapper.outerThis );
99+ auto ctorArgs = argConverter.ToArgs ();
100+
101+ instance = env.NewObjectA (generatedJavaClass, mi.mid , ctorArgs);
102+ }
101103 }
102104
103105 env.CallVoidMethod (runtime->GetJavaRuntime (), MAKE_INSTANCE_STRONG_ID, instance, javaObjectID);
104106
105- env.SetStaticIntField (RUNTIME_CLASS, CURRENT_OBJECTID_FIELD_ID, -1 );
106-
107107 AdjustAmountOfExternalAllocatedMemory (env, isolate);
108108
109109 JniLocalRef localInstance (instance);
@@ -137,14 +137,14 @@ jclass CallbackHandlers::ResolveClass(Isolate *isolate, const string& fullClassn
137137 {
138138 JEnv env;
139139
140- // get needed arguments in order to load binding
140+ // get needed arguments in order to load binding
141141 JniLocalRef javaFullClassName (env.NewStringUTF (fullClassname.c_str ()));
142142
143143 jobjectArray methodOverrides = GetMethodOverrides (env, implementationObject);
144144
145145 auto runtime = Runtime::GetRuntime (isolate);
146146
147- // create or load generated binding (java class)
147+ // create or load generated binding (java class)
148148 JniLocalRef generatedClass (env.CallObjectMethod (runtime->GetJavaRuntime (), RESOLVE_CLASS_METHOD_ID, (jstring) javaFullClassName, methodOverrides));
149149 globalRefToGeneratedClass = static_cast <jclass>(env.NewGlobalRef (generatedClass));
150150
@@ -593,9 +593,9 @@ int64_t CallbackHandlers::AdjustAmountOfExternalAllocatedMemory(JEnv& env, Isola
593593 int64_t changeInBytes = env.CallLongMethod (runtime->GetJavaRuntime (), GET_CHANGE_IN_BYTES_OF_USED_MEMORY_METHOD_ID);
594594
595595 int64_t adjustedValue = (changeInBytes != 0 )
596- ? isolate->AdjustAmountOfExternalAllocatedMemory (changeInBytes)
597- :
598- 0 ;
596+ ? isolate->AdjustAmountOfExternalAllocatedMemory (changeInBytes)
597+ :
598+ 0 ;
599599
600600 return adjustedValue;
601601}
0 commit comments