Skip to content

Commit 8a7cbdf

Browse files
author
Mihail Slavchev
committed
Merge pull request #364 from NativeScript/slavchev/refactor-application-activity
refactor Application and Activity instantiation
2 parents f8d5392 + 4b062d4 commit 8a7cbdf

30 files changed

Lines changed: 453 additions & 6593 deletions

src/jni/Android.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ LOCAL_CPPFLAGS += -std=c++11
6464
LOCAL_MODULE := NativeScript
6565
LOCAL_SRC_FILES := com_tns_AssetExtractor.cpp AssetExtractor.cpp\
6666
com_tns_Platform.cpp NativePlatform.cpp \
67-
com_tns_JsDebugger.cpp com_tns_NativeScriptActity.cpp \
67+
com_tns_JsDebugger.cpp \
6868
JEnv.cpp DirectBuffer.cpp NativeScriptException.cpp \
6969
JsDebugger.cpp SimpleAllocator.cpp \
7070
NativeScriptRuntime.cpp MetadataNode.cpp MetadataTreeNode.cpp MetadataReader.cpp \

src/jni/MetadataNode.cpp

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,13 +1027,6 @@ void MetadataNode::MethodCallback(const v8::FunctionCallbackInfo<v8::Value>& inf
10271027
isSuper = !superValue.IsEmpty() && superValue->IsTrue();
10281028
}
10291029

1030-
// // TODO: refactor this
1031-
if (isSuper && (*className == "com/tns/NativeScriptActivity"))
1032-
{
1033-
string activityBaseClassName("android/app/Activity");
1034-
className = &activityBaseClassName;
1035-
}
1036-
10371030
if ((argLength == 0) && (methodName == V8StringConstants::VALUE_OF))
10381031
{
10391032
info.GetReturnValue().Set(thiz);
@@ -1350,17 +1343,55 @@ void MetadataNode::ExtendCallMethodCallback(const v8::FunctionCallbackInfo<v8::V
13501343
Local<Object> implementationObject;
13511344
Local<String> extendName;
13521345
string extendLocation;
1353-
auto validArgs = ValidateExtendArguments(info, extendLocation, extendName, implementationObject);
13541346

1355-
if (!validArgs)
1356-
return;
1347+
auto hasDot = false;
1348+
if (info.Length() == 2)
1349+
{
1350+
if (info[0].IsEmpty() || !info[0]->IsString())
1351+
{
1352+
stringstream ss;
1353+
ss << "Invalid extend() call. No name for extend specified at location: " << extendLocation.c_str();
1354+
string exceptionMessage = ss.str();
1355+
1356+
throw NativeScriptException(exceptionMessage);
1357+
}
1358+
if (info[1].IsEmpty() || !info[1]->IsObject())
1359+
{
1360+
stringstream ss;
1361+
ss << "Invalid extend() call. Named extend should be called with second object parameter containing overridden methods at location: " << extendLocation.c_str();
1362+
string exceptionMessage = ss.str();
1363+
1364+
throw NativeScriptException(exceptionMessage);
1365+
}
1366+
string strName = ConvertToString(info[0].As<String>());
1367+
hasDot = strName.find('.') != string::npos;
1368+
}
1369+
if (hasDot)
1370+
{
1371+
extendName = info[0].As<String>();
1372+
implementationObject = info[1].As<Object>();
1373+
}
1374+
else
1375+
{
1376+
auto validArgs = ValidateExtendArguments(info, extendLocation, extendName, implementationObject);
13571377

1378+
if (!validArgs)
1379+
return;
1380+
}
13581381
auto node = reinterpret_cast<MetadataNode*>(info.Data().As<External>()->Value());
13591382

13601383
DEBUG_WRITE("ExtendsCallMethodHandler: called with %s", ConvertToString(extendName).c_str());
13611384

13621385
string extendNameAndLocation = extendLocation + ConvertToString(extendName);
1363-
auto fullClassName = TNS_PREFIX + CreateFullClassName(node->m_name, extendNameAndLocation);
1386+
string fullClassName;
1387+
if (!hasDot)
1388+
{
1389+
fullClassName = TNS_PREFIX + CreateFullClassName(node->m_name, extendNameAndLocation);
1390+
}
1391+
else
1392+
{
1393+
fullClassName = ConvertToString(info[0].As<String>());
1394+
}
13641395

13651396
//
13661397
//resolve class (pre-generated or generated runtime from dex generator)

src/jni/NativePlatform.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,6 @@ void NativePlatform::CreateJSInstanceNative(JNIEnv *_env, jobject obj, jobject j
203203
Local<Object> implementationObject;
204204

205205
auto proxyClassName = g_objectManager->GetClassName(javaObject);
206-
//
207-
if (proxyClassName == "com/tns/NativeScriptActivity")
208-
{
209-
return;
210-
}
211-
//
212206
DEBUG_WRITE("createJSInstanceNative class %s", proxyClassName.c_str());
213207
jsInstance = MetadataNode::CreateExtendedJSWrapper(isolate, proxyClassName);
214208
if (jsInstance.IsEmpty())

src/jni/com_tns_NativeScriptActity.cpp

Lines changed: 0 additions & 86 deletions
This file was deleted.

src/src/com/tns/AssetExtractor.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import java.io.File;
44

5-
import com.tns.internal.ExtractPolicy;
6-
import com.tns.internal.FileExtractor;
75

86
import android.content.Context;
97

src/src/com/tns/DexFactory.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,6 @@ public DexFactory(Logger logger, ClassLoader classLoader, File dexBaseDir, Strin
6464

6565
public Class<?> resolveClass(String name, String className, String[] methodOverrides) throws ClassNotFoundException, IOException
6666
{
67-
if (className.contains("NativeScriptActivity"))
68-
{
69-
// Do not extend NativeScriptActivity - it is already extended
70-
return NativeScriptActivity.class;
71-
}
72-
7367
String fullClassName = className.replace("$", "_") + CLASS_NAME_LOCATION_SEPARATOR + name;
7468

7569
// try to get pre-generated binding classes

src/src/com/tns/internal/ExtractPolicy.java renamed to src/src/com/tns/ExtractPolicy.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
package com.tns.internal;
1+
package com.tns;
2+
23

34
public interface ExtractPolicy
45
{

src/src/com/tns/internal/FileExtractor.java renamed to src/src/com/tns/FileExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.tns.internal;
1+
package com.tns;
22

33
public interface FileExtractor
44
{
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.tns;
2+
3+
import java.lang.annotation.Retention;
4+
import java.lang.annotation.RetentionPolicy;
5+
6+
@Retention(RetentionPolicy.RUNTIME)
7+
public @interface JavaScriptImplementation
8+
{
9+
String javaScriptFile();
10+
}

0 commit comments

Comments
 (0)