Skip to content

Commit

Permalink
Merge pull request #1245 from hieupham007/timob-6809-1_8_X
Browse files Browse the repository at this point in the history
Timob 6809 1 8 x
  • Loading branch information
ayeung committed Jan 24, 2012
2 parents 637ee19 + 17fd000 commit 5283996
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,8 @@
"defaultValue": "null"
},
"java.lang.String[]":{
"jsType":"Value",
"jsType":"Array",
"jsHandleCast":"Array",
"jsToJavaConverter":"jsArrayToJavaArray",
"javaToJsConverter":"javaArrayToJsArray",
"jvalue":"l", "signature":"[Ljava/lang/String;",
Expand All @@ -261,7 +262,6 @@
"rhinoJsCast":true,
"rhinoToJavaConverter":"jsArrayToJavaStringArray",
"javaToRhinoConverter":"javaStringArrayToJsArray",
"typeValidation":false,
"defaultValue": "null"
},
"java.lang.Object":{
Expand All @@ -282,7 +282,8 @@
"defaultValue": "null"
},
"java.lang.Object[]":{
"jsType":"Value",
"jsType":"Array",
"jsHandleCast":"Array",
"jsToJavaConverter":"jsArrayToJavaArray",
"javaToJsConverter":"javaArrayToJsArray",
"jvalue":"l", "signature":"[Ljava/lang/Object;",
Expand All @@ -294,11 +295,11 @@
"rhinoJsCast":true,
"rhinoToJavaConverter":"jsArrayToJavaObjectArray",
"javaToRhinoConverter":"javaObjectArrayToJsArray",
"typeValidation":false,
"defaultValue": "null"
},
"int[]":{
"jsType":"Value",
"jsType":"Array",
"jsHandleCast":"Array",
"jsToJavaConverter":"jsArrayToJavaIntArray",
"javaToJsConverter":"javaArrayToJsArray",
"jvalue":"l", "signature":"[I",
Expand All @@ -310,7 +311,6 @@
"rhinoJsCast":true,
"rhinoToJavaConverter":"jsArrayToJavaIntArray",
"javaToRhinoConverter":"javaIntArrayToJsArray",
"typeValidation":false,
"defaultValue": "null"
},
"int":{
Expand Down Expand Up @@ -340,7 +340,8 @@
"defaultValue": "-1"
},
"long[]":{
"jsType":"Value",
"jsType":"Array",
"jsHandleCast":"Array",
"jsToJavaConverter":"jsArrayToJavaLongArray",
"javaToJsConverter":"javaArrayToJsArray",
"jvalue":"l", "signature":"[J",
Expand All @@ -352,11 +353,11 @@
"rhinoJsCast":true,
"rhinoToJavaConverter":"jsArrayToJavaLongArray",
"javaToRhinoConverter":"javaLongArrayToJsArray",
"typeValidation":false,
"defaultValue": "null"
},
"float[]":{
"jsType":"Value",
"jsType":"Array",
"jsHandleCast":"Array",
"jsToJavaConverter":"jsArrayToJavaFloatArray",
"javaToJsConverter":"javaArrayToJsArray",
"jvalue":"l", "signature":"[F",
Expand All @@ -368,7 +369,6 @@
"rhinoJsCast":true,
"rhinoToJavaConverter":"jsArrayToJavaFloatArray",
"javaToRhinoConverter":"javaFloatArrayToJsArray",
"typeValidation":false,
"defaultValue": "null"
},
"long":{
Expand Down Expand Up @@ -489,7 +489,7 @@ fails, a JS exception is returned.
---------------------------------------------------------------->
<#macro verifyAndConvertArgument expr index info logOnly isOptional>
<#if !isOptional && info.typeValidation!true>
if (!${expr}->Is${info.jsType}()) {
if (!${expr}->Is${info.jsType}() && !${expr}->IsNull()) {
const char *error = "Invalid value, expected type ${info.jsType}.";
LOGE(TAG, error);
<#if !(logOnly!false)>
Expand All @@ -513,6 +513,7 @@ fails, a JS exception is returned.
</#if>
<#t>
<#local current_arg = "arg_" + index>
<#local nullCheck = 0>
<#if info.jsType == "Value">
<#local type = "Local<Value>">
<#local valueExpr = expr>
Expand All @@ -524,12 +525,21 @@ fails, a JS exception is returned.
<#elseif info?keys?seq_contains("jsHandleCast")>
<#local type = "Local<" + info.jsType + ">">
<#local valueExpr = "Local<" + info.jsType + ">::Cast(" + expr + ")">
<#local nullCheck = 1>
<#else>
<#local type = "Local<" + info.jsType + ">">
<#local valueExpr = expr + "->To" + info.jsType + "()">
</#if>

<#t>
${type} ${current_arg} = ${valueExpr};
${type} ${current_arg};
<#if nullCheck == 1>
if (!${expr}->IsNull()) {
${current_arg} = ${valueExpr};
}
<#else>
${current_arg} = ${valueExpr};
</#if>

<#if info.jsType == "Number">
if (${postAssignmentCheck} || ${stringExpr}->Length() == 0) {
Expand All @@ -541,8 +551,12 @@ fails, a JS exception is returned.
}
</#if>
<#t>
jArguments[${index}].${info.jvalue} =
titanium::TypeConverter::${info.jsToJavaConverter}(arg_${index}<#if checkNew>, &isNew_${index}</#if>);
if (!${expr}->IsNull()) {
jArguments[${index}].${info.jvalue} =
titanium::TypeConverter::${info.jsToJavaConverter}(arg_${index}<#if checkNew>, &isNew_${index}</#if>);
} else {
jArguments[${index}].${info.jvalue} = NULL;
}
<#t>
<#if isOptional>
}
Expand Down
47 changes: 11 additions & 36 deletions android/runtime/v8/src/native/TypeConverter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -227,18 +227,13 @@ v8::Handle<v8::Value> * TypeConverter::javaObjectArrayToJsArguments(jobjectArray
return jsArguments;
}

jarray TypeConverter::jsArrayToJavaArray(v8::Local<v8::Value> jsValue)
jarray TypeConverter::jsArrayToJavaArray(v8::Handle<v8::Array> jsArray)
{
JNIEnv *env = JNIScope::getEnv();
if (env == NULL || jsValue->IsNull()) {
if (env == NULL) {
return NULL;
}

if (!jsValue->IsArray()) {
LOGE(TAG, "jsValue is not type Array");
return NULL;
}
v8::Handle<v8::Array> jsArray = v8::Handle<v8::Array>::Cast(jsValue);
int arrayLength = jsArray->Length();
jobjectArray javaArray = env->NewObjectArray(arrayLength, JNIUtil::objectClass, NULL);
if (javaArray == NULL) {
Expand Down Expand Up @@ -308,20 +303,12 @@ v8::Handle<v8::Array> TypeConverter::javaArrayToJsArray(jshortArray javaShortArr
return javaDoubleArrayToJsNumberArray((jdoubleArray) javaShortArray);
}

jintArray TypeConverter::jsArrayToJavaIntArray(v8::Local<v8::Value> jsValue)
jintArray TypeConverter::jsArrayToJavaIntArray(v8::Handle<v8::Array> jsArray)
{
JNIEnv *env = JNIScope::getEnv();
if (env == NULL || jsValue->IsNull()) {
return NULL;
}

if (!jsValue->IsArray()) {
LOGE(TAG, "jsValue is not type Array");
if (env == NULL) {
return NULL;
}

v8::Handle<v8::Array> jsArray = v8::Handle<v8::Array>::Cast(jsValue);


int arrayLength = jsArray->Length();
jintArray javaIntArray = env->NewIntArray(arrayLength);
Expand Down Expand Up @@ -358,20 +345,14 @@ v8::Handle<v8::Array> TypeConverter::javaArrayToJsArray(jintArray javaIntArray)
return jsArray;
}

jlongArray TypeConverter::jsArrayToJavaLongArray(v8::Local<v8::Value> jsValue)
jlongArray TypeConverter::jsArrayToJavaLongArray(v8::Handle<v8::Array> jsArray)
{
JNIEnv *env = JNIScope::getEnv();
if (env == NULL || jsValue->IsNull()) {
return NULL;
}

if (!jsValue->IsArray()) {
LOGE(TAG, "jsValue is not type Array");
if (env == NULL) {
return NULL;
}

v8::Handle<v8::Array> jsArray = v8::Handle<v8::Array>::Cast(jsValue);


int arrayLength = jsArray->Length();
jlongArray javaLongArray = env->NewLongArray(arrayLength);
if (javaLongArray == NULL) {
Expand All @@ -389,20 +370,14 @@ jlongArray TypeConverter::jsArrayToJavaLongArray(v8::Local<v8::Value> jsValue)
return javaLongArray;
}

jfloatArray TypeConverter::jsArrayToJavaFloatArray(v8::Local<v8::Value> jsValue)
jfloatArray TypeConverter::jsArrayToJavaFloatArray(v8::Handle<v8::Array> jsArray)
{
JNIEnv *env = JNIScope::getEnv();
if (env == NULL || jsValue->IsNull()) {
return NULL;
}

if (!jsValue->IsArray()) {
LOGE(TAG, "jsValue is not type Array");
if (env == NULL) {
return NULL;
}

v8::Handle<v8::Array> jsArray = v8::Handle<v8::Array>::Cast(jsValue);


int arrayLength = jsArray->Length();
jfloatArray javaFloatArray = env->NewFloatArray(arrayLength);
if (javaFloatArray == NULL) {
Expand Down Expand Up @@ -508,7 +483,7 @@ jobject TypeConverter::jsValueToJavaObject(v8::Local<v8::Value> jsValue, bool *i

} else if (jsValue->IsArray()) {
*isNew = true;
return TypeConverter::jsArrayToJavaArray(jsValue);
return TypeConverter::jsArrayToJavaArray(v8::Handle<v8::Array>::Cast(jsValue));

} else if (jsValue->IsFunction()) {
*isNew = true;
Expand Down
8 changes: 4 additions & 4 deletions android/runtime/v8/src/native/TypeConverter.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,15 @@ class TypeConverter
static v8::Handle<v8::Value> * javaObjectArrayToJsArguments(jobjectArray javaObjectArray, int *length);

// array convert methods
static jarray jsArrayToJavaArray(v8::Local<v8::Value> jsValue);
static jarray jsArrayToJavaArray(v8::Handle<v8::Array> jsArray);
static v8::Handle<v8::Array> javaArrayToJsArray(jbooleanArray javaBooleanArray);
static jshortArray jsArrayToJavaShortArray(v8::Handle<v8::Array> jsArray);
static v8::Handle<v8::Array> javaArrayToJsArray(jshortArray javaShortArray);
static jintArray jsArrayToJavaIntArray(v8::Local<v8::Value> jsValue);
static jintArray jsArrayToJavaIntArray(v8::Handle<v8::Array> jsArray);
static v8::Handle<v8::Array> javaArrayToJsArray(jintArray javaIntArray);
static jlongArray jsArrayToJavaLongArray(v8::Local<v8::Value> jsValue);
static jlongArray jsArrayToJavaLongArray(v8::Handle<v8::Array> jsArray);
static v8::Handle<v8::Array> javaArrayToJsArray(jlongArray javaLongArray);
static jfloatArray jsArrayToJavaFloatArray(v8::Local<v8::Value> jsValue);
static jfloatArray jsArrayToJavaFloatArray(v8::Handle<v8::Array> jsArray);
static v8::Handle<v8::Array> javaArrayToJsArray(jfloatArray javaFloatArray);
static jdoubleArray jsArrayToJavaDoubleArray(v8::Handle<v8::Array> jsArray);
static v8::Handle<v8::Array> javaArrayToJsArray(jdoubleArray javaDoubleArray);
Expand Down

0 comments on commit 5283996

Please sign in to comment.