diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/HermesSamplingProfiler.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/HermesSamplingProfiler.kt index 9fef00ed214a12..be0c8f1a1ea8d5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/HermesSamplingProfiler.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/HermesSamplingProfiler.kt @@ -8,8 +8,10 @@ package com.facebook.hermes.instrumentation import com.facebook.soloader.SoLoader +import com.facebook.soloader.annotation.SoLoaderLibrary /** Hermes sampling profiler static JSI API. */ +@SoLoaderLibrary("jsijniprofiler") public object HermesSamplingProfiler { init { SoLoader.loadLibrary("jsijniprofiler") diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/CxxInspectorPackagerConnection.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/CxxInspectorPackagerConnection.kt index 5e3be8b1441320..7da1dbb949acfc 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/CxxInspectorPackagerConnection.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/CxxInspectorPackagerConnection.kt @@ -34,7 +34,9 @@ internal class CxxInspectorPackagerConnection( deviceName: String, packageName: String, ) : IInspectorPackagerConnection { - @DoNotStrip private val mHybridData: HybridData + @Suppress("NoHungarianNotation") // fbjni accesses this field by name "mHybridData" + @DoNotStrip + private val mHybridData: HybridData init { mHybridData = initHybrid(url, deviceName, packageName, DelegateImpl()) @@ -48,7 +50,12 @@ internal class CxxInspectorPackagerConnection( /** Java wrapper around a C++ IWebSocketDelegate, allowing us to call the interface from Java. */ @DoNotStrip - private class WebSocketDelegate @DoNotStrip constructor(private val mHybridData: HybridData) : + private class WebSocketDelegate + @DoNotStrip + constructor( + @Suppress("NoHungarianNotation") // fbjni accesses this field by name "mHybridData" + private val mHybridData: HybridData, + ) : Closeable { external fun didFailWithError(posixCode: Int?, error: String?) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/SurfaceHandlerBinding.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/SurfaceHandlerBinding.kt index f7af235b6498c4..3ae993b04f7840 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/SurfaceHandlerBinding.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/SurfaceHandlerBinding.kt @@ -13,12 +13,6 @@ import com.facebook.react.fabric.mounting.LayoutMetricsConversions internal open class SurfaceHandlerBinding(moduleName: String) : HybridClassBase() { - init { - initHybrid(NO_SURFACE_ID, moduleName) - } - - private external fun initHybrid(surfaceId: Int, moduleName: String) - val surfaceId: Int get() = _getSurfaceId() @@ -28,6 +22,12 @@ internal open class SurfaceHandlerBinding(moduleName: String) : HybridClassBase( val moduleName: String get() = _getModuleName() + init { + initHybrid(NO_SURFACE_ID, moduleName) + } + + private external fun initHybrid(surfaceId: Int, moduleName: String) + private external fun _getSurfaceId(): Int private external fun _getModuleName(): String diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobCollector.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobCollector.kt index f7108095bc91a7..d77711b0682ce4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobCollector.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobCollector.kt @@ -10,7 +10,9 @@ package com.facebook.react.modules.blob import com.facebook.react.bridge.JavaScriptContextHolder import com.facebook.react.bridge.ReactContext import com.facebook.soloader.SoLoader +import com.facebook.soloader.annotation.SoLoaderLibrary +@SoLoaderLibrary("reactnativeblob") internal object BlobCollector { init { SoLoader.loadLibrary("reactnativeblob") diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSRuntimeFactory.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSRuntimeFactory.kt index 2e8f4b8ad9ad43..d0a12a91f62e8c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSRuntimeFactory.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSRuntimeFactory.kt @@ -10,7 +10,9 @@ package com.facebook.react.runtime import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip import com.facebook.soloader.SoLoader +import com.facebook.soloader.annotation.SoLoaderLibrary +@SoLoaderLibrary("rninstance") public abstract class JSRuntimeFactory( @Suppress("unused", "NoHungarianNotation", "NotAccessedPrivateField") @DoNotStrip diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSTimerExecutor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSTimerExecutor.kt index 15c11a07531a18..21b628fd47e739 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSTimerExecutor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSTimerExecutor.kt @@ -13,8 +13,10 @@ import com.facebook.react.bridge.WritableArray import com.facebook.react.bridge.WritableNativeArray import com.facebook.react.modules.core.JavaScriptTimerExecutor import com.facebook.soloader.SoLoader +import com.facebook.soloader.annotation.SoLoaderLibrary @DoNotStrip +@SoLoaderLibrary("rninstance") internal class JSTimerExecutor() : HybridClassBase(), JavaScriptTimerExecutor { init { initHybrid() diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostInspectorTarget.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostInspectorTarget.kt index 936bcac115cabd..0b849197371dc0 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostInspectorTarget.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostInspectorTarget.kt @@ -18,6 +18,7 @@ import com.facebook.react.devsupport.inspector.TracingStateListener import com.facebook.react.devsupport.perfmonitor.PerfMonitorInspectorTarget import com.facebook.react.devsupport.perfmonitor.PerfMonitorUpdateListener import com.facebook.soloader.SoLoader +import com.facebook.soloader.annotation.SoLoaderLibrary import java.io.Closeable import java.util.concurrent.Executor @@ -82,6 +83,7 @@ internal class ReactHostInspectorTarget(reactHostImpl: ReactHostImpl) : return mHybridData.isValid() } + @SoLoaderLibrary("rninstance") private companion object { init { SoLoader.loadLibrary("rninstance") diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/hermes/HermesInstance.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/hermes/HermesInstance.kt index 9d9877e677cf6a..fb540bf73aca4b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/hermes/HermesInstance.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/hermes/HermesInstance.kt @@ -11,7 +11,9 @@ import com.facebook.jni.HybridData import com.facebook.jni.annotations.DoNotStrip import com.facebook.react.runtime.JSRuntimeFactory import com.facebook.soloader.SoLoader +import com.facebook.soloader.annotation.SoLoaderLibrary +@SoLoaderLibrary("hermesinstancejni") public class HermesInstance(allocInOldGenBeforeTTI: Boolean) : JSRuntimeFactory(initHybrid(allocInOldGenBeforeTTI)) { 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 2d47e5a291b9e8..28d92671f19ac3 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); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BlendModeHelper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BlendModeHelper.kt index f699dd592966e0..d7b7ec23340aa6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BlendModeHelper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BlendModeHelper.kt @@ -7,10 +7,10 @@ package com.facebook.react.uimanager -import android.annotation.TargetApi import android.graphics.BlendMode import android.os.Build import android.view.ViewGroup +import androidx.annotation.RequiresApi import androidx.core.view.children import com.facebook.react.R @@ -20,7 +20,7 @@ import com.facebook.react.R * This object provides utilities to convert CSS mix-blend-mode string values into Android's * [BlendMode] enumeration and to determine when views need isolated layers for proper blending. */ -@TargetApi(29) +@RequiresApi(29) internal object BlendModeHelper { /** diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolverBinding.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolverBinding.kt index 25c573777d9550..5d67840510dc04 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolverBinding.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolverBinding.kt @@ -10,6 +10,7 @@ package com.facebook.react.uimanager import com.facebook.proguard.annotations.DoNotStripAny import com.facebook.react.bridge.RuntimeExecutor import com.facebook.soloader.SoLoader +import com.facebook.soloader.annotation.SoLoaderLibrary import kotlin.jvm.JvmStatic /** @@ -19,6 +20,7 @@ import kotlin.jvm.JvmStatic * JavaScript runtime, making component name information available to the native side. */ @DoNotStripAny +@SoLoaderLibrary("uimanagerjni") internal object ComponentNameResolverBinding { init { SoLoader.loadLibrary("uimanagerjni") 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 757727322c0629..b83497e7e73d85 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()) { 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 8bcbd2adc6da0e..79f3f6b5db5fea 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 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 85043dfcb66e2c..e33daa691f3174 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 diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.kt index 433afa5793aede..45c8bec4c2b8ad 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.kt @@ -9,7 +9,6 @@ package com.facebook.react.views.text import android.os.Build import android.text.Layout -import android.text.TextUtils import android.text.TextUtils.TruncateAt import android.util.LayoutDirection import android.view.Gravity @@ -238,7 +237,7 @@ public class TextAttributeProps private constructor() { } } } - fontFeatureSettings = TextUtils.join(", ", features) + fontFeatureSettings = features.joinToString(", ") } private fun setFontWeight(fontWeightString: String?) {