@@ -342,6 +342,8 @@ private void writeBinding(Writer w, DataRow dataRow, JavaClass clazz, String pac
342
342
w .writeln ();
343
343
344
344
boolean isApplicationClass = isApplicationClass (clazz , classes );
345
+ boolean isActivityClass = isActivityClass (clazz , classes );
346
+
345
347
if (isApplicationClass && !packageName .equals ("com.tns" )) {
346
348
w .writeln ("import com.tns.RuntimeHelper;" );
347
349
w .writeln ("import com.tns.Runtime;" );
@@ -435,7 +437,7 @@ private void writeBinding(Writer w, DataRow dataRow, JavaClass clazz, String pac
435
437
}
436
438
for (Method m : ifaceMethods ) {
437
439
if (!notImplementedObjectMethods .contains (m )) {
438
- writeMethodBody (m , w , isApplicationClass , true );
440
+ writeMethodBody (m , w , isApplicationClass , isActivityClass , true );
439
441
}
440
442
}
441
443
} else {
@@ -449,7 +451,7 @@ private void writeBinding(Writer w, DataRow dataRow, JavaClass clazz, String pac
449
451
if (interfaceMethods .contains (m )) {
450
452
isInterfaceMethod = true ;
451
453
}
452
- writeMethodBody (m , w , isApplicationClass , isInterfaceMethod );
454
+ writeMethodBody (m , w , isApplicationClass , isActivityClass , isInterfaceMethod );
453
455
}
454
456
}
455
457
}
@@ -479,7 +481,7 @@ private boolean isClassApplication(JavaClass clazz) {
479
481
className .equals ("android.test.mock.MockApplication" );
480
482
}
481
483
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 ) {
483
485
String visibility = m .isPublic () ? "public" : "protected" ;
484
486
w .write ("\t " );
485
487
w .write (visibility );
@@ -491,7 +493,7 @@ private void writeMethodBody(Method m, Writer w, boolean isApplicationClass, boo
491
493
w .write (" " );
492
494
writeThrowsClause (m , w );
493
495
w .writeln (" {" );
494
- writeMethodBody (m , false , isApplicationClass , w , isInterfaceMethod );
496
+ writeMethodBody (m , false , isApplicationClass , isActivityClass , w , isInterfaceMethod );
495
497
w .writeln ("\t }" );
496
498
w .writeln ();
497
499
}
@@ -570,7 +572,7 @@ private void writeConstructors(JavaClass clazz, String classname, boolean hasIni
570
572
w .writeln ("\t \t com.tns.Runtime.initInstance(this);" );
571
573
}
572
574
if (hasInitMethod ) {
573
- writeMethodBody (c , true , false , w , false );
575
+ writeMethodBody (c , true , false , false , w , false );
574
576
}
575
577
if (isClassApplication (clazz )) {
576
578
//get instance method
@@ -584,7 +586,7 @@ private void writeConstructors(JavaClass clazz, String classname, boolean hasIni
584
586
}
585
587
}
586
588
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 ) {
588
590
if (m .getName ().equals ("onCreate" ) && isApplicationClass ) {
589
591
w .writeln ("\t \t com.tns.Runtime runtime = RuntimeHelper.initRuntime(this);" );
590
592
}
@@ -651,6 +653,11 @@ private void writeMethodBody(Method m, boolean isConstructor, boolean isApplicat
651
653
w .writeln ("\t \t \t runtime.run();" );
652
654
w .writeln ("\t \t }" );
653
655
}
656
+
657
+ // call liveSync initialization
658
+ if (m .getName ().equals ("onCreate" ) && isActivityClass ) {
659
+ w .writeln ("\t \t com.tns.RuntimeHelper.initLiveSync(this.getApplication());" );
660
+ }
654
661
}
655
662
656
663
private void writeType (Type t , Writer w ) {
@@ -715,6 +722,31 @@ private boolean isApplicationClass(JavaClass clazz, Map<String, JavaClass> class
715
722
return isApplicationClass ;
716
723
}
717
724
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
+
718
750
private JavaClass getClass (String className ) throws ClassNotFoundException {
719
751
JavaClass clazz = classes .get (className .replace ('$' , '.' ));
720
752
0 commit comments