diff --git a/ReactCommon/fabric/core/shadownode/ShadowNode.cpp b/ReactCommon/fabric/core/shadownode/ShadowNode.cpp index 019237129..4b2ebc4a2 100644 --- a/ReactCommon/fabric/core/shadownode/ShadowNode.cpp +++ b/ReactCommon/fabric/core/shadownode/ShadowNode.cpp @@ -93,6 +93,10 @@ Tag ShadowNode::getRootTag() const { return rootTag_; } +const ComponentDescriptor &ShadowNode::getComponentDescriptor() const { + return componentDescriptor_; +} + const State::Shared &ShadowNode::getState() const { return state_; } diff --git a/ReactCommon/fabric/core/shadownode/ShadowNode.h b/ReactCommon/fabric/core/shadownode/ShadowNode.h index 0f9e28759..e1d63ab69 100644 --- a/ReactCommon/fabric/core/shadownode/ShadowNode.h +++ b/ReactCommon/fabric/core/shadownode/ShadowNode.h @@ -78,6 +78,11 @@ class ShadowNode : public virtual Sealable, Tag getTag() const; Tag getRootTag() const; + /* + * Returns a concrete `ComponentDescriptor` that manages nodes of this type. + */ + const ComponentDescriptor &getComponentDescriptor() const; + /* * Returns a state associated with the particular node. */ diff --git a/ReactCommon/fabric/uimanager/UIManager.cpp b/ReactCommon/fabric/uimanager/UIManager.cpp index da321b297..da06855ea 100644 --- a/ReactCommon/fabric/uimanager/UIManager.cpp +++ b/ReactCommon/fabric/uimanager/UIManager.cpp @@ -45,9 +45,7 @@ SharedShadowNode UIManager::cloneNode( const RawProps *rawProps) const { SystraceSection s("UIManager::cloneNode"); - auto &componentDescriptor = - componentDescriptorRegistry_->at(shadowNode->getComponentHandle()); - + auto &componentDescriptor = shadowNode->getComponentDescriptor(); auto clonedShadowNode = componentDescriptor.cloneShadowNode( *shadowNode, { @@ -69,8 +67,7 @@ void UIManager::appendChild( const SharedShadowNode &childShadowNode) const { SystraceSection s("UIManager::appendChild"); - auto &componentDescriptor = - componentDescriptorRegistry_->at(parentShadowNode->getComponentHandle()); + auto &componentDescriptor = parentShadowNode->getComponentDescriptor(); componentDescriptor.appendChild(parentShadowNode, childShadowNode); } @@ -92,8 +89,7 @@ void UIManager::setNativeProps( long startCommitTime = getTime(); - auto &componentDescriptor = - componentDescriptorRegistry_->at(shadowNode->getComponentHandle()); + auto &componentDescriptor = shadowNode->getComponentDescriptor(); auto props = componentDescriptor.cloneProps(shadowNode->getProps(), rawProps); auto newShadowNode = shadowNode->clone({ /* .tag = */ ShadowNodeFragment::tagPlaceholder(), @@ -148,8 +144,7 @@ void UIManager::updateState( const StateData::Shared &rawStateData) const { long startCommitTime = getTime(); - auto &componentDescriptor = - componentDescriptorRegistry_->at(shadowNode->getComponentHandle()); + auto &componentDescriptor = shadowNode->getComponentDescriptor(); auto state = componentDescriptor.createState(shadowNode->getState(), rawStateData); auto newShadowNode = shadowNode->clone({