Skip to content

Commit 071254d

Browse files
author
Mihail Slavchev
committed
bug fix (issue #3)
1 parent 8e7861b commit 071254d

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

src/assets/app/tests/tests.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -1527,6 +1527,15 @@ var TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes =
15271527
Assert(len === 2, "TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes FAILED: Expected length is 2, actual=" + len);
15281528
}
15291529

1530+
var TestCanCallToStringOnClassProxy = function() {
1531+
Log("TEST: TestCanCallToStringOnClassProxy");
1532+
1533+
var view = android.view.View;
1534+
var s = view.toString();
1535+
1536+
Assert(s.length > 0, "TestCanCallToStringOnClassProxy FAILED: Cannot call toString on class proxy");
1537+
}
1538+
15301539
var When_accessing_class_property_on_a_extended_class_it_should_return_the_class_of_the_parent = function() {
15311540
Log("TEST: When_accessing_class_property_on_a_extended_class_it_should_return_the_class_of_the_parent");
15321541

@@ -1708,4 +1717,5 @@ TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString();
17081717
TestObjectReturnValueIsTreatedAsStringWhenItIsString();
17091718
TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava();
17101719
TestCanCallMethodThatReturnsArrayOfInterfaces();
1711-
TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes();
1720+
TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes();
1721+
TestCanCallToStringOnClassProxy();

src/jni/MetadataNode.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ Handle<Object> MetadataNode::CreateClassProxy(Isolate *isolate)
280280
bool success = classProxyFunction->SetPrototype(instance); //this is needed for static functions like so: var MyButton = Button.extends(); MyButton.StaticMethod();
281281
ASSERT_MESSAGE(success, "CreateClassProxy: SetPrototype failed");
282282
V8SetHiddenValue(classProxyFunction, METADATA_NODE_KEY_NAME, external);
283+
V8SetHiddenValue(classProxyFunction, CLASS_PROXY, Boolean::New(isolate, true));
283284

284285
success = classProxyFunction->SetHiddenValue(V8StringConstants::GetTSuper(), Boolean::New(isolate, true));
285286
ASSERT_MESSAGE(success, "CreateClassProxy: mark classProxyFunction as super object failed");
@@ -625,6 +626,12 @@ void MetadataNode::GetterCallback(Local<String> property, const PropertyCallback
625626
uint8_t nodeType = s_metadataReader.GetNodeType(node->m_treeNode);
626627

627628
auto superValue = thiz->GetHiddenValue(V8StringConstants::GetTSuper());
629+
if (propName == V8StringConstants::TO_STRING)
630+
{
631+
auto classProxy = V8GetHiddenValue(thiz, CLASS_PROXY);
632+
if (!classProxy.IsEmpty())
633+
return;
634+
}
628635
bool shouldCallJSOverrideWithoutGoingToJava = !thiz.IsEmpty() && propName != V8StringConstants::TO_STRING && !isMarkedAsSuper;
629636
if (shouldCallJSOverrideWithoutGoingToJava)
630637
{
@@ -1482,6 +1489,7 @@ CallJavaMethodCallback MetadataNode::s_callJavaMethod = nullptr;
14821489
RegisterInstanceCallback MetadataNode::s_registerInstance = nullptr;
14831490
GetTypeMetadataCallback MetadataNode::s_getTypeMetadata = nullptr;
14841491
string MetadataNode::METADATA_NODE_KEY_NAME = "t::MetadataNode";
1492+
string MetadataNode::CLASS_PROXY = "t::ClassProxy";
14851493
string MetadataNode::TNS_PREFIX = "com/tns/";
14861494
string MetadataNode::TNS_TESTS_PREFIX = "com/tns/tests/";
14871495
MetadataReader MetadataNode::s_metadataReader;

src/jni/MetadataNode.h

+1
Original file line numberDiff line numberDiff line change
@@ -207,5 +207,6 @@ namespace tns
207207

208208
static MetadataReader s_metadataReader;
209209

210+
static std::string CLASS_PROXY;
210211
};
211212
}

0 commit comments

Comments
 (0)