Skip to content

Commit dabb834

Browse files
author
Mihail Slavchev
authored
Merge pull request #638 from NativeScript/slavchev/issue-637
allow extending Java classes when source location is unknown
2 parents baf1427 + f8fcfa7 commit dabb834

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

runtime/src/main/java/com/tns/ClassResolver.java

+7
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ public Class<?> resolveClass(String fullClassName, DexFactory dexFactory, String
2323
className = cannonicalClassName.substring(0, classExtendSeparatorIndex);
2424
name = cannonicalClassName.substring(classExtendSeparatorIndex + 1);
2525
}
26+
else {
27+
classExtendSeparatorIndex = cannonicalClassName.indexOf("_unknown_location");
28+
if (classExtendSeparatorIndex != -1) {
29+
className = cannonicalClassName.substring(0, classExtendSeparatorIndex);
30+
name = cannonicalClassName.substring(classExtendSeparatorIndex + 1);
31+
}
32+
}
2633

2734
Class<?> clazz = null;
2835
boolean isBindingClass = cannonicalClassName.startsWith("com.tns.gen") && !cannonicalClassName.startsWith("com.tns.tests.");

runtime/src/main/jni/MetadataNode.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1614,9 +1614,9 @@ bool MetadataNode::GetExtendLocation(string& extendLocation)
16141614
auto scriptName = frame->GetScriptName();
16151615
if (scriptName.IsEmpty())
16161616
{
1617-
extendLocationStream << "unkown location";
1617+
extendLocationStream << "unknown_location";
16181618
extendLocation = extendLocationStream.str();
1619-
return false;
1619+
return true;
16201620
}
16211621

16221622
string srcFileName = ArgConverter::ConvertToString(scriptName);

test-app/app/src/main/assets/app/tests/tests.js

+13
Original file line numberDiff line numberDiff line change
@@ -1695,4 +1695,17 @@ describe("Tests ", function () {
16951695

16961696
expect(called).toBe(true);
16971697
});
1698+
1699+
it("should extend Java class in eval", function () {
1700+
var source='global.MyObj = java.lang.Object.extend(\
1701+
{\
1702+
hashCode: function () {\
1703+
return 1234;\
1704+
}\
1705+
}\
1706+
)';
1707+
eval('('+source+')')
1708+
var o = new MyObj();
1709+
expect(o.hashCode()).toBe(1234);
1710+
});
16981711
});

0 commit comments

Comments
 (0)