diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp index 1bb1d5bbe40..2af8ae42659 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<18e31d0833fda8cfb3f31b449479297a>> */ /** @@ -19,10 +19,72 @@ #include "JReactNativeFeatureFlagsCxxInterop.h" #include -#include namespace facebook::react { +static jni::alias_ref getReactNativeFeatureFlagsProviderJavaClass() { + static const auto jClass = facebook::jni::findClassStatic( + "com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider"); + return jClass; +} + +/** + * Implementation of ReactNativeFeatureFlagsProvider that wraps a + * ReactNativeFeatureFlagsProvider Java object. + */ +class ReactNativeFeatureFlagsProviderHolder + : public ReactNativeFeatureFlagsProvider { + public: + explicit ReactNativeFeatureFlagsProviderHolder( + jni::alias_ref javaProvider) + : javaProvider_(make_global(javaProvider)){}; + + bool commonTestFlag() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("commonTestFlag"); + return method(javaProvider_); + } + + bool useModernRuntimeScheduler() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("useModernRuntimeScheduler"); + return method(javaProvider_); + } + + bool enableMicrotasks() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("enableMicrotasks"); + return method(javaProvider_); + } + + bool batchRenderingUpdatesInEventLoop() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("batchRenderingUpdatesInEventLoop"); + return method(javaProvider_); + } + + bool enableSpannableBuildingUnification() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("enableSpannableBuildingUnification"); + return method(javaProvider_); + } + + bool enableCustomDrawOrderFabric() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("enableCustomDrawOrderFabric"); + return method(javaProvider_); + } + + bool enableFixForClippedSubviewsCrash() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("enableFixForClippedSubviewsCrash"); + return method(javaProvider_); + } + + private: + jni::global_ref javaProvider_; +}; + bool JReactNativeFeatureFlagsCxxInterop::commonTestFlag( facebook::jni::alias_ref /*unused*/) { return ReactNativeFeatureFlags::commonTestFlag(); diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/ReactNativeFeatureFlagsProviderHolder.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/ReactNativeFeatureFlagsProviderHolder.cpp deleted file mode 100644 index 9c4b817235c..00000000000 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/ReactNativeFeatureFlagsProviderHolder.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @generated SignedSource<<40972962362d704915fe7c851ef6a545>> - */ - -/** - * IMPORTANT: Do NOT modify this file directly. - * - * To change the definition of the flags, edit - * packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js. - * - * To regenerate this code, run the following script from the repo root: - * yarn featureflags-update - */ - -#include "ReactNativeFeatureFlagsProviderHolder.h" - -namespace facebook::react { - -static jni::alias_ref getJClass() { - static const auto jClass = facebook::jni::findClassStatic( - "com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider"); - return jClass; -} - -bool ReactNativeFeatureFlagsProviderHolder::commonTestFlag() { - static const auto method = - getJClass()->getMethod("commonTestFlag"); - return method(javaProvider_); -} - -bool ReactNativeFeatureFlagsProviderHolder::useModernRuntimeScheduler() { - static const auto method = - getJClass()->getMethod("useModernRuntimeScheduler"); - return method(javaProvider_); -} - -bool ReactNativeFeatureFlagsProviderHolder::enableMicrotasks() { - static const auto method = - getJClass()->getMethod("enableMicrotasks"); - return method(javaProvider_); -} - -bool ReactNativeFeatureFlagsProviderHolder::batchRenderingUpdatesInEventLoop() { - static const auto method = - getJClass()->getMethod("batchRenderingUpdatesInEventLoop"); - return method(javaProvider_); -} - -bool ReactNativeFeatureFlagsProviderHolder::enableSpannableBuildingUnification() { - static const auto method = - getJClass()->getMethod("enableSpannableBuildingUnification"); - return method(javaProvider_); -} - -bool ReactNativeFeatureFlagsProviderHolder::enableCustomDrawOrderFabric() { - static const auto method = - getJClass()->getMethod("enableCustomDrawOrderFabric"); - return method(javaProvider_); -} - -bool ReactNativeFeatureFlagsProviderHolder::enableFixForClippedSubviewsCrash() { - static const auto method = - getJClass()->getMethod("enableFixForClippedSubviewsCrash"); - return method(javaProvider_); -} - -} // namespace facebook::react diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/ReactNativeFeatureFlagsProviderHolder.h b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/ReactNativeFeatureFlagsProviderHolder.h deleted file mode 100644 index 71d23314521..00000000000 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/ReactNativeFeatureFlagsProviderHolder.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @generated SignedSource<> - */ - -/** - * IMPORTANT: Do NOT modify this file directly. - * - * To change the definition of the flags, edit - * packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js. - * - * To regenerate this code, run the following script from the repo root: - * yarn featureflags-update - */ - -#pragma once - -#include -#include - -namespace facebook::react { - -/** - * Implementation of ReactNativeFeatureFlagsProvider that wraps a - * ReactNativeFeatureFlagsProvider Java object. - */ -class ReactNativeFeatureFlagsProviderHolder - : public ReactNativeFeatureFlagsProvider { - public: - explicit ReactNativeFeatureFlagsProviderHolder( - jni::alias_ref javaProvider) - : javaProvider_(make_global(javaProvider)){}; - - bool commonTestFlag() override; - bool useModernRuntimeScheduler() override; - bool enableMicrotasks() override; - bool batchRenderingUpdatesInEventLoop() override; - bool enableSpannableBuildingUnification() override; - bool enableCustomDrawOrderFabric() override; - bool enableFixForClippedSubviewsCrash() override; - - private: - jni::global_ref javaProvider_; -}; - -} // namespace facebook::react diff --git a/packages/react-native/scripts/featureflags/generateAndroidModules.js b/packages/react-native/scripts/featureflags/generateAndroidModules.js index 3cc61217645..4631fbfa366 100644 --- a/packages/react-native/scripts/featureflags/generateAndroidModules.js +++ b/packages/react-native/scripts/featureflags/generateAndroidModules.js @@ -18,8 +18,6 @@ import ReactNativeFeatureFlagsCxxInteropKt from './templates/android/ReactNative import ReactNativeFeatureFlagsDefaultsKt from './templates/android/ReactNativeFeatureFlagsDefaults.kt-template'; import ReactNativeFeatureFlagsLocalAccessorKt from './templates/android/ReactNativeFeatureFlagsLocalAccessor.kt-template'; import ReactNativeFeatureFlagsProviderKt from './templates/android/ReactNativeFeatureFlagsProvider.kt-template'; -import ReactNativeFeatureFlagsProviderHolderCPP from './templates/android/ReactNativeFeatureFlagsProviderHolder.cpp-template'; -import ReactNativeFeatureFlagsProviderHolderH from './templates/android/ReactNativeFeatureFlagsProviderHolder.h-template'; import path from 'path'; export default function generateAndroidModules( @@ -40,10 +38,6 @@ export default function generateAndroidModules( ReactNativeFeatureFlagsDefaultsKt(featureFlagDefinitions), [path.join(androidPath, 'ReactNativeFeatureFlagsProvider.kt')]: ReactNativeFeatureFlagsProviderKt(featureFlagDefinitions), - [path.join(androidJniPath, 'ReactNativeFeatureFlagsProviderHolder.h')]: - ReactNativeFeatureFlagsProviderHolderH(featureFlagDefinitions), - [path.join(androidJniPath, 'ReactNativeFeatureFlagsProviderHolder.cpp')]: - ReactNativeFeatureFlagsProviderHolderCPP(featureFlagDefinitions), [path.join(androidJniPath, 'JReactNativeFeatureFlagsCxxInterop.h')]: JReactNativeFeatureFlagsCxxInteropH(featureFlagDefinitions), [path.join(androidJniPath, 'JReactNativeFeatureFlagsCxxInterop.cpp')]: diff --git a/packages/react-native/scripts/featureflags/templates/android/JReactNativeFeatureFlagsCxxInterop.cpp-template.js b/packages/react-native/scripts/featureflags/templates/android/JReactNativeFeatureFlagsCxxInterop.cpp-template.js index 59097233b7b..223a0e27215 100644 --- a/packages/react-native/scripts/featureflags/templates/android/JReactNativeFeatureFlagsCxxInterop.cpp-template.js +++ b/packages/react-native/scripts/featureflags/templates/android/JReactNativeFeatureFlagsCxxInterop.cpp-template.js @@ -27,10 +27,43 @@ ${DO_NOT_MODIFY_COMMENT} #include "JReactNativeFeatureFlagsCxxInterop.h" #include -#include namespace facebook::react { +static jni::alias_ref getReactNativeFeatureFlagsProviderJavaClass() { + static const auto jClass = facebook::jni::findClassStatic( + "com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider"); + return jClass; +} + +/** + * Implementation of ReactNativeFeatureFlagsProvider that wraps a + * ReactNativeFeatureFlagsProvider Java object. + */ +class ReactNativeFeatureFlagsProviderHolder + : public ReactNativeFeatureFlagsProvider { + public: + explicit ReactNativeFeatureFlagsProviderHolder( + jni::alias_ref javaProvider) + : javaProvider_(make_global(javaProvider)){}; + +${Object.entries(definitions.common) + .map( + ([flagName, flagConfig]) => + ` ${getCxxTypeFromDefaultValue( + flagConfig.defaultValue, + )} ${flagName}() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("${flagName}"); + return method(javaProvider_); + }`, + ) + .join('\n\n')} + + private: + jni::global_ref javaProvider_; +}; + ${Object.entries(definitions.common) .map( ([flagName, flagConfig]) => diff --git a/packages/react-native/scripts/featureflags/templates/android/ReactNativeFeatureFlagsProviderHolder.cpp-template.js b/packages/react-native/scripts/featureflags/templates/android/ReactNativeFeatureFlagsProviderHolder.cpp-template.js deleted file mode 100644 index 9e187bf9e88..00000000000 --- a/packages/react-native/scripts/featureflags/templates/android/ReactNativeFeatureFlagsProviderHolder.cpp-template.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict - * @format - */ - -import type {FeatureFlagDefinitions} from '../../types'; - -import {DO_NOT_MODIFY_COMMENT, getCxxTypeFromDefaultValue} from '../../utils'; -import signedsource from 'signedsource'; - -export default function (definitions: FeatureFlagDefinitions): string { - return signedsource.signFile(`/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * ${signedsource.getSigningToken()} - */ - -${DO_NOT_MODIFY_COMMENT} - -#include "ReactNativeFeatureFlagsProviderHolder.h" - -namespace facebook::react { - -static jni::alias_ref getJClass() { - static const auto jClass = facebook::jni::findClassStatic( - "com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider"); - return jClass; -} - -${Object.entries(definitions.common) - .map( - ([flagName, flagConfig]) => - `${getCxxTypeFromDefaultValue( - flagConfig.defaultValue, - )} ReactNativeFeatureFlagsProviderHolder::${flagName}() { - static const auto method = - getJClass()->getMethod("${flagName}"); - return method(javaProvider_); -}`, - ) - .join('\n\n')} - -} // namespace facebook::react -`); -} diff --git a/packages/react-native/scripts/featureflags/templates/android/ReactNativeFeatureFlagsProviderHolder.h-template.js b/packages/react-native/scripts/featureflags/templates/android/ReactNativeFeatureFlagsProviderHolder.h-template.js deleted file mode 100644 index 337cc5f606c..00000000000 --- a/packages/react-native/scripts/featureflags/templates/android/ReactNativeFeatureFlagsProviderHolder.h-template.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict - * @format - */ - -import type {FeatureFlagDefinitions} from '../../types'; - -import {DO_NOT_MODIFY_COMMENT, getCxxTypeFromDefaultValue} from '../../utils'; -import signedsource from 'signedsource'; - -export default function (definitions: FeatureFlagDefinitions): string { - return signedsource.signFile(`/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * ${signedsource.getSigningToken()} - */ - -${DO_NOT_MODIFY_COMMENT} - -#pragma once - -#include -#include - -namespace facebook::react { - -/** - * Implementation of ReactNativeFeatureFlagsProvider that wraps a - * ReactNativeFeatureFlagsProvider Java object. - */ -class ReactNativeFeatureFlagsProviderHolder - : public ReactNativeFeatureFlagsProvider { - public: - explicit ReactNativeFeatureFlagsProviderHolder( - jni::alias_ref javaProvider) - : javaProvider_(make_global(javaProvider)){}; - -${Object.entries(definitions.common) - .map( - ([flagName, flagConfig]) => - ` ${getCxxTypeFromDefaultValue( - flagConfig.defaultValue, - )} ${flagName}() override;`, - ) - .join('\n')} - - private: - jni::global_ref javaProvider_; -}; - -} // namespace facebook::react -`); -}