Skip to content

Commit 3991c31

Browse files
committed
Merge branch 'release' into trifonov/v8-lock
2 parents ec36e5a + a09d51a commit 3991c31

File tree

6 files changed

+66
-16
lines changed

6 files changed

+66
-16
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
==
33

44
## What's New
5+
- [Upgrade v8 to 6.7.288.46(#1130)](https://github.com/NativeScript/android-runtime/issues/1130)
56
- [Static binding generator now uses bundled npm packages(#1096)](https://github.com/NativeScript/android-runtime/issues/1096)
67
- [Add gradle dependencies versions in package.json(#1102)](https://github.com/NativeScript/android-runtime/issues/1102)
78
- [Introduce a setting for auto catching exceptions when calling JS method native(#1119)](https://github.com/NativeScript/android-runtime/issues/1119)

test-app/app/src/main/assets/app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@
99
"markingMode": "full",
1010
"maxLogcatObjectSize": 1024,
1111
"forceLog": false,
12-
"autoCatchJSMethodNativeCalls": false
12+
"discardUncaughtJsExceptions": false
1313
}
1414
}

test-app/app/src/main/java/com/tns/RuntimeHelper.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ public static Runtime initRuntime(Application app) {
192192

193193
// if app is in debuggable mode run livesync service
194194
// runtime needs to be initialized before the NativeScriptSyncService is enabled because it uses runtime.runScript(...)
195-
initLiveSync(runtime, logger, app);
195+
// initLiveSync(runtime, logger, app);
196196
}
197197

198198
runtime.runScript(new File(appDir, "internal/ts_helpers.js"));
@@ -262,6 +262,15 @@ public void onReceive(Context context, Intent intent) {
262262
context.registerReceiver(timezoneReceiver, timezoneFilter);
263263
}
264264

265+
public static void initLiveSync(Application app) {
266+
Runtime currentRuntime = Runtime.getCurrentRuntime();
267+
if (!currentRuntime.getIsLiveSyncStarted()) {
268+
initLiveSync(currentRuntime, currentRuntime.getLogger(), app);
269+
currentRuntime.setIsLiveSyncStarted(true);
270+
}
271+
272+
}
273+
265274
public static void initLiveSync(Runtime runtime, Logger logger, Application app){
266275
boolean isDebuggable = Util.isDebuggableApp(app);
267276

test-app/build-tools/static-binding-generator/src/main/java/org/nativescript/staticbindinggenerator/Generator.java

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,8 @@ private void writeBinding(Writer w, DataRow dataRow, JavaClass clazz, String pac
342342
w.writeln();
343343

344344
boolean isApplicationClass = isApplicationClass(clazz, classes);
345+
boolean isActivityClass = isActivityClass(clazz, classes);
346+
345347
if (isApplicationClass && !packageName.equals("com.tns")) {
346348
w.writeln("import com.tns.RuntimeHelper;");
347349
w.writeln("import com.tns.Runtime;");
@@ -435,7 +437,7 @@ private void writeBinding(Writer w, DataRow dataRow, JavaClass clazz, String pac
435437
}
436438
for (Method m : ifaceMethods) {
437439
if (!notImplementedObjectMethods.contains(m)) {
438-
writeMethodBody(m, w, isApplicationClass, true);
440+
writeMethodBody(m, w, isApplicationClass, isActivityClass, true);
439441
}
440442
}
441443
} else {
@@ -449,7 +451,7 @@ private void writeBinding(Writer w, DataRow dataRow, JavaClass clazz, String pac
449451
if (interfaceMethods.contains(m)) {
450452
isInterfaceMethod = true;
451453
}
452-
writeMethodBody(m, w, isApplicationClass, isInterfaceMethod);
454+
writeMethodBody(m, w, isApplicationClass, isActivityClass, isInterfaceMethod);
453455
}
454456
}
455457
}
@@ -479,7 +481,7 @@ private boolean isClassApplication(JavaClass clazz) {
479481
className.equals("android.test.mock.MockApplication");
480482
}
481483

482-
private void writeMethodBody(Method m, Writer w, boolean isApplicationClass, boolean isInterfaceMethod) {
484+
private void writeMethodBody(Method m, Writer w, boolean isApplicationClass, boolean isActivityClass, boolean isInterfaceMethod) {
483485
String visibility = m.isPublic() ? "public" : "protected";
484486
w.write("\t");
485487
w.write(visibility);
@@ -491,7 +493,7 @@ private void writeMethodBody(Method m, Writer w, boolean isApplicationClass, boo
491493
w.write(" ");
492494
writeThrowsClause(m, w);
493495
w.writeln(" {");
494-
writeMethodBody(m, false, isApplicationClass, w, isInterfaceMethod);
496+
writeMethodBody(m, false, isApplicationClass, isActivityClass, w, isInterfaceMethod);
495497
w.writeln("\t}");
496498
w.writeln();
497499
}
@@ -570,7 +572,7 @@ private void writeConstructors(JavaClass clazz, String classname, boolean hasIni
570572
w.writeln("\t\tcom.tns.Runtime.initInstance(this);");
571573
}
572574
if (hasInitMethod) {
573-
writeMethodBody(c, true, false, w, false);
575+
writeMethodBody(c, true, false, false, w, false);
574576
}
575577
if (isClassApplication(clazz)) {
576578
//get instance method
@@ -584,7 +586,7 @@ private void writeConstructors(JavaClass clazz, String classname, boolean hasIni
584586
}
585587
}
586588

587-
private void writeMethodBody(Method m, boolean isConstructor, boolean isApplicationClass, Writer w, boolean isInterfaceMethod) {
589+
private void writeMethodBody(Method m, boolean isConstructor, boolean isApplicationClass, boolean isActivityClass, Writer w, boolean isInterfaceMethod) {
588590
if (m.getName().equals("onCreate") && isApplicationClass) {
589591
w.writeln("\t\tcom.tns.Runtime runtime = RuntimeHelper.initRuntime(this);");
590592
}
@@ -651,6 +653,11 @@ private void writeMethodBody(Method m, boolean isConstructor, boolean isApplicat
651653
w.writeln("\t\t\truntime.run();");
652654
w.writeln("\t\t}");
653655
}
656+
657+
// call liveSync initialization
658+
if (m.getName().equals("onCreate") && isActivityClass) {
659+
w.writeln("\t\tcom.tns.RuntimeHelper.initLiveSync(this.getApplication());");
660+
}
654661
}
655662

656663
private void writeType(Type t, Writer w) {
@@ -715,6 +722,31 @@ private boolean isApplicationClass(JavaClass clazz, Map<String, JavaClass> class
715722
return isApplicationClass;
716723
}
717724

725+
private boolean isActivityClass(JavaClass clazz, Map<String, JavaClass> classes) throws ClassNotFoundException {
726+
boolean isActivityClass = false;
727+
728+
String activityClassname = "android.app.Activity";
729+
730+
JavaClass currentClass = clazz;
731+
while (true) {
732+
String currentClassname = currentClass.getClassName();
733+
734+
isActivityClass = currentClassname.equals(activityClassname);
735+
if (isActivityClass) {
736+
break;
737+
}
738+
739+
if (currentClassname.endsWith("java.lang.Object")) {
740+
break;
741+
}
742+
743+
String superClassName = currentClass.getSuperclassName();
744+
currentClass = getClass(superClassName);
745+
}
746+
747+
return isActivityClass;
748+
}
749+
718750
private JavaClass getClass(String className) throws ClassNotFoundException {
719751
JavaClass clazz = classes.get(className.replace('$', '.'));
720752

test-app/runtime/src/main/java/com/tns/AppConfig.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ protected enum KnownKeys {
2020
HandleTimeZoneChanges("handleTimeZoneChanges", false),
2121
MaxLogcatObjectSize("maxLogcatObjectSize", 1024),
2222
ForceLog("forceLog", false),
23-
AutoCatchJSMethodNativeCalls("autoCatchJSMethodNativeCalls", false);
23+
DiscardUncaughtJsExceptions("discardUncaughtJsExceptions", false);
2424

2525
private final String name;
2626
private final Object defaultValue;
@@ -113,8 +113,8 @@ public AppConfig(File appDir) {
113113
if (androidObject.has(KnownKeys.ForceLog.getName())) {
114114
values[KnownKeys.ForceLog.ordinal()] = androidObject.getBoolean(KnownKeys.ForceLog.getName());
115115
}
116-
if (androidObject.has(KnownKeys.AutoCatchJSMethodNativeCalls.getName())) {
117-
values[KnownKeys.AutoCatchJSMethodNativeCalls.ordinal()] = androidObject.getBoolean(KnownKeys.AutoCatchJSMethodNativeCalls.getName());
116+
if (androidObject.has(KnownKeys.DiscardUncaughtJsExceptions.getName())) {
117+
values[KnownKeys.DiscardUncaughtJsExceptions.ordinal()] = androidObject.getBoolean(KnownKeys.DiscardUncaughtJsExceptions.getName());
118118
}
119119
}
120120
}
@@ -167,7 +167,7 @@ public boolean getForceLog() {
167167
return (boolean)values[KnownKeys.ForceLog.ordinal()];
168168
}
169169

170-
public boolean getAutoCatchJSMethodNativeCalls() {
171-
return (boolean)values[KnownKeys.AutoCatchJSMethodNativeCalls.ordinal()];
170+
public boolean getDiscardUncaughtJsExceptions() {
171+
return (boolean)values[KnownKeys.DiscardUncaughtJsExceptions.ordinal()];
172172
}
173173
}

test-app/runtime/src/main/java/com/tns/Runtime.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,14 @@ void passUncaughtExceptionToJs(Throwable ex, String stackTrace) {
106106

107107
private Logger logger;
108108

109+
private boolean isLiveSyncStarted;
110+
public boolean getIsLiveSyncStarted() { return this.isLiveSyncStarted; }
111+
public void setIsLiveSyncStarted(boolean value) { this.isLiveSyncStarted = value; }
112+
113+
public Logger getLogger() {
114+
return this.logger;
115+
}
116+
109117
private ThreadScheduler threadScheduler;
110118

111119
private DexFactory dexFactory;
@@ -1098,14 +1106,14 @@ private Object dispatchCallJSMethodNative(final int javaObjectID, final String m
10981106
boolean isWorkThread = threadScheduler.getThread().equals(Thread.currentThread());
10991107

11001108
final Object[] tmpArgs = extendConstructorArgs(methodName, isConstructor, args);
1101-
final boolean autoCatchJSMethodNativeCalls = this.config.appConfig.getAutoCatchJSMethodNativeCalls();
1109+
final boolean discardUncaughtJsExceptions = this.config.appConfig.getDiscardUncaughtJsExceptions();
11021110

11031111
if (isWorkThread) {
11041112
Object[] packagedArgs = packageArgs(tmpArgs);
11051113
try {
11061114
ret = callJSMethodNative(getRuntimeId(), javaObjectID, methodName, returnType, isConstructor, packagedArgs);
11071115
} catch (NativeScriptException e) {
1108-
if(autoCatchJSMethodNativeCalls) {
1116+
if(discardUncaughtJsExceptions) {
11091117
logger.write("Error on currentThread for callJSMethodNative:", e.getMessage());
11101118
e.printStackTrace();
11111119
} else {
@@ -1125,7 +1133,7 @@ public void run() {
11251133
final Object[] packagedArgs = packageArgs(tmpArgs);
11261134
arr[0] = callJSMethodNative(getRuntimeId(), javaObjectID, methodName, returnType, isCtor, packagedArgs);
11271135
} catch (NativeScriptException e) {
1128-
if(autoCatchJSMethodNativeCalls) {
1136+
if(discardUncaughtJsExceptions) {
11291137
logger.write("Error off currentThread for callJSMethodNative:", e.getMessage());
11301138
e.printStackTrace();
11311139
} else {

0 commit comments

Comments
 (0)