Fabric: []-family of methods was removed from ComponentDescriptorRegistry

Summary:
Motivation:
 * We don't use them much, and we already have `at`-methods, which are better.
* We don't want to expose `ComponentDescriptor`s as shared pointers (because it's not clear, not so performant, and because we don't want to store them as shared pointer in the future);
* In idiomatic C++ `[]` operator has mutating semantic, that's not what we want to communicate via the interface of the class.

Reviewed By: sahrens

Differential Revision: D14963487

fbshipit-source-id: dbfddee2ba90d70c3bb8dcf1959d553571c47bab
This commit is contained in:
Valentin Shergin
2019-04-17 13:27:53 -07:00
committed by Facebook Github Bot
parent 83c0d025f1
commit 45ae1e4411
3 changed files with 26 additions and 45 deletions

View File

@@ -20,23 +20,7 @@ void ComponentDescriptorRegistry::registerComponentDescriptor(
_registryByName[componentName] = componentDescriptor;
}
const SharedComponentDescriptor ComponentDescriptorRegistry::operator[](
const SharedShadowNode &shadowNode) const {
ComponentHandle componentHandle = shadowNode->getComponentHandle();
return _registryByHandle.at(componentHandle);
}
const SharedComponentDescriptor ComponentDescriptorRegistry::operator[](
const ComponentName &componentName) const {
auto it = _registryByName.find(componentName);
if (it == _registryByName.end()) {
throw std::invalid_argument(
("Unable to find componentDescriptor for " + componentName).c_str());
}
return it->second;
}
static const std::string componentNameByReactViewName(std::string viewName) {
static ComponentName componentNameByReactViewName(ComponentName viewName) {
// We need this function only for the transition period;
// eventually, all names will be unified.
@@ -86,8 +70,8 @@ static const std::string componentNameByReactViewName(std::string viewName) {
return viewName;
}
const ComponentDescriptor &ComponentDescriptorRegistry::at(
ComponentName componentName) const {
ComponentDescriptor const &ComponentDescriptorRegistry::at(
ComponentName const &componentName) const {
auto unifiedComponentName = componentNameByReactViewName(componentName);
auto it = _registryByName.find(unifiedComponentName);
@@ -102,28 +86,26 @@ const ComponentDescriptor &ComponentDescriptorRegistry::at(
return *it->second;
}
const ComponentDescriptor &ComponentDescriptorRegistry::at(
ComponentDescriptor const &ComponentDescriptorRegistry::at(
ComponentHandle componentHandle) const {
return *_registryByHandle.at(componentHandle);
}
SharedShadowNode ComponentDescriptorRegistry::createNode(
Tag tag,
const std::string &viewName,
ComponentName const &viewName,
Tag rootTag,
const folly::dynamic &props,
const SharedEventTarget &eventTarget) const {
ComponentName componentName = componentNameByReactViewName(viewName);
const SharedComponentDescriptor &componentDescriptor = (*this)[componentName];
SharedShadowNode shadowNode = componentDescriptor->createShadowNode({
folly::dynamic const &props,
SharedEventTarget const &eventTarget) const {
auto unifiedComponentName = componentNameByReactViewName(viewName);
auto const &componentDescriptor = this->at(unifiedComponentName);
return componentDescriptor.createShadowNode({
/* .tag = */ tag,
/* .rootTag = */ rootTag,
/* .props = */ componentDescriptor->cloneProps(nullptr, RawProps(props)),
/* .props = */ componentDescriptor.cloneProps(nullptr, RawProps(props)),
/* .eventEmitter = */
componentDescriptor->createEventEmitter(std::move(eventTarget), tag),
componentDescriptor.createEventEmitter(std::move(eventTarget), tag),
});
return shadowNode;
}
void ComponentDescriptorRegistry::setFallbackComponentDescriptor(
@@ -132,7 +114,7 @@ void ComponentDescriptorRegistry::setFallbackComponentDescriptor(
registerComponentDescriptor(descriptor);
}
const SharedComponentDescriptor
ComponentDescriptor::Shared
ComponentDescriptorRegistry::getFallbackComponentDescriptor() const {
return _fallbackComponentDescriptor;
}

View File

@@ -23,29 +23,28 @@ using SharedComponentDescriptorRegistry =
*/
class ComponentDescriptorRegistry {
public:
using Shared = std::shared_ptr<const ComponentDescriptorRegistry>;
void registerComponentDescriptor(
SharedComponentDescriptor componentDescriptor);
const ComponentDescriptor &at(ComponentName componentName) const;
const ComponentDescriptor &at(ComponentHandle componentHandle) const;
ComponentDescriptor const &at(ComponentName const &componentName) const;
ComponentDescriptor const &at(ComponentHandle componentHandle) const;
const SharedComponentDescriptor operator[](
const SharedShadowNode &shadowNode) const;
const SharedComponentDescriptor operator[](
const ComponentName &componentName) const;
SharedShadowNode createNode(
Tag tag,
const std::string &viewName,
ComponentName const &viewName,
Tag rootTag,
const folly::dynamic &props,
const SharedEventTarget &eventTarget) const;
folly::dynamic const &props,
SharedEventTarget const &eventTarget) const;
void setFallbackComponentDescriptor(SharedComponentDescriptor descriptor);
const SharedComponentDescriptor getFallbackComponentDescriptor() const;
ComponentDescriptor::Shared getFallbackComponentDescriptor() const;
private:
better::map<ComponentHandle, SharedComponentDescriptor> _registryByHandle;
better::map<ComponentName, SharedComponentDescriptor> _registryByName;
SharedComponentDescriptor _fallbackComponentDescriptor;
ComponentDescriptor::Shared _fallbackComponentDescriptor;
};
} // namespace react

View File

@@ -52,9 +52,9 @@ SharedShadowNode UITemplateProcessor::runCommand(
tag + tagOffset, type, rootTag, props, nullptr);
if (parentTag > -1) { // parentTag == -1 indicates root node
auto parentShadowNode = nodes[parentTag];
const SharedComponentDescriptor &componentDescriptor =
componentDescriptorRegistry[parentShadowNode];
componentDescriptor->appendChild(parentShadowNode, nodes[tag]);
auto const &componentDescriptor = componentDescriptorRegistry.at(
parentShadowNode->getComponentHandle());
componentDescriptor.appendChild(parentShadowNode, nodes[tag]);
}
} else if (opcode == "returnRoot") {
if (DEBUG_FLY) {