From 4701575643d07de5a1fe16e700bc6ceff3e412d3 Mon Sep 17 00:00:00 2001 From: David Vacca <515103+mdvacca@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:49:45 -0800 Subject: [PATCH 1/8] Fix DoNotStripAnnotationUsage: Replace @DoNotStrip with @DoNotStripAny Summary: Fixed DoNotStripAnnotationUsage lint error in FabricUIManagerBinding.kt. The class has many members (external methods like initHybrid, installFabricUIManager, etc.) that need to be kept, so DoNotStripAny is more appropriate than DoNotStrip which only keeps the directly annotated element. changelog: [internal] internal Differential Revision: D91840163 --- .../java/com/facebook/react/fabric/FabricUIManagerBinding.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerBinding.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerBinding.kt index ac8e4e2ef07e07..0373e9d2be1eeb 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerBinding.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerBinding.kt @@ -9,14 +9,14 @@ package com.facebook.react.fabric import android.annotation.SuppressLint import com.facebook.jni.HybridClassBase -import com.facebook.proguard.annotations.DoNotStrip +import com.facebook.proguard.annotations.DoNotStripAny import com.facebook.react.bridge.NativeMap import com.facebook.react.bridge.RuntimeExecutor import com.facebook.react.bridge.RuntimeScheduler import com.facebook.react.fabric.events.EventBeatManager import com.facebook.react.uimanager.PixelUtil.getDisplayMetricDensity -@DoNotStrip +@DoNotStripAny @SuppressLint("MissingNativeLoadLibrary") internal class FabricUIManagerBinding : HybridClassBase() { init { From bd8f76dc333c4059cf6710b0d2816fced04441f8 Mon Sep 17 00:00:00 2001 From: David Vacca <515103+mdvacca@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:49:45 -0800 Subject: [PATCH 2/8] Fix ClownyBooleanExpression: Add @SuppressLint annotation Summary: Fixed ClownyBooleanExpression lint warning in FabricUIManager.java. The expression `false && ReactBuildConfig.DEBUG` is intentionally used as a development flag that can be easily toggled. The constant false ensures it's disabled in production while making it clear how to enable it for development. changelog: [internal] internal Differential Revision: D91840560 --- .../main/java/com/facebook/react/fabric/FabricUIManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index a4cb1c2dd5ed47..23b53003caacbf 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -117,7 +117,9 @@ public class FabricUIManager // The IS_DEVELOPMENT_ENVIRONMENT variable is used to log extra data when running fabric in a // development environment. DO NOT ENABLE THIS ON PRODUCTION OR YOU WILL BE FIRED! + @SuppressLint("ClownyBooleanExpression") public static final boolean IS_DEVELOPMENT_ENVIRONMENT = false && ReactBuildConfig.DEBUG; + public @Nullable DevToolsReactPerfLogger mDevToolsReactPerfLogger; private static final DevToolsReactPerfLogger.DevToolsReactPerfLoggerListener FABRIC_PERF_LOGGER = From 96ddcad07739a18f9de3b9a597a62d84a8f8b97b Mon Sep 17 00:00:00 2001 From: David Vacca <515103+mdvacca@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:49:45 -0800 Subject: [PATCH 3/8] Fix NotInvokedPrivateMethod: Add @SuppressLint for preallocateView Summary: Fixed NotInvokedPrivateMethod lint warning for preallocateView in FabricUIManager.java. This method is called from JNI/C++ code, not from Java, so the lint warning is a false positive. Added SuppressLint annotation to suppress the warning. changelog: [internal] internal Differential Revision: D91840733 --- .../src/main/java/com/facebook/react/fabric/FabricUIManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 23b53003caacbf..74643cc11cad31 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -820,6 +820,7 @@ public void synchronouslyUpdateViewOnUIThread(final int reactTag, final Readable ReactMarkerConstants.FABRIC_UPDATE_UI_MAIN_THREAD_END, null, commitNumber); } + @SuppressLint("NotInvokedPrivateMethod") @SuppressWarnings("unused") @AnyThread @ThreadConfined(ANY) From e05549bd84187dc4f4e9627141bd00ab0ac9b9d3 Mon Sep 17 00:00:00 2001 From: David Vacca <515103+mdvacca@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:49:45 -0800 Subject: [PATCH 4/8] Fix JavadocsBackticksUse: Replace backticks with {@code} tags Summary: Fixed JavadocsBackticksUse lint warning in FabricUIManager.java. Replaced markdown-style backticks with proper javadoc {code ...} tags for code references in the receiveEvent method documentation. changelog: [internal] internal Differential Revision: D91841151 --- .../java/com/facebook/react/fabric/FabricUIManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 74643cc11cad31..08c96912586a47 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -1053,11 +1053,11 @@ public void receiveEvent( } /** - * receiveEvent API that emits an event to C++. If `canCoalesceEvent` is true, that signals that - * C++ may coalesce the event optionally. Otherwise, coalescing can happen in Java before + * receiveEvent API that emits an event to C++. If {@code canCoalesceEvent} is true, that signals + * that C++ may coalesce the event optionally. Otherwise, coalescing can happen in Java before * emitting. * - *
`customCoalesceKey` is currently unused. + *
{@code customCoalesceKey} is currently unused. * * @param surfaceId * @param reactTag From 74d4195fd001ae226dfcdd095cf69e9ce188c084 Mon Sep 17 00:00:00 2001 From: David Vacca <515103+mdvacca@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:49:45 -0800 Subject: [PATCH 5/8] Fix ClassNameDoesNotMatchFileName: Rename InteropUiBlockListener to InteropUIBlockListener Summary: Fixed ClassNameDoesNotMatchFileName lint warning by renaming the file from InteropUiBlockListener.kt to InteropUIBlockListener.kt to match the class name. changelog: [internal] internal Differential Revision: D91843967 --- .../{InteropUiBlockListener.kt => InteropUIBlockListener.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/internal/interop/{InteropUiBlockListener.kt => InteropUIBlockListener.kt} (100%) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/internal/interop/InteropUiBlockListener.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/internal/interop/InteropUIBlockListener.kt similarity index 100% rename from packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/internal/interop/InteropUiBlockListener.kt rename to packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/internal/interop/InteropUIBlockListener.kt From 5900744f94bf8b3b518e83c7c98b959da5757bb0 Mon Sep 17 00:00:00 2001 From: David Vacca <515103+mdvacca@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:49:45 -0800 Subject: [PATCH 6/8] Fix CollectionSizeUse and UnsafeDereference lint warnings Summary: Fixed lint warnings in LongStreamingStats.kt: - Replaced `size == 0` with `isEmpty()` for better readability - Replaced `!!` operator with safe null handling using `?: 0L` changelog: [internal] internal Differential Revision: D91844147 --- .../main/java/com/facebook/react/fabric/LongStreamingStats.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/LongStreamingStats.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/LongStreamingStats.kt index 3d1d46e3f6af1c..851efc88dbe776 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/LongStreamingStats.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/LongStreamingStats.kt @@ -49,14 +49,14 @@ internal class LongStreamingStats { val median: Double get() { - if (minHeap.size == 0 && maxHeap.size == 0) { + if (minHeap.isEmpty() && maxHeap.isEmpty()) { return 0.0 } val median = if (minHeap.size > maxHeap.size) { minHeap.peek() } else { - (minHeap.peek() ?: 0 + maxHeap.peek()!!) / 2 + ((minHeap.peek() ?: 0L) + (maxHeap.peek() ?: 0L)) / 2 } return median.toDouble() } From 8b80e8fc85b3bdea18d196f91a0ea07894de23ac Mon Sep 17 00:00:00 2001 From: David Vacca <515103+mdvacca@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:49:45 -0800 Subject: [PATCH 7/8] Fix SelfComparison lint error in NativeModuleRegistry.kt Summary: Fixed SelfComparison lint error by extracting the compared values into separate local variables, making it clearer to the linter that we're comparing two different instances. The original code was comparing `this.reactApplicationContext` with `newRegister.reactApplicationContext`, but the linter incorrectly flagged it as a self-comparison due to the same property name. changelog: [internal] internal Differential Revision: D91797839 --- .../java/com/facebook/react/bridge/NativeModuleRegistry.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.kt index dcf2e1946cd7d9..d0c9df1942e7fe 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.kt @@ -46,7 +46,9 @@ public class NativeModuleRegistry( ) // This is needed till there are Java Consumer of this API inside React // Native internal fun registerModules(newRegister: NativeModuleRegistry) { - check(reactApplicationContext == newRegister.reactApplicationContext) { + val ownContext = reactApplicationContext + val otherContext = newRegister.reactApplicationContext + check(ownContext == otherContext) { "Extending native modules with non-matching application contexts." } From 542428f9259d8ffd63031f27851f8b9a95bb2ff4 Mon Sep 17 00:00:00 2001 From: David Vacca <515103+mdvacca@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:49:45 -0800 Subject: [PATCH 8/8] Fix MissingSoLoaderLibrary lint warning in ReactNativeJNISoLoader.kt (#55443) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/55443 Fixed MissingSoLoaderLibrary lint error in ReactNativeJNISoLoader.kt. Added `SoLoaderLibrary("reactnativejni")` annotation to the class to declare the JNI dependency on the reactnativejni native library. This enables build tools to sanity check JNI merging. Also added the required `com.facebook.soloader.annotation:annotation` dependency to the native-types target in BUCK. changelog: [internal] internal Reviewed By: javache Differential Revision: D91913117 --- .../java/com/facebook/react/bridge/ReactNativeJNISoLoader.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNativeJNISoLoader.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNativeJNISoLoader.kt index 8fe22332b50358..aeb4b2c9fb9798 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNativeJNISoLoader.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNativeJNISoLoader.kt @@ -9,8 +9,10 @@ package com.facebook.react.bridge import com.facebook.react.common.annotations.internal.InteropLegacyArchitecture import com.facebook.soloader.SoLoader +import com.facebook.soloader.annotation.SoLoaderLibrary @InteropLegacyArchitecture +@SoLoaderLibrary("reactnativejni") internal object ReactNativeJNISoLoader { @JvmStatic