Skip to content

Commit c483412

Browse files
tomekzawclaude
andauthored
Create StateWrapperImpl from C++ with its state (#59708)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1 parent debaf42 commit c483412

4 files changed

Lines changed: 8 additions & 25 deletions

File tree

‎packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/StateWrapperImpl.kt‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ import com.facebook.react.uimanager.StateWrapper
2828
@OptIn(UnstableReactNativeAPI::class)
2929
internal class StateWrapperImpl private constructor() : HybridClassBase(), ReferenceStateWrapper {
3030

31-
private external fun initHybrid()
32-
3331
private external fun getStateDataImpl(): ReadableNativeMap?
3432

3533
private external fun getStateMapBufferDataImpl(): ReadableMapBuffer?
@@ -65,10 +63,6 @@ internal class StateWrapperImpl private constructor() : HybridClassBase(), Refer
6563
return getStateDataReferenceImpl()
6664
}
6765

68-
init {
69-
initHybrid()
70-
}
71-
7266
override fun updateState(map: WritableMap) {
7367
updateState(map, StateWrapper.UpdateMode.Asynchronous)
7468
}

‎packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.cpp‎

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -439,9 +439,8 @@ inline void writeCreateMountItem(
439439
// lifetime of the Java object
440440
jni::local_ref<StateWrapperImpl::JavaPart> javaStateWrapper = nullptr;
441441
if (mountItem.newChildShadowView.state != nullptr) {
442-
javaStateWrapper = StateWrapperImpl::newObjectJavaArgs();
443-
StateWrapperImpl* cStateWrapper = cthis(javaStateWrapper);
444-
cStateWrapper->setState(mountItem.newChildShadowView.state);
442+
javaStateWrapper =
443+
StateWrapperImpl::newObjectCxxArgs(mountItem.newChildShadowView.state);
445444
}
446445

447446
// Do not hold a reference to javaEventEmitter from the C++ side.
@@ -502,9 +501,7 @@ inline void writeUpdateStateMountItem(
502501
// lifetime of the Java object
503502
jni::local_ref<StateWrapperImpl::JavaPart> javaStateWrapper = nullptr;
504503
if (state != nullptr) {
505-
javaStateWrapper = StateWrapperImpl::newObjectJavaArgs();
506-
StateWrapperImpl* cStateWrapper = cthis(javaStateWrapper);
507-
cStateWrapper->setState(state);
504+
javaStateWrapper = StateWrapperImpl::newObjectCxxArgs(state);
508505
}
509506

510507
buffer.writeObject(
@@ -1213,9 +1210,7 @@ void FabricMountingManager::preallocateRegisteredView(
12131210
bool preventPassingStateWrapperForText =
12141211
strcmp(shadowView.componentName, "Paragraph") == 0;
12151212
if (shadowView.state != nullptr && !preventPassingStateWrapperForText) {
1216-
javaStateWrapper = StateWrapperImpl::newObjectJavaArgs();
1217-
StateWrapperImpl* cStateWrapper = cthis(javaStateWrapper);
1218-
cStateWrapper->setState(shadowView.state);
1213+
javaStateWrapper = StateWrapperImpl::newObjectCxxArgs(shadowView.state);
12191214
}
12201215

12211216
jni::local_ref<jobject> props = getProps({}, shadowView);

‎packages/react-native/ReactAndroid/src/main/jni/react/fabric/StateWrapperImpl.cpp‎

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,6 @@ using namespace facebook::jni;
1717

1818
namespace facebook::react {
1919

20-
/**
21-
* Called from Java constructor through the JNI.
22-
*/
23-
void StateWrapperImpl::initHybrid(jni::alias_ref<jhybridobject> jobj) {
24-
return setCxxInstance(jobj);
25-
}
26-
2720
jni::local_ref<ReadableNativeMap::jhybridobject>
2821
StateWrapperImpl::getStateDataImpl() {
2922
if (state_) {
@@ -71,7 +64,6 @@ std::shared_ptr<const State> StateWrapperImpl::getState() const {
7164

7265
void StateWrapperImpl::registerNatives() {
7366
registerHybrid({
74-
makeNativeMethod("initHybrid", StateWrapperImpl::initHybrid),
7567
makeNativeMethod("getStateDataImpl", StateWrapperImpl::getStateDataImpl),
7668
makeNativeMethod("updateStateImpl", StateWrapperImpl::updateStateImpl),
7769
makeNativeMethod(

‎packages/react-native/ReactAndroid/src/main/jni/react/fabric/StateWrapperImpl.h‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ class StateWrapperImpl : public jni::HybridClass<StateWrapperImpl, StateWrapper>
3232
std::shared_ptr<const State> getState() const;
3333

3434
private:
35-
std::shared_ptr<const State> state_;
35+
friend HybridBase;
36+
37+
explicit StateWrapperImpl(std::shared_ptr<const State> state) : state_(std::move(state)) {}
3638

37-
static void initHybrid(jni::alias_ref<jhybridobject> jobj);
39+
std::shared_ptr<const State> state_;
3840
};
3941

4042
} // namespace facebook::react

0 commit comments

Comments
 (0)