From 234de67b12d9aba09ee382c80413ccce45f9c13e Mon Sep 17 00:00:00 2001 From: David Vacca Date: Thu, 12 Feb 2026 09:01:10 -0800 Subject: [PATCH 1/4] Fix NonStaticNestedClass: Make inner class static (#55501) Summary: The BaseVMFocusChangeListener inner class does not reference any members of its outer class BaseViewManager. Making it static improves memory efficiency by avoiding the implicit reference to the outer class instance. Also removed the unused type parameter and changed the method parameters from T to View since only View interface methods are used. changelog: [internal] internal Reviewed By: cortinico Differential Revision: D92020879 --- .../java/com/facebook/react/uimanager/BaseViewManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java index 2d47e5a291b9..28d92671f19a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java @@ -1012,18 +1012,18 @@ public void setTouchCancel(@NonNull T view, boolean value) { * especially helpful for views that are recycled so we can retain and restore the original * listener upon recycling (onDropViewInstance). */ - private class BaseVMFocusChangeListener implements OnFocusChangeListener { + private static class BaseVMFocusChangeListener implements OnFocusChangeListener { private @Nullable OnFocusChangeListener mOriginalFocusChangeListener; public BaseVMFocusChangeListener(@Nullable OnFocusChangeListener originalFocusChangeListener) { mOriginalFocusChangeListener = originalFocusChangeListener; } - public void attach(T view) { + public void attach(View view) { view.setOnFocusChangeListener(this); } - public void detach(T view) { + public void detach(View view) { view.setOnFocusChangeListener(mOriginalFocusChangeListener); } From 5efe62e54b51339d56e7c53a3286f29cd313d1c9 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Thu, 12 Feb 2026 09:01:10 -0800 Subject: [PATCH 2/4] Fix MissingOverrideAnnotation: Add @Override to flex methods (#55502) Summary: This change adds missing Override annotations to three methods in LayoutShadowNode that override methods from the parent class: - setFlex(float) - setFlexGrow(float) - setFlexShrink(float) These methods call super.setFlex/setFlexGrow/setFlexShrink, indicating they override parent methods and should have Override annotations for code clarity and compiler checking. changelog: [internal] internal Reviewed By: alanleedev Differential Revision: D92021000 --- .../java/com/facebook/react/uimanager/LayoutShadowNode.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.java index 757727322c06..b83497e7e73d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.java @@ -230,6 +230,7 @@ public void setMaxHeight(Dynamic maxHeight) { maxHeight.recycle(); } + @Override @ReactProp(name = ViewProps.FLEX, defaultFloat = 0f) public void setFlex(float flex) { if (isVirtual()) { @@ -238,6 +239,7 @@ public void setFlex(float flex) { super.setFlex(flex); } + @Override @ReactProp(name = ViewProps.FLEX_GROW, defaultFloat = 0f) public void setFlexGrow(float flexGrow) { if (isVirtual()) { @@ -309,6 +311,7 @@ public void setGap(Dynamic gap) { gap.recycle(); } + @Override @ReactProp(name = ViewProps.FLEX_SHRINK, defaultFloat = 0f) public void setFlexShrink(float flexShrink) { if (isVirtual()) { From c4e5341bb8265fc227189eca07047a457bcd4851 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Thu, 12 Feb 2026 09:01:10 -0800 Subject: [PATCH 3/4] Fix DeadVariable and NotInvokedPrivateMethod: Remove unused code (#55503) Summary: Remove unused code that was triggering lint warnings: 1. Remove `walkUpUntilNativeKindIsParent` private method that was never invoked 2. Remove `parent` variable in `applyLayoutBase` that was never accessed Both were leftover from NativeKind removal. changelog: [internal] internal Reviewed By: alanleedev Differential Revision: D92021031 --- .../react/uimanager/NativeViewHierarchyOptimizer.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java index 8bcbd2adc6da..79f3f6b5db5f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java @@ -231,12 +231,6 @@ public void onBatchComplete() { mTagsWithLayoutVisited.clear(); } - private NodeIndexPair walkUpUntilNativeKindIsParent( - ReactShadowNode node, int indexInNativeChildren) { - // Logic removed due to NativeKind removal - return new NodeIndexPair(node, indexInNativeChildren); - } - private void addNodeToNode(ReactShadowNode parent, ReactShadowNode child, int index) { // Logic removed due to NativeKind removal } @@ -289,8 +283,6 @@ private void applyLayoutBase(ReactShadowNode node) { } mTagsWithLayoutVisited.put(tag, true); - ReactShadowNode parent = node.getParent(); - // We use screenX/screenY (which round to integer pixels) at each node in the hierarchy to // emulate what the layout would look like if it were actually built with native views which // have to have integral top/left/bottom/right values From 8e7c4e0a8451c176df4b0059021b1e6331337905 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Thu, 12 Feb 2026 09:01:10 -0800 Subject: [PATCH 4/4] Fix HasBetterKotlinAlternativeMethod: Use Kotlin joinToString (#55504) Summary: Replace `TextUtils.join(", ", features)` with the idiomatic Kotlin `features.joinToString(", ")`. This fixes the HasBetterKotlinAlternativeMethod lint warning and removes the now-unused TextUtils import. changelog: [internal] internal Reviewed By: alanleedev Differential Revision: D92021387 --- .../java/com/facebook/react/views/text/ReactTypefaceUtils.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.kt index 85043dfcb66e..e33daa691f31 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.kt @@ -9,7 +9,6 @@ package com.facebook.react.views.text import android.content.res.AssetManager import android.graphics.Typeface -import android.text.TextUtils import com.facebook.react.bridge.ReadableArray import com.facebook.react.common.ReactConstants import com.facebook.react.common.assets.ReactFontManager @@ -93,7 +92,7 @@ public object ReactTypefaceUtils { "stylistic-twenty" -> features.add("'ss20'") } } - return TextUtils.join(", ", features) + return features.joinToString(", ") } @JvmStatic