Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class ImageShadowNode final
public:
using ConcreteViewShadowNode::ConcreteViewShadowNode;

static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = ConcreteViewShadowNode::BaseTraits();
traits.set(ShadowNodeTraits::Trait::LeafYogaNode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class InputAccessoryShadowNode final : public ConcreteViewShadowNode<
public:
using ConcreteViewShadowNode::ConcreteViewShadowNode;

static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = ConcreteViewShadowNode::BaseTraits();
traits.set(ShadowNodeTraits::Trait::RootNodeKind);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class ModalHostViewShadowNode final : public ConcreteViewShadowNode<
public:
using ConcreteViewShadowNode::ConcreteViewShadowNode;

static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = ConcreteViewShadowNode::BaseTraits();
traits.set(ShadowNodeTraits::Trait::RootNodeKind);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class AndroidProgressBarShadowNode final : public ConcreteViewShadowNode<
public:
using ConcreteViewShadowNode::ConcreteViewShadowNode;

static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = ConcreteViewShadowNode::BaseTraits();
traits.set(ShadowNodeTraits::Trait::LeafYogaNode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class RootShadowNode final : public ConcreteViewShadowNode<RootComponentName, Ro
using Shared = std::shared_ptr<const RootShadowNode>;
using Unshared = std::shared_ptr<RootShadowNode>;

static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = ConcreteViewShadowNode::BaseTraits();
traits.set(ShadowNodeTraits::Trait::RootNodeKind);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class AndroidSwitchShadowNode final
public:
using ConcreteViewShadowNode::ConcreteViewShadowNode;

static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = ConcreteViewShadowNode::BaseTraits();
traits.set(ShadowNodeTraits::Trait::LeafYogaNode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class SwitchShadowNode final
public:
using ConcreteViewShadowNode::ConcreteViewShadowNode;

static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = ConcreteViewShadowNode::BaseTraits();
traits.set(ShadowNodeTraits::Trait::LeafYogaNode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class ParagraphShadowNode

ParagraphShadowNode(const ShadowNode &sourceShadowNode, const ShadowNodeFragment &fragment);

static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = ConcreteViewShadowNode::BaseTraits();
traits.set(ShadowNodeTraits::Trait::LeafYogaNode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ using TextEventEmitter = TouchEventEmitter;
class TextShadowNode : public ConcreteShadowNode<TextComponentName, ShadowNode, TextProps, TextEventEmitter>,
public BaseTextShadowNode {
public:
static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = ConcreteShadowNode::BaseTraits();
#ifdef ANDROID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class BaseTextInputShadowNode

using BaseShadowNode::ConcreteViewShadowNode;

static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = BaseShadowNode::BaseTraits();
traits.set(ShadowNodeTraits::Trait::LeafYogaNode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class AndroidTextInputShadowNode final : public ConcreteViewShadowNode<
public:
using ConcreteViewShadowNode::ConcreteViewShadowNode;

static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = ConcreteViewShadowNode::BaseTraits();
traits.set(ShadowNodeTraits::Trait::LeafYogaNode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class ConcreteViewShadowNode : public ConcreteShadowNode<

using BaseShadowNode::BaseShadowNode;

static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = BaseShadowNode::BaseTraits();
traits.set(ShadowNodeTraits::Trait::ViewKind);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,27 @@

namespace facebook::react {

TEST(ViewTest, constexprBaseTraits) {
constexpr auto viewTraits = ViewShadowNode::BaseTraits();
constexpr auto rootTraits = RootShadowNode::BaseTraits();
constexpr auto modalTraits = ModalHostViewShadowNode::BaseTraits();

static_assert(viewTraits.check(ShadowNodeTraits::Trait::ViewKind));
static_assert(rootTraits.check(ShadowNodeTraits::Trait::RootNodeKind));
static_assert(modalTraits.check(ShadowNodeTraits::Trait::RootNodeKind));
static_assert(
modalTraits.check(ShadowNodeTraits::Trait::Unstable_uncullableView));

EXPECT_EQ(
rootTraits.get(),
ShadowNodeTraits::Trait(
viewTraits.get() | ShadowNodeTraits::Trait::RootNodeKind));
EXPECT_EQ(
modalTraits.get(),
ShadowNodeTraits::Trait(
rootTraits.get() | ShadowNodeTraits::Trait::Unstable_uncullableView));
}

class YogaDirtyFlagTest : public ::testing::Test {
protected:
ComponentBuilder builder_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class VirtualViewShadowNode final
public:
using ConcreteViewShadowNode::ConcreteViewShadowNode;

static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
auto traits = ConcreteViewShadowNode::BaseTraits();
// <VirtualView> has a side effect: it listens to scroll events.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class ConcreteShadowNode : public BaseShadowNodeT {
* A set of traits associated with a particular class.
* Reimplement in subclasses to declare class-specific traits.
*/
static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
return BaseShadowNodeT::BaseTraits();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class ShadowNode : public Sealable, public DebugStringConvertible, public jsi::N
* A set of traits associated with a particular class.
* Reimplement in subclasses to declare class-specific traits.
*/
static ShadowNodeTraits BaseTraits()
static constexpr ShadowNodeTraits BaseTraits()
{
return ShadowNodeTraits{};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,22 +98,22 @@ class ShadowNodeTraits {
/*
* Sets, unsets, and checks individual traits.
*/
inline void set(Trait trait)
constexpr void set(Trait trait)
{
traits_ = ShadowNodeTraits::Trait(traits_ | trait);
}

inline void unset(Trait trait)
constexpr void unset(Trait trait)
{
traits_ = ShadowNodeTraits::Trait(traits_ & ~trait);
}

inline bool check(Trait traits) const
constexpr bool check(Trait traits) const
{
return ShadowNodeTraits::Trait(traits_ & traits) == traits;
}

inline Trait get() const
constexpr Trait get() const
{
return traits_;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,29 @@

using namespace facebook::react;

TEST(ShadowNodeTraitsTest, constexprMutation) {
static_assert(ShadowNodeTraits{}.get() == ShadowNodeTraits::Trait::None);
static_assert(ShadowNodeTraits{}.check(ShadowNodeTraits::Trait::None));

constexpr auto traits = [] {
auto result = ShadowNodeTraits{};
result.set(ShadowNodeTraits::Trait::ViewKind);
result.set(ShadowNodeTraits::Trait::FormsView);
result.unset(ShadowNodeTraits::Trait::ViewKind);
return result;
}();

static_assert(traits.get() == ShadowNodeTraits::Trait::FormsView);
static_assert(traits.check(ShadowNodeTraits::Trait::FormsView));
static_assert(!traits.check(ShadowNodeTraits::Trait::ViewKind));

auto runtimeTraits = traits;
runtimeTraits.set(ShadowNodeTraits::Trait::Hidden);
EXPECT_TRUE(runtimeTraits.check(ShadowNodeTraits::Trait::Hidden));
runtimeTraits.unset(ShadowNodeTraits::Trait::FormsView);
EXPECT_EQ(runtimeTraits.get(), ShadowNodeTraits::Trait::Hidden);
}

class ShadowNodeTest : public testing::Test {
protected:
ShadowNodeTest()
Expand Down Expand Up @@ -176,6 +199,18 @@ class ShadowNodeTest : public testing::Test {
SurfaceId surfaceId_ = 1;
};

TEST_F(ShadowNodeTest, constexprBaseTraits) {
static_assert(
ShadowNode::BaseTraits().get() == ShadowNodeTraits::Trait::None);

constexpr auto traits = TestShadowNode::BaseTraits();
static_assert(traits.check(ShadowNodeTraits::Trait::ViewKind));
static_assert(traits.check(ShadowNodeTraits::Trait::FormsStackingContext));
static_assert(traits.check(ShadowNodeTraits::Trait::FormsView));

EXPECT_EQ(traits.get(), componentDescriptor_.getTraits().get());
}

TEST_F(ShadowNodeTest, handleShadowNodeCreation) {
EXPECT_FALSE(nodeZ_->getSealed());
EXPECT_STREQ(nodeZ_->getComponentName(), "Test");
Expand Down
14 changes: 7 additions & 7 deletions scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -2243,7 +2243,7 @@ class facebook::react::ShadowNode : public facebook::react::Sealable, public fac
public int getOrderIndex() const;
public static bool getUseRuntimeShadowNodeReferenceUpdateOnThread();
public static bool sameFamily(const facebook::react::ShadowNode& first, const facebook::react::ShadowNode& second);
public static facebook::react::ShadowNodeTraits BaseTraits();
public static constexpr facebook::react::ShadowNodeTraits BaseTraits();
public static std::shared_ptr<const std::vector<std::shared_ptr<const facebook::react::ShadowNode>>> emptySharedShadowNodeSharedList();
public static void setUseRuntimeShadowNodeReferenceUpdateOnThread(bool isEnabled);
public std::shared_ptr<const facebook::react::ContextContainer> getContextContainer() const;
Expand Down Expand Up @@ -2291,10 +2291,10 @@ class facebook::react::ShadowNodeFamily : public facebook::jsi::NativeState {
}

class facebook::react::ShadowNodeTraits {
public bool check(facebook::react::ShadowNodeTraits::Trait traits) const;
public facebook::react::ShadowNodeTraits::Trait get() const;
public void set(facebook::react::ShadowNodeTraits::Trait trait);
public void unset(facebook::react::ShadowNodeTraits::Trait trait);
public constexpr bool check(facebook::react::ShadowNodeTraits::Trait traits) const;
public constexpr facebook::react::ShadowNodeTraits::Trait get() const;
public constexpr void set(facebook::react::ShadowNodeTraits::Trait trait);
public constexpr void unset(facebook::react::ShadowNodeTraits::Trait trait);
}

enum facebook::react::ShadowNodeTraits::Trait : int32_t {
Expand Down Expand Up @@ -3773,7 +3773,7 @@ template <const char* concreteComponentName, typename ViewPropsT = facebook::rea
class facebook::react::ConcreteViewShadowNode : public facebook::react::ConcreteShadowNode<concreteComponentName, facebook::react::YogaLayoutableShadowNode, ViewPropsT, ViewEventEmitterT, StateDataT> {
public ConcreteViewShadowNode(const facebook::react::ShadowNode& sourceShadowNode, const facebook::react::ShadowNodeFragment& fragment);
public ConcreteViewShadowNode(const facebook::react::ShadowNodeFragment& fragment, const facebook::react::ShadowNodeFamily::Shared& family, facebook::react::ShadowNodeTraits traits);
public static facebook::react::ShadowNodeTraits BaseTraits();
public static constexpr facebook::react::ShadowNodeTraits BaseTraits();
public using BaseShadowNode = facebook::react::ConcreteShadowNode<concreteComponentName, facebook::react::YogaLayoutableShadowNode, ViewPropsT, ViewEventEmitterT, StateDataT>;
public using ConcreteViewProps = ViewPropsT;
public virtual bool canBeTouchTarget() const override;
Expand All @@ -3790,12 +3790,12 @@ class facebook::react::ConcreteShadowNode : public BaseShadowNodeT {
public const facebook::react::ConcreteShadowNode::ConcreteStateData& getStateData() const;
public const std::shared_ptr<const facebook::react::ConcreteShadowNode::ConcreteProps>& getConcreteSharedProps() const;
public static const facebook::react::ConcreteShadowNode::SharedConcreteProps& defaultSharedProps();
public static constexpr facebook::react::ShadowNodeTraits BaseTraits();
public static facebook::react::ComponentHandle Handle();
public static facebook::react::ComponentName Name();
public static facebook::react::ConcreteShadowNode::ConcreteStateData initialStateData(const facebook::react::Props::Shared&, const facebook::react::ShadowNodeFamily::Shared&, const facebook::react::ComponentDescriptor&);
public static facebook::react::ConcreteShadowNode::UnsharedConcreteProps Props(const facebook::react::Props::Shared& baseProps);
public static facebook::react::ConcreteShadowNode::UnsharedConcreteProps Props(const facebook::react::PropsParserContext& context, const facebook::react::RawProps& rawProps, const facebook::react::Props::Shared& baseProps = nullptr);
public static facebook::react::ShadowNodeTraits BaseTraits();
public static void initializeDynamicProps(facebook::react::ConcreteShadowNode::UnsharedConcreteProps props, const facebook::react::RawProps& rawProps, const facebook::react::Props::Shared& baseProps = nullptr);
public using ConcreteEventEmitter = EventEmitterT;
public using ConcreteProps = PropsT;
Expand Down
Loading
Loading