Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 15 additions & 8 deletions src/utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,16 @@ jvalueType javaGetArrayComponentType(JNIEnv *env, jobjectArray array) {
return arrayComponentType;
}

v8::Local<v8::String> javaCharToV8String(jchar c) {
#if ((NODE_MAJOR_VERSION == 0) && (NODE_MINOR_VERSION <= 10))
return v8::String::New(&c, 1);
#elif ((NODE_MAJOR_VERSION == 0) && (NODE_MINOR_VERSION <= 12))
return v8::String::NewFromTwoByte(v8::Isolate::GetCurrent(), &c, v8::String::kNormalString, 1);
#else
return v8::String::NewFromTwoByte(v8::Isolate::GetCurrent(), &c, v8::NewStringType::kNormal, 1).ToLocalChecked();
#endif
}

v8::Local<v8::Value> javaArrayToV8(Java* java, JNIEnv* env, jobjectArray objArray) {
if(objArray == NULL) {
return Nan::Null();
Expand All @@ -493,11 +503,10 @@ v8::Local<v8::Value> javaArrayToV8(Java* java, JNIEnv* env, jobjectArray objArra
case TYPE_CHAR:
{
jchar* elems = env->GetCharArrayElements((jcharArray)objArray, 0);
char str[2];
str[1] = '\0';
jchar str;
for(jsize i=0; i<arraySize; i++) {
str[0] = elems[i];
result->Set(i, Nan::New<v8::String>(str).ToLocalChecked());
str = elems[i];
result->Set(i, javaCharToV8String(str));
}
env->ReleaseCharArrayElements((jcharArray)objArray, elems, 0);
}
Expand Down Expand Up @@ -612,11 +621,9 @@ v8::Local<v8::Value> javaToV8(Java* java, JNIEnv* env, jobject obj, DynamicProxy
{
jclass charClazz = env->FindClass("java/lang/Character");
jmethodID char_charValue = env->GetMethodID(charClazz, "charValue", "()C");
char str[2];
str[0] = env->CallCharMethod(obj, char_charValue);
str[1] = '\0';
jchar c = env->CallCharMethod(obj, char_charValue);
checkJavaException(env);
return Nan::New<v8::String>(str).ToLocalChecked();
return javaCharToV8String(c);
}
case TYPE_BOOLEAN:
{
Expand Down
4 changes: 2 additions & 2 deletions test/utils-types-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ exports['Utils - Types'] = nodeunit.testCase({
},

"Char array": function(test) {
var originalArray = "hello world\n".split('');
var originalArray = "hello 世界\n".split('');
var Arrays = java.import("java.util.Arrays");
var arr1 = java.newArray("char", originalArray);
var list = Arrays.asListSync(arr1);
var arr2 = list.toArraySync();
test.equal(arr2.length, 1);
test.equal(arr2[0].length, 12);
test.equal(arr2[0].length, 9);
for(var i=0; i<originalArray.length; i++) {
test.equal(arr2[0][i], originalArray[i]);
}
Expand Down