Skip to content

Commit e8e90cd

Browse files
committed
name refactoring; removed redundant hidden field
1 parent 227fccd commit e8e90cd

7 files changed

Lines changed: 745 additions & 17 deletions

android_unit_test_results.xml

Lines changed: 707 additions & 0 deletions
Large diffs are not rendered by default.

src/jni/JsArgConverter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ bool JsArgConverter::ConvertArg(const Local<Value>& arg, int index)
205205
case CastType::None:
206206
obj = objectManager->GetJavaObjectByJsObject(jsObject);
207207

208-
castValue = jsObject->GetHiddenValue(ConvertToV8String("isnull"));
208+
castValue = jsObject->GetHiddenValue(ConvertToV8String(V8StringConstants::NULL_NODE_NAME));
209209
if(!castValue.IsEmpty()) {
210210
SetConvertedObject(index, nullptr);
211211
success = true;

src/jni/JsArgToArrayConverter.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -289,13 +289,23 @@ bool JsArgToArrayConverter::ConvertArg(const Local<Value>& arg, int index)
289289
case CastType::None:
290290
obj = objectManager->GetJavaObjectByJsObject(jsObj);
291291

292-
castValue = jsObj->GetHiddenValue(ConvertToV8String("node"));
292+
castValue = jsObj->GetHiddenValue(V8StringConstants::GetNullNodeName());
293+
293294
if(!castValue.IsEmpty()) {
294-
auto n = reinterpret_cast<MetadataNode*>(castValue.As<External>()->Value());
295-
auto type = (n != nullptr) ? n->GetName() : "";
295+
auto node = reinterpret_cast<MetadataNode*>(castValue.As<External>()->Value());
296+
297+
if(node == nullptr) {
298+
s << "Cannot get type of the null argument at index " << index;
299+
success = false;
300+
break;
301+
}
302+
303+
auto type = node->GetName();
304+
auto nullObjName = "com/tns/NullObject";
305+
auto nullObjCtorSig = "(Ljava/lang/Class;)V";
296306

297-
jclass nullClazz = env.FindClass("com/tns/NullObject");
298-
jmethodID ctor = env.GetMethodID(nullClazz, "<init>", "(Ljava/lang/Class;)V");
307+
jclass nullClazz = env.FindClass(nullObjName);
308+
jmethodID ctor = env.GetMethodID(nullClazz, "<init>", nullObjCtorSig);
299309
jclass clazzToNull = env.FindClass(type.c_str());
300310
jobject nullObjType = env.NewObject(nullClazz, ctor, clazzToNull);
301311

src/jni/MetadataNode.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -286,10 +286,8 @@ void MetadataNode::NullObjectAccessorGetterCallback(Local<String> property,const
286286
DEBUG_WRITE("NullObjectAccessorGetterCallback node name: %s", node->GetName().c_str());
287287

288288
Local<Object> value = Object::New(isolate);
289-
auto k = ConvertToV8String("node");
290-
value->SetHiddenValue(k, External::New(isolate, node));
291-
value->SetHiddenValue(ConvertToV8String("isnull"), Boolean::New(isolate, true));
292-
// TODO: Pesho: Set .valueOf() callback to return null
289+
value->SetHiddenValue(V8StringConstants::GetNullNodeName(), External::New(isolate, node));
290+
// TODO: pete: Set .valueOf() callback to return null
293291

294292
info.GetReturnValue().Set(value);
295293
}

src/jni/MethodCache.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,15 +104,12 @@ string MethodCache::GetType(const v8::Local<v8::Value>& value)
104104
{
105105
auto objVal = value->ToObject();
106106

107-
string const IS_NULL_FIELD = "isnull";
108-
string const NODE_FIELD = "node";
109-
Local<Value> a = objVal->GetHiddenValue(ConvertToV8String(IS_NULL_FIELD));
107+
Local<Value> nullNode = objVal->GetHiddenValue(V8StringConstants::GetNullNodeName());
110108

111-
if(!a.IsEmpty()) {
112-
auto node = objVal->GetHiddenValue(ConvertToV8String(NODE_FIELD));
113-
auto n = reinterpret_cast<MetadataNode*>(node.As<External>()->Value());
109+
if(!nullNode.IsEmpty()) {
110+
auto treeNode = reinterpret_cast<MetadataNode*>(nullNode.As<External>()->Value());
114111

115-
type = (n != nullptr) ? n->GetName() : "<unknown>";
112+
type = (treeNode != nullptr) ? treeNode->GetName() : "<unknown>";
116113

117114
DEBUG_WRITE("Parameter of type %s with NULL value is passed to the method.", type.c_str());
118115
return type;

src/jni/V8StringConstants.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@ namespace tns
3939
return Local<String>::New(isolate, *NULL_OBJECT_PERSISTENT);
4040
}
4141

42+
Local<String> V8StringConstants::GetNullNodeName()
43+
{
44+
auto isolate = Isolate::GetCurrent();
45+
if (NULL_NODE_NAME_PERSISTENT == nullptr)
46+
{
47+
auto str = String::NewFromUtf8(isolate, NULL_NODE_NAME.c_str());
48+
NULL_NODE_NAME_PERSISTENT = new Persistent<String>(Isolate::GetCurrent(), str);
49+
}
50+
return Local<String>::New(isolate, *NULL_NODE_NAME_PERSISTENT);
51+
}
52+
4253
Local<String> V8StringConstants::GetIsPrototypeImplementationObject()
4354
{
4455
auto isolate = Isolate::GetCurrent();
@@ -196,6 +207,7 @@ namespace tns
196207
const string V8StringConstants::CLASS_IMPLEMENTATION_OBJECT = "t::ClassImplementationObject";
197208
const string V8StringConstants::EXTEND = "extend";
198209
const string V8StringConstants::NULL_OBJECT = "null";
210+
const string V8StringConstants::NULL_NODE_NAME = "nullNode";
199211
const string V8StringConstants::IS_PROTOTYPE_IMPLEMENTATION_OBJECT = "__isPrototypeImplementationObject";
200212
const string V8StringConstants::NATIVE_EXCEPTION = "nativeException";
201213
const string V8StringConstants::STACK_TRACE = "stackTrace";
@@ -222,6 +234,7 @@ namespace tns
222234
Persistent<String> *V8StringConstants::CLASS_IMPLEMENTATION_OBJECT_PERSISTENT;
223235
Persistent<String> *V8StringConstants::EXTEND_PERSISTENT;
224236
Persistent<String> *V8StringConstants::NULL_OBJECT_PERSISTENT;
237+
Persistent<String> *V8StringConstants::NULL_NODE_NAME_PERSISTENT;
225238
Persistent<String> *V8StringConstants::IS_PROTOTYPE_IMPLEMENTATION_OBJECT_PERSISTENT;
226239
Persistent<String> *V8StringConstants::NATIVE_EXCEPTION_PERSISTENT;
227240
Persistent<String> *V8StringConstants::STACK_TRACE_PERSISTENT;

src/jni/V8StringConstants.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ namespace tns
3434
static v8::Local<v8::String> GetDebugName();
3535
static v8::Local<v8::String> GetExtend();
3636
static v8::Local<v8::String> GetNullObject();
37+
static v8::Local<v8::String> GetNullNodeName();
3738
static v8::Local<v8::String> GetIsPrototypeImplementationObject();
3839
static v8::Local<v8::String> GetNativeException();
3940
static v8::Local<v8::String> GetStackTrace();
@@ -53,6 +54,7 @@ namespace tns
5354
static const std::string DEBUG_NAME;
5455
static const std::string EXTEND;
5556
static const std::string NULL_OBJECT;
57+
static const std::string NULL_NODE_NAME;
5658
static const std::string IS_PROTOTYPE_IMPLEMENTATION_OBJECT;
5759
static const std::string NATIVE_EXCEPTION;
5860
static const std::string STACK_TRACE;
@@ -83,6 +85,7 @@ namespace tns
8385
static v8::Persistent<v8::String> *DEBUG_NAME_PERSISTENT;
8486
static v8::Persistent<v8::String> *EXTEND_PERSISTENT;
8587
static v8::Persistent<v8::String> *NULL_OBJECT_PERSISTENT;
88+
static v8::Persistent<v8::String> *NULL_NODE_NAME_PERSISTENT;
8689
static v8::Persistent<v8::String> *IS_PROTOTYPE_IMPLEMENTATION_OBJECT_PERSISTENT;
8790
static v8::Persistent<v8::String> *NATIVE_EXCEPTION_PERSISTENT;
8891
static v8::Persistent<v8::String> *STACK_TRACE_PERSISTENT;

0 commit comments

Comments
 (0)