diff --git a/ReactCommon/fabric/core/componentdescriptor/ConcreteComponentDescriptor.h b/ReactCommon/fabric/core/componentdescriptor/ConcreteComponentDescriptor.h index f690cb652f7b12..3d2721f8156315 100644 --- a/ReactCommon/fabric/core/componentdescriptor/ConcreteComponentDescriptor.h +++ b/ReactCommon/fabric/core/componentdescriptor/ConcreteComponentDescriptor.h @@ -35,6 +35,21 @@ class ConcreteComponentDescriptor: public ComponentDescriptor { return typeid(ShadowNodeT).hash_code(); } + ComponentName getComponentName() const override { + // Even if this looks suboptimal, it is the only way to call + // a virtual non-static method of `ShadowNodeT`. + // Because it is not a hot path (it is executed once per an app run), + // it's fine. + return std::make_shared( + 0, + 0, + nullptr, + std::make_shared(), + ShadowNode::emptySharedShadowNodeSharedList(), + nullptr + )->ShadowNodeT::getComponentName(); + } + SharedShadowNode createShadowNode( const Tag &tag, const Tag &rootTag, diff --git a/ReactCommon/fabric/scrollview/ScrollViewComponentDescriptor.h b/ReactCommon/fabric/scrollview/ScrollViewComponentDescriptor.h index 44d61202ebf4de..b1c075980ff65e 100644 --- a/ReactCommon/fabric/scrollview/ScrollViewComponentDescriptor.h +++ b/ReactCommon/fabric/scrollview/ScrollViewComponentDescriptor.h @@ -13,12 +13,7 @@ namespace facebook { namespace react { -class ScrollViewComponentDescriptor final: public ConcreteComponentDescriptor { -public: - ComponentName getComponentName() const override { - return "ScrollView"; - } -}; +using ScrollViewComponentDescriptor = ConcreteComponentDescriptor; } // namespace react } // namespace facebook diff --git a/ReactCommon/fabric/text/paragraph/ParagraphComponentDescriptor.h b/ReactCommon/fabric/text/paragraph/ParagraphComponentDescriptor.h index d776767830064e..6648ddb5e142dc 100644 --- a/ReactCommon/fabric/text/paragraph/ParagraphComponentDescriptor.h +++ b/ReactCommon/fabric/text/paragraph/ParagraphComponentDescriptor.h @@ -27,10 +27,6 @@ class ParagraphComponentDescriptor: public ConcreteComponentDescriptor(); } - ComponentName getComponentName() const override { - return "Paragraph"; - } - void adopt(UnsharedShadowNode shadowNode) const override { ConcreteComponentDescriptor::adopt(shadowNode); diff --git a/ReactCommon/fabric/text/rawtext/RawTextComponentDescriptor.h b/ReactCommon/fabric/text/rawtext/RawTextComponentDescriptor.h index 6f615fa3c620f1..ca2ccdbe1cf93c 100644 --- a/ReactCommon/fabric/text/rawtext/RawTextComponentDescriptor.h +++ b/ReactCommon/fabric/text/rawtext/RawTextComponentDescriptor.h @@ -13,15 +13,7 @@ namespace facebook { namespace react { -/* - * Descriptor for component. - */ -class RawTextComponentDescriptor: public ConcreteComponentDescriptor { -public: - ComponentName getComponentName() const override { - return "RawText"; - } -}; +using RawTextComponentDescriptor = ConcreteComponentDescriptor; } // namespace react } // namespace facebook diff --git a/ReactCommon/fabric/text/text/TextComponentDescriptor.h b/ReactCommon/fabric/text/text/TextComponentDescriptor.h index 043492f21e91e6..5abb428e33dece 100644 --- a/ReactCommon/fabric/text/text/TextComponentDescriptor.h +++ b/ReactCommon/fabric/text/text/TextComponentDescriptor.h @@ -8,18 +8,12 @@ #pragma once #include -#include #include namespace facebook { namespace react { -class TextComponentDescriptor: public ConcreteComponentDescriptor { -public: - ComponentName getComponentName() const override { - return "Text"; - } -}; +using TextComponentDescriptor = ConcreteComponentDescriptor; } // namespace react } // namespace facebook diff --git a/ReactCommon/fabric/view/ViewComponentDescriptor.h b/ReactCommon/fabric/view/ViewComponentDescriptor.h index 1db26dc3b5b71a..4c25d8b943b663 100644 --- a/ReactCommon/fabric/view/ViewComponentDescriptor.h +++ b/ReactCommon/fabric/view/ViewComponentDescriptor.h @@ -13,12 +13,7 @@ namespace facebook { namespace react { -class ViewComponentDescriptor: public ConcreteComponentDescriptor { -public: - ComponentName getComponentName() const override { - return "View"; - } -}; +using ViewComponentDescriptor = ConcreteComponentDescriptor; } // namespace react } // namespace facebook