@@ -15,7 +15,7 @@ using namespace std;
15
15
using namespace tns ;
16
16
17
17
JsArgConverter::JsArgConverter (const Local<Object>& caller, const v8::FunctionCallbackInfo<Value>& args, const string& methodSignature, MetadataEntry* entry)
18
- : m_isolate(args.GetIsolate()), m_env(JEnv()), m_methodSignature(methodSignature), m_isValid(true ), m_error(Error()) {
18
+ : m_isolate(args.GetIsolate()), m_methodSignature(methodSignature), m_isValid(true ), m_error(Error()) {
19
19
int v8ProvidedArgumentsLength = args.Length ();
20
20
m_argsLen = 1 + v8ProvidedArgumentsLength;
21
21
@@ -48,7 +48,7 @@ JsArgConverter::JsArgConverter(const Local<Object>& caller, const v8::FunctionCa
48
48
}
49
49
50
50
JsArgConverter::JsArgConverter (const v8::FunctionCallbackInfo<Value>& args, bool hasImplementationObject, const string& methodSignature, MetadataEntry* entry)
51
- : m_isolate(args.GetIsolate()), m_env(JEnv()), m_methodSignature(methodSignature), m_isValid(true ), m_error(Error()) {
51
+ : m_isolate(args.GetIsolate()), m_methodSignature(methodSignature), m_isValid(true ), m_error(Error()) {
52
52
m_argsLen = !hasImplementationObject ? args.Length () : args.Length () - 1 ;
53
53
54
54
if (m_argsLen > 0 ) {
@@ -74,7 +74,7 @@ JsArgConverter::JsArgConverter(const v8::FunctionCallbackInfo<Value>& args, bool
74
74
}
75
75
76
76
JsArgConverter::JsArgConverter (const v8::FunctionCallbackInfo<Value>& args, const string& methodSignature)
77
- : m_isolate(args.GetIsolate()), m_env(JEnv()), m_methodSignature(methodSignature), m_isValid(true ), m_error(Error()) {
77
+ : m_isolate(args.GetIsolate()), m_methodSignature(methodSignature), m_isValid(true ), m_error(Error()) {
78
78
m_argsLen = args.Length ();
79
79
80
80
JniSignatureParser parser (m_methodSignature);
@@ -366,76 +366,77 @@ bool JsArgConverter::ConvertJavaScriptArray(const Local<Array>& jsArr, int index
366
366
jclass elementClass;
367
367
string strippedClassName;
368
368
369
+ JEnv env;
369
370
switch (elementTypePrefix) {
370
371
case ' Z' :
371
- arr = m_env .NewBooleanArray (arrLength);
372
+ arr = env .NewBooleanArray (arrLength);
372
373
for (jsize i = 0 ; i < arrLength; i++) {
373
374
jboolean value = jsArr->Get (context, i).ToLocalChecked ()->BooleanValue (m_isolate);
374
- m_env .SetBooleanArrayRegion ((jbooleanArray) arr, i, 1 , &value);
375
+ env .SetBooleanArrayRegion ((jbooleanArray) arr, i, 1 , &value);
375
376
}
376
377
break ;
377
378
case ' B' :
378
- arr = m_env .NewByteArray (arrLength);
379
+ arr = env .NewByteArray (arrLength);
379
380
for (jsize i = 0 ; i < arrLength; i++) {
380
381
jbyte value = jsArr->Get (context, i).ToLocalChecked ()->Int32Value (context).ToChecked ();
381
- m_env .SetByteArrayRegion ((jbyteArray) arr, i, 1 , &value);
382
+ env .SetByteArrayRegion ((jbyteArray) arr, i, 1 , &value);
382
383
}
383
384
break ;
384
385
case ' C' :
385
- arr = m_env .NewCharArray (arrLength);
386
+ arr = env .NewCharArray (arrLength);
386
387
for (jsize i = 0 ; i < arrLength; i++) {
387
388
String::Utf8Value utf8 (m_isolate, jsArr->Get (context, i).ToLocalChecked ()->ToString (context).ToLocalChecked ());
388
- JniLocalRef s (m_env .NewString ((jchar*) *utf8, 1 ));
389
- const char * singleChar = m_env .GetStringUTFChars (s, nullptr );
389
+ JniLocalRef s (env .NewString ((jchar*) *utf8, 1 ));
390
+ const char * singleChar = env .GetStringUTFChars (s, nullptr );
390
391
jchar value = *singleChar;
391
- m_env .ReleaseStringUTFChars (s, singleChar);
392
- m_env .SetCharArrayRegion ((jcharArray) arr, i, 1 , &value);
392
+ env .ReleaseStringUTFChars (s, singleChar);
393
+ env .SetCharArrayRegion ((jcharArray) arr, i, 1 , &value);
393
394
}
394
395
break ;
395
396
case ' S' :
396
- arr = m_env .NewShortArray (arrLength);
397
+ arr = env .NewShortArray (arrLength);
397
398
for (jsize i = 0 ; i < arrLength; i++) {
398
399
jshort value = jsArr->Get (context, i).ToLocalChecked ()->Int32Value (context).ToChecked ();
399
- m_env .SetShortArrayRegion ((jshortArray) arr, i, 1 , &value);
400
+ env .SetShortArrayRegion ((jshortArray) arr, i, 1 , &value);
400
401
}
401
402
break ;
402
403
case ' I' :
403
- arr = m_env .NewIntArray (arrLength);
404
+ arr = env .NewIntArray (arrLength);
404
405
for (jsize i = 0 ; i < arrLength; i++) {
405
406
jint value = jsArr->Get (context, i).ToLocalChecked ()->Int32Value (context).ToChecked ();
406
- m_env .SetIntArrayRegion ((jintArray) arr, i, 1 , &value);
407
+ env .SetIntArrayRegion ((jintArray) arr, i, 1 , &value);
407
408
}
408
409
break ;
409
410
case ' J' :
410
- arr = m_env .NewLongArray (arrLength);
411
+ arr = env .NewLongArray (arrLength);
411
412
for (jsize i = 0 ; i < arrLength; i++) {
412
413
jlong value = jsArr->Get (context, i).ToLocalChecked ()->NumberValue (context).ToChecked ();
413
- m_env .SetLongArrayRegion ((jlongArray) arr, i, 1 , &value);
414
+ env .SetLongArrayRegion ((jlongArray) arr, i, 1 , &value);
414
415
}
415
416
break ;
416
417
case ' F' :
417
- arr = m_env .NewFloatArray (arrLength);
418
+ arr = env .NewFloatArray (arrLength);
418
419
for (jsize i = 0 ; i < arrLength; i++) {
419
420
jfloat value = jsArr->Get (context, i).ToLocalChecked ()->NumberValue (context).ToChecked ();
420
- m_env .SetFloatArrayRegion ((jfloatArray) arr, i, 1 , &value);
421
+ env .SetFloatArrayRegion ((jfloatArray) arr, i, 1 , &value);
421
422
}
422
423
break ;
423
424
case ' D' :
424
- arr = m_env .NewDoubleArray (arrLength);
425
+ arr = env .NewDoubleArray (arrLength);
425
426
for (jsize i = 0 ; i < arrLength; i++) {
426
427
jdouble value = jsArr->Get (context, i).ToLocalChecked ()->NumberValue (context).ToChecked ();
427
- m_env .SetDoubleArrayRegion ((jdoubleArray) arr, i, 1 , &value);
428
+ env .SetDoubleArrayRegion ((jdoubleArray) arr, i, 1 , &value);
428
429
}
429
430
break ;
430
431
case ' L' :
431
432
strippedClassName = elementType.substr (1 , elementType.length () - 2 );
432
- elementClass = m_env .FindClass (strippedClassName);
433
- arr = m_env .NewObjectArray (arrLength, elementClass, nullptr );
433
+ elementClass = env .FindClass (strippedClassName);
434
+ arr = env .NewObjectArray (arrLength, elementClass, nullptr );
434
435
for (int i = 0 ; i < arrLength; i++) {
435
436
auto v = jsArr->Get (context, i).ToLocalChecked ();
436
437
JsArgToArrayConverter c (context, v, false , (int ) Type::Null);
437
438
jobject o = c.GetConvertedArg ();
438
- m_env .SetObjectArrayElement ((jobjectArray) arr, i, o);
439
+ env .SetObjectArrayElement ((jobjectArray) arr, i, o);
439
440
}
440
441
break ;
441
442
default :
@@ -515,10 +516,11 @@ JsArgConverter::Error JsArgConverter::GetError() const {
515
516
516
517
JsArgConverter::~JsArgConverter () {
517
518
if (m_argsLen > 0 ) {
519
+ JEnv env;
518
520
int length = m_storedObjects.size ();
519
521
for (int i = 0 ; i < length; i++) {
520
522
int index = m_storedObjects[i];
521
- m_env .DeleteLocalRef (m_args[index].l );
523
+ env .DeleteLocalRef (m_args[index].l );
522
524
}
523
525
}
524
526
}
0 commit comments