Stop using RTTI features in Fabric core and components
Summary: These dynamic_casts aren't really giving us much (they have never fired once in dev! and don't run in prod anyway). They also prevent us from disabling RTTI. So, let's get rid of them. Changelog: [Internal] Reviewed By: philIip Differential Revision: D31634895 fbshipit-source-id: 4a9b259837127feb324f64fa3e9e23eb1cc481a6
This commit is contained in:
Родитель
f7a33e3501
Коммит
6525f9b082
|
@ -11,6 +11,8 @@ rn_xplat_cxx_library(
|
|||
],
|
||||
prefix = "react/fabric",
|
||||
),
|
||||
compiler_flags_enable_exceptions = True,
|
||||
compiler_flags_enable_rtti = True, # dynamic_cast used within Binding.cpp
|
||||
fbandroid_allow_jni_merging = True,
|
||||
labels = ["supermodule:xplat/default/public.react_native.infra"],
|
||||
platforms = ANDROID,
|
||||
|
|
|
@ -646,16 +646,19 @@ inline local_ref<ReadableArray::javaobject> castReadableArray(
|
|||
|
||||
// TODO: this method will be removed when binding for components are code-gen
|
||||
local_ref<JString> getPlatformComponentName(const ShadowView &shadowView) {
|
||||
local_ref<JString> componentName;
|
||||
auto newViewProps =
|
||||
std::dynamic_pointer_cast<const ScrollViewProps>(shadowView.props);
|
||||
static std::string scrollViewComponentName = std::string("ScrollView");
|
||||
|
||||
if (newViewProps &&
|
||||
newViewProps->getProbablyMoreHorizontalThanVertical_DEPRECATED()) {
|
||||
componentName = make_jstring("AndroidHorizontalScrollView");
|
||||
} else {
|
||||
componentName = make_jstring(shadowView.componentName);
|
||||
local_ref<JString> componentName;
|
||||
if (scrollViewComponentName.compare(shadowView.componentName) == 0) {
|
||||
auto newViewProps =
|
||||
std::static_pointer_cast<const ScrollViewProps>(shadowView.props);
|
||||
if (newViewProps->getProbablyMoreHorizontalThanVertical_DEPRECATED()) {
|
||||
componentName = make_jstring("AndroidHorizontalScrollView");
|
||||
return componentName;
|
||||
}
|
||||
}
|
||||
|
||||
componentName = make_jstring(shadowView.componentName);
|
||||
return componentName;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,8 @@ rn_xplat_cxx_library(
|
|||
"-Wno-pessimizing-move",
|
||||
"-Wno-inconsistent-missing-override",
|
||||
],
|
||||
compiler_flags_enable_exceptions = True,
|
||||
compiler_flags_enable_rtti = True, # dynamic_cast used within ReadableNative*
|
||||
fbandroid_allow_jni_merging = True,
|
||||
labels = ["supermodule:xplat/default/public.react_native.infra"],
|
||||
platforms = ANDROID,
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <react/debug/react_native_assert.h>
|
||||
#include <react/renderer/components/image/ImageShadowNode.h>
|
||||
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
||||
#include <react/renderer/imagemanager/ImageManager.h>
|
||||
|
@ -29,7 +28,6 @@ class ImageComponentDescriptor final
|
|||
void adopt(ShadowNode::Unshared const &shadowNode) const override {
|
||||
ConcreteComponentDescriptor::adopt(shadowNode);
|
||||
|
||||
react_native_assert(std::dynamic_pointer_cast<ImageShadowNode>(shadowNode));
|
||||
auto imageShadowNode =
|
||||
std::static_pointer_cast<ImageShadowNode>(shadowNode);
|
||||
|
||||
|
|
|
@ -23,13 +23,9 @@ class InputAccessoryComponentDescriptor final
|
|||
using ConcreteComponentDescriptor::ConcreteComponentDescriptor;
|
||||
|
||||
void adopt(ShadowNode::Unshared const &shadowNode) const override {
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<InputAccessoryShadowNode>(shadowNode));
|
||||
auto concreteShadowNode =
|
||||
std::static_pointer_cast<InputAccessoryShadowNode>(shadowNode);
|
||||
|
||||
react_native_assert(std::dynamic_pointer_cast<YogaLayoutableShadowNode>(
|
||||
concreteShadowNode));
|
||||
auto layoutableShadowNode =
|
||||
std::static_pointer_cast<YogaLayoutableShadowNode>(concreteShadowNode);
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#pragma once
|
||||
|
||||
#include <glog/logging.h>
|
||||
#include <react/debug/react_native_assert.h>
|
||||
#include <react/renderer/components/modal/ModalHostViewShadowNode.h>
|
||||
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
||||
|
||||
|
@ -25,13 +24,9 @@ class ModalHostViewComponentDescriptor final
|
|||
using ConcreteComponentDescriptor::ConcreteComponentDescriptor;
|
||||
|
||||
void adopt(ShadowNode::Unshared const &shadowNode) const override {
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<ModalHostViewShadowNode>(shadowNode));
|
||||
auto modalShadowNode =
|
||||
std::static_pointer_cast<ModalHostViewShadowNode>(shadowNode);
|
||||
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<YogaLayoutableShadowNode>(modalShadowNode));
|
||||
auto layoutableShadowNode =
|
||||
std::static_pointer_cast<YogaLayoutableShadowNode>(modalShadowNode);
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <react/debug/react_native_assert.h>
|
||||
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
||||
#include "AndroidProgressBarMeasurementsManager.h"
|
||||
#include "AndroidProgressBarShadowNode.h"
|
||||
|
@ -31,8 +30,6 @@ class AndroidProgressBarComponentDescriptor final
|
|||
void adopt(ShadowNode::Unshared const &shadowNode) const override {
|
||||
ConcreteComponentDescriptor::adopt(shadowNode);
|
||||
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<AndroidProgressBarShadowNode>(shadowNode));
|
||||
auto androidProgressBarShadowNode =
|
||||
std::static_pointer_cast<AndroidProgressBarShadowNode>(shadowNode);
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <react/debug/react_native_assert.h>
|
||||
#include <react/renderer/components/slider/SliderMeasurementsManager.h>
|
||||
#include <react/renderer/components/slider/SliderShadowNode.h>
|
||||
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
||||
|
@ -32,8 +31,6 @@ class SliderComponentDescriptor final
|
|||
void adopt(ShadowNode::Unshared const &shadowNode) const override {
|
||||
ConcreteComponentDescriptor::adopt(shadowNode);
|
||||
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<SliderShadowNode>(shadowNode));
|
||||
auto sliderShadowNode =
|
||||
std::static_pointer_cast<SliderShadowNode>(shadowNode);
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
#include "AndroidSwitchMeasurementsManager.h"
|
||||
#include "AndroidSwitchShadowNode.h"
|
||||
|
||||
#include <react/debug/react_native_assert.h>
|
||||
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
||||
|
||||
namespace facebook {
|
||||
|
@ -31,8 +30,6 @@ class AndroidSwitchComponentDescriptor final
|
|||
void adopt(ShadowNode::Unshared const &shadowNode) const override {
|
||||
ConcreteComponentDescriptor::adopt(shadowNode);
|
||||
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<AndroidSwitchShadowNode>(shadowNode));
|
||||
auto androidSwitchShadowNode =
|
||||
std::static_pointer_cast<AndroidSwitchShadowNode>(shadowNode);
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <react/debug/react_native_assert.h>
|
||||
#include <react/renderer/components/text/ParagraphShadowNode.h>
|
||||
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
||||
#include <react/renderer/textlayoutmanager/TextLayoutManager.h>
|
||||
|
@ -33,8 +32,6 @@ class ParagraphComponentDescriptor final
|
|||
void adopt(ShadowNode::Unshared const &shadowNode) const override {
|
||||
ConcreteComponentDescriptor::adopt(shadowNode);
|
||||
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<ParagraphShadowNode>(shadowNode));
|
||||
auto paragraphShadowNode =
|
||||
std::static_pointer_cast<ParagraphShadowNode>(shadowNode);
|
||||
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
#include <yoga/YGEnums.h>
|
||||
#include <yoga/YGValue.h>
|
||||
|
||||
#include <react/debug/react_native_assert.h>
|
||||
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
||||
|
||||
namespace facebook {
|
||||
|
@ -88,8 +87,6 @@ class AndroidTextInputComponentDescriptor final
|
|||
|
||||
protected:
|
||||
void adopt(ShadowNode::Unshared const &shadowNode) const override {
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<AndroidTextInputShadowNode>(shadowNode));
|
||||
auto textInputShadowNode =
|
||||
std::static_pointer_cast<AndroidTextInputShadowNode>(shadowNode);
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <react/debug/react_native_assert.h>
|
||||
#include <react/renderer/components/iostextinput/TextInputShadowNode.h>
|
||||
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
||||
|
||||
|
@ -30,8 +29,6 @@ class TextInputComponentDescriptor final
|
|||
void adopt(ShadowNode::Unshared const &shadowNode) const override {
|
||||
ConcreteComponentDescriptor::adopt(shadowNode);
|
||||
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<TextInputShadowNode>(shadowNode));
|
||||
auto concreteShadowNode =
|
||||
std::static_pointer_cast<TextInputShadowNode>(shadowNode);
|
||||
|
||||
|
|
|
@ -7,8 +7,6 @@
|
|||
|
||||
#include "UnimplementedViewComponentDescriptor.h"
|
||||
|
||||
#include <react/debug/react_native_assert.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
|
@ -28,8 +26,6 @@ Props::Shared UnimplementedViewComponentDescriptor::cloneProps(
|
|||
auto clonedProps =
|
||||
ConcreteComponentDescriptor<UnimplementedViewShadowNode>::cloneProps(
|
||||
context, props, rawProps);
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<UnimplementedViewProps const>(clonedProps));
|
||||
|
||||
// We have to clone `Props` object one more time to make sure that we have
|
||||
// an unshared (and non-`const`) copy of it which we can mutate.
|
||||
|
|
|
@ -32,6 +32,8 @@ rn_xplat_cxx_library(
|
|||
],
|
||||
prefix = "react/renderer/core",
|
||||
),
|
||||
compiler_flags_enable_exceptions = True,
|
||||
compiler_flags_enable_rtti = True, # Needed for DebugStringConvertible - need to find a non-RTTI way to do this / enable RTTI for debug builds only
|
||||
fbobjc_compiler_flags = APPLE_COMPILER_FLAGS,
|
||||
fbobjc_preprocessor_flags = get_preprocessor_flags_for_build_mode() + get_apple_inspector_flags(),
|
||||
force_static = True,
|
||||
|
|
|
@ -66,9 +66,6 @@ class ConcreteComponentDescriptor : public ComponentDescriptor {
|
|||
ShadowNode::Shared createShadowNode(
|
||||
const ShadowNodeFragment &fragment,
|
||||
ShadowNodeFamily::Shared const &family) const override {
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<const ConcreteProps>(fragment.props));
|
||||
|
||||
auto shadowNode =
|
||||
std::make_shared<ShadowNodeT>(fragment, family, getTraits());
|
||||
|
||||
|
|
|
@ -99,9 +99,6 @@ class ConcreteShadowNode : public BaseShadowNodeT {
|
|||
ConcreteProps const &getConcreteProps() const {
|
||||
react_native_assert(
|
||||
BaseShadowNodeT::props_ && "Props must not be `nullptr`.");
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<ConcreteProps const>(props_) &&
|
||||
"Props must be an instance of ConcreteProps class.");
|
||||
return static_cast<ConcreteProps const &>(*props_);
|
||||
}
|
||||
|
||||
|
@ -110,10 +107,6 @@ class ConcreteShadowNode : public BaseShadowNodeT {
|
|||
* Thread-safe after the node is sealed.
|
||||
*/
|
||||
ConcreteEventEmitter const &getConcreteEventEmitter() const {
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<ConcreteEventEmitter const>(
|
||||
BaseShadowNodeT::getEventEmitter()) &&
|
||||
"EventEmitter must be an instance of ConcreteEventEmitter class.");
|
||||
return static_cast<ConcreteEventEmitter const &>(
|
||||
*BaseShadowNodeT::getEventEmitter());
|
||||
}
|
||||
|
@ -124,9 +117,6 @@ class ConcreteShadowNode : public BaseShadowNodeT {
|
|||
*/
|
||||
ConcreteStateData const &getStateData() const {
|
||||
react_native_assert(state_ && "State must not be `nullptr`.");
|
||||
react_native_assert(
|
||||
std::dynamic_pointer_cast<ConcreteState const>(state_) &&
|
||||
"State must be an instance of ConcreteState class.");
|
||||
return static_cast<ConcreteState const *>(state_.get())->getData();
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче