@@ -194,36 +194,26 @@ Local<Value> FieldAccessor::GetJavaField(const Local<Object>& target, FieldCallb
194
194
}
195
195
else
196
196
{
197
- bool isString = fieldTypeName == " java/lang/String " ;
197
+ jobject result ;
198
198
199
- if (isString )
199
+ if (isStatic )
200
200
{
201
- JniLocalRef result;
202
- if (isStatic)
203
- {
204
- result = env.GetStaticObjectField (clazz, fieldId);
205
- }
206
- else
207
- {
208
- result = env.GetObjectField (targetJavaObject, fieldId);
209
- }
210
-
211
- auto resultV8String = ArgConverter::jstringToV8String (result);
212
- fieldResult = handleScope.Escape (resultV8String);
201
+ result = env.GetStaticObjectField (clazz, fieldId);
213
202
}
214
203
else
215
204
{
216
- jobject result;
217
- if (isStatic)
205
+ result = env.GetObjectField (targetJavaObject, fieldId);
206
+ }
207
+
208
+ if (result != nullptr ) {
209
+
210
+ bool isString = fieldTypeName == " java/lang/String" ;
211
+ if (isString)
218
212
{
219
- result = env.GetStaticObjectField (clazz, fieldId);
213
+ auto resultV8Value = ArgConverter::jstringToV8String ((jstring)result);
214
+ fieldResult = handleScope.Escape (resultV8Value);
220
215
}
221
216
else
222
- {
223
- result = env.GetObjectField (targetJavaObject, fieldId);
224
- }
225
-
226
- if (result != nullptr )
227
217
{
228
218
int javaObjectID = objectManager->GetOrCreateObjectId (result);
229
219
auto objectResult = objectManager->GetJsObjectByJavaObject (javaObjectID);
@@ -233,14 +223,13 @@ Local<Value> FieldAccessor::GetJavaField(const Local<Object>& target, FieldCallb
233
223
objectResult = objectManager->CreateJSWrapper (javaObjectID, fieldTypeName, result);
234
224
}
235
225
236
- env.DeleteLocalRef (result);
237
-
238
226
fieldResult = handleScope.Escape (objectResult);
239
227
}
240
- else
241
- {
242
- fieldResult = Null (isolate);
243
- }
228
+ env.DeleteLocalRef (result);
229
+ }
230
+ else
231
+ {
232
+ fieldResult = handleScope.Escape (Null (isolate));
244
233
}
245
234
}
246
235
return fieldResult;
@@ -417,34 +406,33 @@ void FieldAccessor::SetJavaField(const Local<Object>& target, const Local<Value>
417
406
else
418
407
{
419
408
bool isString = fieldTypeName == " java/lang/String" ;
420
- if (isString)
421
- {
422
- // TODO: validate valie is a string;
423
- String::Utf8Value stringValue (value->ToString ());
424
- JniLocalRef value (env.NewStringUTF (*stringValue));
409
+ jobject result = nullptr ;
425
410
426
- if (isStatic)
411
+ if (!value->IsNull ()) {
412
+ if (isString)
427
413
{
428
- env.SetStaticObjectField (clazz, fieldId, value);
414
+ // TODO: validate valie is a string;
415
+ result = ConvertToJavaString (value);
429
416
}
430
417
else
431
418
{
432
- env.SetObjectField (targetJavaObject, fieldId, value);
419
+ auto objectWithHiddenID = value->ToObject ();
420
+ result =objectManager->GetJavaObjectByJsObject (objectWithHiddenID);
433
421
}
434
422
}
423
+
424
+ if (isStatic)
425
+ {
426
+ env.SetStaticObjectField (clazz, fieldId, result);
427
+ }
435
428
else
436
429
{
437
- auto objectWithHiddenID = value-> ToObject ( );
438
- jweak javaObject = objectManager-> GetJavaObjectByJsObject (objectWithHiddenID);
430
+ env. SetObjectField (targetJavaObject, fieldId, result );
431
+ }
439
432
440
- if (isStatic)
441
- {
442
- env.SetStaticObjectField (clazz, fieldId, javaObject);
443
- }
444
- else
445
- {
446
- env.SetObjectField (targetJavaObject, fieldId, javaObject);
447
- }
433
+ if (isString)
434
+ {
435
+ env.DeleteLocalRef (result);
448
436
}
449
437
}
450
438
}
0 commit comments