From 942013dffad59091847de04584e985d613339c78 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Mon, 5 Feb 2024 18:05:24 -0800 Subject: [PATCH] Mark classes of package uimanager/layoutanimation as @Nullsafe (#42857) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/42857 All these classes are NullSafe, let's mark them as NullSafe(Local) to ensure lint detect errors in the future changelog: [internal] internal Reviewed By: rshest Differential Revision: D53393472 fbshipit-source-id: 717507391623d67d03d83bf344475a4a830504a7 --- .../uimanager/layoutanimation/AnimatedPropertyType.java | 5 ++++- .../react/uimanager/layoutanimation/BaseLayoutAnimation.java | 4 +++- .../react/uimanager/layoutanimation/InterpolatorType.java | 4 +++- .../react/uimanager/layoutanimation/LayoutAnimationType.java | 5 ++++- .../uimanager/layoutanimation/LayoutCreateAnimation.java | 5 ++++- .../uimanager/layoutanimation/LayoutDeleteAnimation.java | 5 ++++- .../uimanager/layoutanimation/LayoutUpdateAnimation.java | 4 +++- .../react/uimanager/layoutanimation/OpacityAnimation.java | 4 +++- .../uimanager/layoutanimation/PositionAndSizeAnimation.java | 4 +++- .../uimanager/layoutanimation/SimpleSpringInterpolator.java | 4 +++- 10 files changed, 34 insertions(+), 10 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AnimatedPropertyType.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AnimatedPropertyType.java index 6eaa564362e..15005421e13 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AnimatedPropertyType.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/AnimatedPropertyType.java @@ -7,11 +7,14 @@ package com.facebook.react.uimanager.layoutanimation; +import com.facebook.infer.annotation.Nullsafe; + /** * Enum representing the different view properties that can be used when animating layout for view * creation. */ -/* package */ enum AnimatedPropertyType { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +enum AnimatedPropertyType { OPACITY, SCALE_X, SCALE_Y, diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/BaseLayoutAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/BaseLayoutAnimation.java index 551690dc55a..3507a8b66cc 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/BaseLayoutAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/BaseLayoutAnimation.java @@ -10,10 +10,12 @@ package com.facebook.react.uimanager.layoutanimation; import android.view.View; import android.view.animation.Animation; import android.view.animation.ScaleAnimation; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.uimanager.IllegalViewOperationException; /** Class responsible for default layout animation, i.e animation of view creation and deletion. */ -/* package */ abstract class BaseLayoutAnimation extends AbstractLayoutAnimation { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +abstract class BaseLayoutAnimation extends AbstractLayoutAnimation { abstract boolean isReverse(); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/InterpolatorType.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/InterpolatorType.java index ec4c866c2e3..c05d2378cfc 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/InterpolatorType.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/InterpolatorType.java @@ -7,12 +7,14 @@ package com.facebook.react.uimanager.layoutanimation; +import com.facebook.infer.annotation.Nullsafe; import java.util.Locale; /** * Enum representing the different interpolators that can be used in layout animation configuration. */ -/* package */ enum InterpolatorType { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +enum InterpolatorType { LINEAR, EASE_IN, EASE_OUT, diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.java index b12335f5186..86599997953 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutAnimationType.java @@ -7,10 +7,13 @@ package com.facebook.react.uimanager.layoutanimation; +import com.facebook.infer.annotation.Nullsafe; + /** * Enum representing the different animation type that can be specified in layout animation config. */ -/* package */ enum LayoutAnimationType { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +enum LayoutAnimationType { CREATE, UPDATE, DELETE; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.java index e2d062e3f16..f103cc69ac0 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutCreateAnimation.java @@ -7,11 +7,14 @@ package com.facebook.react.uimanager.layoutanimation; +import com.facebook.infer.annotation.Nullsafe; + /** * Class responsible for handling layout view creation animation, applied to view whenever a valid * config was supplied for the layout animation of CREATE type. */ -/* package */ class LayoutCreateAnimation extends BaseLayoutAnimation { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class LayoutCreateAnimation extends BaseLayoutAnimation { @Override boolean isReverse() { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.java index 6da804add62..1550cb64253 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutDeleteAnimation.java @@ -7,11 +7,14 @@ package com.facebook.react.uimanager.layoutanimation; +import com.facebook.infer.annotation.Nullsafe; + /** * Class responsible for handling layout view deletion animation, applied to view whenever a valid * config was supplied for the layout animation of DELETE type. */ -/* package */ class LayoutDeleteAnimation extends BaseLayoutAnimation { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class LayoutDeleteAnimation extends BaseLayoutAnimation { @Override boolean isReverse() { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.java index b4757cf44d8..2802c063a22 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/LayoutUpdateAnimation.java @@ -11,12 +11,14 @@ import android.view.View; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import androidx.annotation.Nullable; +import com.facebook.infer.annotation.Nullsafe; /** * Class responsible for handling layout update animation, applied to view whenever a valid config * was supplied for the layout animation of UPDATE type. */ -/* package */ class LayoutUpdateAnimation extends AbstractLayoutAnimation { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class LayoutUpdateAnimation extends AbstractLayoutAnimation { // We are currently not enabling translation GPU-accelerated animated, as it creates odd // artifacts with native react scrollview. This needs to be investigated. diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.java index 6d1c350a3a0..6114b0de687 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/OpacityAnimation.java @@ -10,12 +10,14 @@ package com.facebook.react.uimanager.layoutanimation; import android.view.View; import android.view.animation.Animation; import android.view.animation.Transformation; +import com.facebook.infer.annotation.Nullsafe; /** * Animation responsible for updating opacity of a view. It should ideally use hardware texture to * optimize rendering performances. */ -/* package */ class OpacityAnimation extends Animation { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class OpacityAnimation extends Animation { static class OpacityAnimationListener implements Animation.AnimationListener { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/PositionAndSizeAnimation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/PositionAndSizeAnimation.java index 26789ecbbad..f1a285dc379 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/PositionAndSizeAnimation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/PositionAndSizeAnimation.java @@ -10,6 +10,7 @@ package com.facebook.react.uimanager.layoutanimation; import android.view.View; import android.view.animation.Animation; import android.view.animation.Transformation; +import com.facebook.infer.annotation.Nullsafe; /** * Animation responsible for updating size and position of a view. We can't use scaling as view @@ -17,7 +18,8 @@ import android.view.animation.Transformation; * passes occurring on every frame. What we might want to try to do instead is use a combined * ScaleAnimation and TranslateAnimation. */ -/* package */ class PositionAndSizeAnimation extends Animation implements LayoutHandlingAnimation { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class PositionAndSizeAnimation extends Animation implements LayoutHandlingAnimation { private final View mView; private float mStartX, mStartY, mDeltaX, mDeltaY; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.java index 57304103e2e..84cbe2ae9ca 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/layoutanimation/SimpleSpringInterpolator.java @@ -8,12 +8,14 @@ package com.facebook.react.uimanager.layoutanimation; import android.view.animation.Interpolator; +import com.facebook.infer.annotation.Nullsafe; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableType; /** Simple spring interpolator */ // TODO(7613736): Improve spring interpolator with friction and damping variable support -/* package */ class SimpleSpringInterpolator implements Interpolator { +/* package */ @Nullsafe(Nullsafe.Mode.LOCAL) +class SimpleSpringInterpolator implements Interpolator { private static final float FACTOR = 0.5f; public static final String PARAM_SPRING_DAMPING = "springDamping";