From 05ae3e7ceee2dd66bd0b8e5c6bc8dc972e8a0107 Mon Sep 17 00:00:00 2001 From: Krzysztof Piaskowy Date: Mon, 27 Nov 2023 15:12:00 +0100 Subject: [PATCH 1/3] Fix Binding JNI type --- .../main/java/com/facebook/react/fabric/FabricUIManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 525f8ff34732..74daedf706eb 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -161,7 +161,7 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { FabricSoLoader.staticInit(); } - @Nullable private Binding mBinding; + @Nullable private BindingImpl mBinding; @NonNull private final ReactApplicationContext mReactApplicationContext; @NonNull private final MountingManager mMountingManager; @NonNull private final EventDispatcher mEventDispatcher; @@ -834,7 +834,7 @@ public void runGuarded() { } } - public void setBinding(Binding binding) { + public void setBinding(BindingImpl binding) { mBinding = binding; } From de929303cf1a654286beb68aff43d141e6e95312 Mon Sep 17 00:00:00 2001 From: Krzysztof Piaskowy Date: Tue, 28 Nov 2023 16:28:34 +0100 Subject: [PATCH 2/3] Add interface casting --- .../main/java/com/facebook/react/fabric/FabricUIManager.java | 4 ++-- .../ReactAndroid/src/main/jni/react/fabric/Binding.h | 5 +++++ .../src/main/jni/react/fabric/JFabricUIManager.cpp | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 74daedf706eb..525f8ff34732 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -161,7 +161,7 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { FabricSoLoader.staticInit(); } - @Nullable private BindingImpl mBinding; + @Nullable private Binding mBinding; @NonNull private final ReactApplicationContext mReactApplicationContext; @NonNull private final MountingManager mMountingManager; @NonNull private final EventDispatcher mEventDispatcher; @@ -834,7 +834,7 @@ public void runGuarded() { } } - public void setBinding(BindingImpl binding) { + public void setBinding(Binding binding) { mBinding = binding; } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/Binding.h b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/Binding.h index d447a501ef03..3657e01d6be6 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/Binding.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/Binding.h @@ -34,6 +34,11 @@ class ReactNativeConfig; class Scheduler; class SurfaceHandlerBinding; +struct JBinding : public jni::JavaClass { + constexpr static auto kJavaDescriptor = + "Lcom/facebook/react/fabric/Binding;"; +}; + class Binding : public jni::HybridClass, public SchedulerDelegate, public LayoutAnimationStatusDelegate { diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/JFabricUIManager.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/JFabricUIManager.cpp index a2ccdbf5d570..d954dc33f300 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/JFabricUIManager.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/JFabricUIManager.cpp @@ -13,8 +13,8 @@ namespace facebook::react { Binding* JFabricUIManager::getBinding() { static const auto bindingField = - javaClassStatic()->getField("mBinding"); + javaClassStatic()->getField("mBinding"); - return getFieldValue(bindingField)->cthis(); + return jni::static_ref_cast(getFieldValue(bindingField))->cthis(); } } // namespace facebook::react From ee02a9d7b5ef875d61d64359d42474f67da7606c Mon Sep 17 00:00:00 2001 From: Krzysztof Piaskowy Date: Tue, 28 Nov 2023 17:06:47 +0100 Subject: [PATCH 3/3] Add missing template --- .../ReactAndroid/src/main/jni/react/fabric/Binding.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/Binding.h b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/Binding.h index 3657e01d6be6..161c9285dcc9 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/Binding.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/Binding.h @@ -39,7 +39,7 @@ struct JBinding : public jni::JavaClass { "Lcom/facebook/react/fabric/Binding;"; }; -class Binding : public jni::HybridClass, +class Binding : public jni::HybridClass, public SchedulerDelegate, public LayoutAnimationStatusDelegate { public: