diff --git a/appcompat/appcompat-lint/integration-tests/build.gradle b/appcompat/appcompat-lint/integration-tests/build.gradle
index 5153ca8..309699d 100644
--- a/appcompat/appcompat-lint/integration-tests/build.gradle
+++ b/appcompat/appcompat-lint/integration-tests/build.gradle
@@ -12,6 +12,7 @@
 }
 
 dependencies {
+    api(libs.jspecify)
     implementation(project(":appcompat:appcompat"))
     implementation(project(":core:core"))
     api(libs.kotlinStdlib)
diff --git a/appcompat/appcompat-lint/integration-tests/src/main/java/com/example/android/appcompat/ActivityWithClick.java b/appcompat/appcompat-lint/integration-tests/src/main/java/com/example/android/appcompat/ActivityWithClick.java
index 52e1d0a..22ce10e 100644
--- a/appcompat/appcompat-lint/integration-tests/src/main/java/com/example/android/appcompat/ActivityWithClick.java
+++ b/appcompat/appcompat-lint/integration-tests/src/main/java/com/example/android/appcompat/ActivityWithClick.java
@@ -20,9 +20,10 @@
 import android.view.View;
 import android.widget.Toast;
 
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 
+import org.jspecify.annotations.Nullable;
+
 /**
  * Activity for testing the android:onClick Lint rule
  */
diff --git a/appcompat/appcompat-resources/build.gradle b/appcompat/appcompat-resources/build.gradle
index 0172efc..b5e53c11 100644
--- a/appcompat/appcompat-resources/build.gradle
+++ b/appcompat/appcompat-resources/build.gradle
@@ -30,6 +30,7 @@
 }
 
 dependencies {
+    api(libs.jspecify)
     api("androidx.annotation:annotation:1.8.1")
     api("androidx.core:core:1.6.0")
     implementation("androidx.collection:collection:1.4.2")
diff --git a/appcompat/appcompat-resources/src/androidTest/java/androidx/appcompat/widget/TestResources.java b/appcompat/appcompat-resources/src/androidTest/java/androidx/appcompat/widget/TestResources.java
index 9da3eb9..f18047b 100644
--- a/appcompat/appcompat-resources/src/androidTest/java/androidx/appcompat/widget/TestResources.java
+++ b/appcompat/appcompat-resources/src/androidTest/java/androidx/appcompat/widget/TestResources.java
@@ -19,7 +19,7 @@
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 /**
  * Observable Resources class.
@@ -39,9 +39,8 @@
         return super.getDrawable(id);
     }
 
-    @NonNull
     @Override
-    public String getString(int id) throws NotFoundException {
+    public @NonNull String getString(int id) throws NotFoundException {
         mGetStringCalled = true;
         return super.getString(id);
     }
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/content/res/AppCompatResources.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/content/res/AppCompatResources.java
index b97ec39..0e732bc 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/content/res/AppCompatResources.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/content/res/AppCompatResources.java
@@ -22,11 +22,12 @@
 
 import androidx.annotation.ColorRes;
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.widget.ResourceManagerInternal;
 import androidx.core.content.ContextCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Class for accessing an application's resources through AppCompat, and thus any backward
  * compatible functionality.
@@ -59,8 +60,7 @@
      * @return Drawable An object that can be used to draw this resource.
      * @see ContextCompat#getDrawable(Context, int)
      */
-    @Nullable
-    public static Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {
+    public static @Nullable Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {
         return ResourceManagerInternal.get().getDrawable(context, resId);
     }
 }
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java
index ecff44f..ae5f51d 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java
@@ -36,8 +36,6 @@
 import android.util.Xml;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.resources.Compatibility;
 import androidx.appcompat.resources.R;
 import androidx.appcompat.widget.ResourceManagerInternal;
@@ -48,6 +46,8 @@
 import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat;
 import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -129,11 +129,10 @@
      * @param theme the theme to apply, may be null.
      * @return a new AnimatedStateListDrawableCompat or null if parsing error is found.
      */
-    @Nullable
-    public static AnimatedStateListDrawableCompat create(
+    public static @Nullable AnimatedStateListDrawableCompat create(
             @NonNull Context context,
             @DrawableRes int resId,
-            @Nullable Resources.Theme theme) {
+            Resources.@Nullable Theme theme) {
         try {
             final Resources res = context.getResources();
             @SuppressLint("ResourceType")
@@ -162,13 +161,12 @@
      * {@link Resources.Theme}. Called on a parser positioned at a tag in an XML
      * document, tries to create an AnimatedStateListDrawableCompat from that tag.
      */
-    @NonNull
-    public static AnimatedStateListDrawableCompat createFromXmlInner(
+    public static @NonNull AnimatedStateListDrawableCompat createFromXmlInner(
             @NonNull Context context,
             @NonNull Resources resources,
             @NonNull XmlPullParser parser,
             @NonNull AttributeSet attrs,
-            @Nullable Resources.Theme theme)
+            Resources.@Nullable Theme theme)
             throws IOException, XmlPullParserException {
         final String name = parser.getName();
         if (!name.equals("animated-selector")) {
@@ -198,7 +196,7 @@
             @NonNull Resources resources,
             @NonNull XmlPullParser parser,
             @NonNull AttributeSet attrs,
-            @Nullable Resources.Theme theme)
+            Resources.@Nullable Theme theme)
             throws XmlPullParserException, IOException {
         final TypedArray a = obtainAttributes(
                 resources, theme, attrs, R.styleable.AnimatedStateListDrawableCompat);
@@ -232,7 +230,7 @@
      * @param drawable The drawable to show when in the specified state, may not be null
      * @param id       The unique identifier for the keyframe
      */
-    public void addState(@NonNull int[] stateSet, @NonNull Drawable drawable, int id) {
+    public void addState(int @NonNull [] stateSet, @NonNull Drawable drawable, int id) {
         ObjectsCompat.requireNonNull(drawable);
         mState.addStateSet(stateSet, drawable, id);
         onStateChange(getState());
@@ -270,7 +268,7 @@
     }
 
     @Override
-    protected boolean onStateChange(@NonNull int[] stateSet) {
+    protected boolean onStateChange(int @NonNull [] stateSet) {
         // If we're not already at the target index, either attempt to find a
         // valid transition to it or jump directly there.
         final int targetIndex = mState.indexOfKeyframe(stateSet);
@@ -473,7 +471,7 @@
             @NonNull Resources resources,
             @NonNull XmlPullParser parser,
             @NonNull AttributeSet attrs,
-            @Nullable Resources.Theme theme)
+            Resources.@Nullable Theme theme)
             throws XmlPullParserException, IOException {
         int type;
         final int innerDepth = parser.getDepth() + 1;
@@ -500,7 +498,7 @@
             @NonNull Resources resources,
             @NonNull XmlPullParser parser,
             @NonNull AttributeSet attrs,
-            @Nullable Resources.Theme theme)
+            Resources.@Nullable Theme theme)
             throws XmlPullParserException, IOException {
 
         final TypedArray a = obtainAttributes(resources, theme, attrs,
@@ -556,7 +554,7 @@
             @NonNull Resources resources,
             @NonNull XmlPullParser parser,
             @NonNull AttributeSet attrs,
-            @Nullable Resources.Theme theme)
+            Resources.@Nullable Theme theme)
             throws XmlPullParserException, IOException {
         final TypedArray a = obtainAttributes(resources, theme, attrs,
                 R.styleable.AnimatedStateListDrawableItem);
@@ -598,9 +596,8 @@
         return mState.addStateSet(states, dr, keyframeId);
     }
 
-    @NonNull
     @Override
-    public Drawable mutate() {
+    public @NonNull Drawable mutate() {
         if (!mMutated && super.mutate() == this) {
             mState.mutate();
             mMutated = true;
@@ -662,13 +659,13 @@
             return pos;
         }
 
-        int addStateSet(@NonNull int[] stateSet, @NonNull Drawable drawable, int id) {
+        int addStateSet(int @NonNull [] stateSet, @NonNull Drawable drawable, int id) {
             final int index = super.addStateSet(stateSet, drawable);
             mStateIds.put(index, id);
             return index;
         }
 
-        int indexOfKeyframe(@NonNull int[] stateSet) {
+        int indexOfKeyframe(int @NonNull [] stateSet) {
             final int index = super.indexOfStateSet(stateSet);
             if (index >= 0) {
                 return index;
@@ -695,15 +692,13 @@
             return (mTransitions.get(keyFromTo, -1L) & REVERSIBLE_FLAG_BIT) != 0L;
         }
 
-        @NonNull
         @Override
-        public Drawable newDrawable() {
+        public @NonNull Drawable newDrawable() {
             return new AnimatedStateListDrawableCompat(this, null);
         }
 
-        @NonNull
         @Override
-        public Drawable newDrawable(Resources res) {
+        public @NonNull Drawable newDrawable(Resources res) {
             return new AnimatedStateListDrawableCompat(this, res);
         }
 
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java
index 104efb4..44b9bbc 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java
@@ -35,11 +35,12 @@
 import android.view.View;
 
 import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.core.graphics.drawable.DrawableCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A helper class that contains several {@link Drawable}s and selects which one to use.
  * <p>
@@ -299,7 +300,7 @@
     }
 
     @Override
-    protected boolean onStateChange(@NonNull int[] state) {
+    protected boolean onStateChange(int @NonNull [] state) {
         if (mLastDrawable != null) {
             return mLastDrawable.setState(state);
         }
@@ -568,9 +569,8 @@
         }
     }
 
-    @NonNull
     @Override
-    public Drawable getCurrent() {
+    public @NonNull Drawable getCurrent() {
         return mCurrDrawable;
     }
 
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java
index 0531212..bff5a61 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapperCompat.java
@@ -25,10 +25,11 @@
 import android.graphics.drawable.Drawable;
 import android.view.View;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.core.graphics.drawable.DrawableCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Drawable which delegates all calls to its wrapped {@link Drawable}.
  * <p>
@@ -222,8 +223,7 @@
     /**
      * @return the wrapped drawable
      */
-    @Nullable
-    public Drawable getDrawable() {
+    public @Nullable Drawable getDrawable() {
         return mDrawable;
     }
 
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java
index 7e33bca..0ba6046 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawableCompat.java
@@ -29,13 +29,13 @@
 import android.util.AttributeSet;
 import android.util.StateSet;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.appcompat.resources.Compatibility;
 import androidx.appcompat.resources.R;
 import androidx.appcompat.widget.ResourceManagerInternal;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -105,7 +105,7 @@
     }
 
     @Override
-    protected boolean onStateChange(@NonNull int[] stateSet) {
+    protected boolean onStateChange(int @NonNull [] stateSet) {
         final boolean changed = super.onStateChange(stateSet);
         int idx = mStateListState.indexOfStateSet(stateSet);
         if (DEBUG) {
@@ -300,9 +300,8 @@
         return mStateListState.indexOfStateSet(stateSet);
     }
 
-    @NonNull
     @Override
-    public Drawable mutate() {
+    public @NonNull Drawable mutate() {
         if (!mMutated && super.mutate() == this) {
             mStateListState.mutate();
             mMutated = true;
@@ -360,15 +359,13 @@
             return -1;
         }
 
-        @NonNull
         @Override
-        public Drawable newDrawable() {
+        public @NonNull Drawable newDrawable() {
             return new StateListDrawableCompat(this, null);
         }
 
-        @NonNull
         @Override
-        public Drawable newDrawable(Resources res) {
+        public @NonNull Drawable newDrawable(Resources res) {
             return new StateListDrawableCompat(this, res);
         }
 
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/resources/Compatibility.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/resources/Compatibility.java
index 40ae0b8..a25c8d1 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/resources/Compatibility.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/resources/Compatibility.java
@@ -21,11 +21,11 @@
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -49,7 +49,7 @@
 
         public static void inflate(@NonNull Drawable drawable, @NonNull Resources r,
                 @NonNull XmlPullParser parser, @NonNull AttributeSet attrs,
-                @Nullable Resources.Theme theme) throws IOException, XmlPullParserException {
+                Resources.@Nullable Theme theme) throws IOException, XmlPullParserException {
             drawable.inflate(r, parser, attrs, theme);
         }
 
@@ -57,10 +57,9 @@
             return typedArray.getChangingConfigurations();
         }
 
-        @NonNull
-        public static Drawable createFromXmlInner(@NonNull Resources r,
+        public static @NonNull Drawable createFromXmlInner(@NonNull Resources r,
                 @NonNull XmlPullParser parser, @NonNull AttributeSet attrs,
-                @Nullable Resources.Theme theme) throws IOException, XmlPullParserException {
+                Resources.@Nullable Theme theme) throws IOException, XmlPullParserException {
             return Drawable.createFromXmlInner(r, parser, attrs, theme);
         }
     }
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/DrawableUtils.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/DrawableUtils.java
index 2329750..675f466 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/DrawableUtils.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/DrawableUtils.java
@@ -26,11 +26,12 @@
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.core.graphics.drawable.DrawableCompat;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -51,8 +52,7 @@
      * Allows us to get the optical insets for a {@link Drawable}. Since this is hidden we need to
      * use reflection. Since the {@code Insets} class is hidden also, we return a Rect instead.
      */
-    @NonNull
-    public static Rect getOpticalBounds(@NonNull Drawable drawable) {
+    public static @NonNull Rect getOpticalBounds(@NonNull Drawable drawable) {
         if (Build.VERSION.SDK_INT >= 29) {
             final Insets insets = Api29Impl.getOpticalInsets(drawable);
             return new Rect(
@@ -189,8 +189,7 @@
             // This class is not instantiable.
         }
 
-        @NonNull
-        static Rect getOpticalInsets(@NonNull Drawable drawable) {
+        static @NonNull Rect getOpticalInsets(@NonNull Drawable drawable) {
             // Check the SDK_INT to avoid UncheckedReflection error.
             if (Build.VERSION.SDK_INT < 29 && sReflectionSuccessful) {
                 try {
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java
index d64a144e..20e193a 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java
@@ -35,8 +35,6 @@
 import android.util.Xml;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat;
 import androidx.appcompat.resources.Compatibility;
@@ -50,6 +48,8 @@
 import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat;
 import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -62,22 +62,21 @@
 public final class ResourceManagerInternal {
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     public interface ResourceManagerHooks {
-        @Nullable
-        Drawable createDrawableFor(@NonNull ResourceManagerInternal appCompatDrawableManager,
+        @Nullable Drawable createDrawableFor(
+                @NonNull ResourceManagerInternal appCompatDrawableManager,
                 @NonNull Context context, @DrawableRes final int resId);
         boolean tintDrawable(@NonNull Context context, @DrawableRes int resId,
                 @NonNull Drawable drawable);
-        @Nullable
-        ColorStateList getTintListForDrawableRes(@NonNull Context context, @DrawableRes int resId);
+        @Nullable ColorStateList getTintListForDrawableRes(
+                @NonNull Context context, @DrawableRes int resId);
         boolean tintDrawableUsingColorFilter(@NonNull Context context,
                 @DrawableRes final int resId, @NonNull Drawable drawable);
-        @Nullable
-        PorterDuff.Mode getTintModeForDrawableRes(final int resId);
+        PorterDuff.@Nullable Mode getTintModeForDrawableRes(final int resId);
     }
 
     private interface InflateDelegate {
         Drawable createFromXmlInner(@NonNull Context context, @NonNull XmlPullParser parser,
-                @NonNull AttributeSet attrs, @Nullable Resources.Theme theme);
+                @NonNull AttributeSet attrs, Resources.@Nullable Theme theme);
     }
 
     private static final String TAG = "ResourceManagerInternal";
@@ -311,7 +310,7 @@
         return null;
     }
 
-    private synchronized Drawable getCachedDrawable(@NonNull final Context context,
+    private synchronized Drawable getCachedDrawable(final @NonNull Context context,
             final long key) {
         final LongSparseArray<WeakReference<ConstantState>> cache = mDrawableCaches.get(context);
         if (cache == null) {
@@ -332,8 +331,8 @@
         return null;
     }
 
-    private synchronized boolean addDrawableToCache(@NonNull final Context context, final long key,
-            @NonNull final Drawable drawable) {
+    private synchronized boolean addDrawableToCache(final @NonNull Context context, final long key,
+            final @NonNull Drawable drawable) {
         final ConstantState cs = drawable.getConstantState();
         if (cs != null) {
             LongSparseArray<WeakReference<ConstantState>> cache = mDrawableCaches.get(context);
@@ -515,7 +514,7 @@
 
         @Override
         public Drawable createFromXmlInner(@NonNull Context context, @NonNull XmlPullParser parser,
-                @NonNull AttributeSet attrs, @Nullable Resources.Theme theme) {
+                @NonNull AttributeSet attrs, Resources.@Nullable Theme theme) {
             try {
                 return VectorDrawableCompat
                         .createFromXmlInner(context.getResources(), parser, attrs, theme);
@@ -532,7 +531,7 @@
 
         @Override
         public Drawable createFromXmlInner(@NonNull Context context, @NonNull XmlPullParser parser,
-                @NonNull AttributeSet attrs, @Nullable Resources.Theme theme) {
+                @NonNull AttributeSet attrs, Resources.@Nullable Theme theme) {
             try {
                 return AnimatedVectorDrawableCompat
                         .createFromXmlInner(context, context.getResources(), parser, attrs, theme);
@@ -546,7 +545,7 @@
     static class AsldcInflateDelegate implements InflateDelegate {
         @Override
         public Drawable createFromXmlInner(@NonNull Context context, @NonNull XmlPullParser parser,
-                @NonNull AttributeSet attrs, @Nullable Resources.Theme theme) {
+                @NonNull AttributeSet attrs, Resources.@Nullable Theme theme) {
             try {
                 return AnimatedStateListDrawableCompat
                         .createFromXmlInner(context, context.getResources(), parser, attrs, theme);
@@ -560,7 +559,7 @@
     static class DrawableDelegate implements InflateDelegate {
         @Override
         public Drawable createFromXmlInner(@NonNull Context context, @NonNull XmlPullParser parser,
-                @NonNull AttributeSet attrs, @Nullable Resources.Theme theme) {
+                @NonNull AttributeSet attrs, Resources.@Nullable Theme theme) {
             String className = attrs.getClassAttribute();
             if (className != null) {
                 try {
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintContextWrapper.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintContextWrapper.java
index dae6e11..92a8b07 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintContextWrapper.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintContextWrapper.java
@@ -24,9 +24,10 @@
 import android.content.res.Resources;
 import android.os.Build;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 
@@ -41,7 +42,7 @@
     private static final Object CACHE_LOCK = new Object();
     private static ArrayList<WeakReference<TintContextWrapper>> sCache;
 
-    public static Context wrap(@NonNull final Context context) {
+    public static Context wrap(final @NonNull Context context) {
         if (shouldWrap(context)) {
             synchronized (CACHE_LOCK) {
                 if (sCache == null) {
@@ -73,7 +74,7 @@
         return context;
     }
 
-    private static boolean shouldWrap(@NonNull final Context context) {
+    private static boolean shouldWrap(final @NonNull Context context) {
         if (context instanceof TintContextWrapper
                 || context.getResources() instanceof TintResources
                 || context.getResources() instanceof VectorEnabledTintResources) {
@@ -87,7 +88,7 @@
     private final Resources mResources;
     private final Resources.Theme mTheme;
 
-    private TintContextWrapper(@NonNull final Context base) {
+    private TintContextWrapper(final @NonNull Context base) {
         super(base);
 
         if (VectorEnabledTintResources.shouldBeUsed()) {
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintResources.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintResources.java
index 9461000..c536410 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintResources.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/TintResources.java
@@ -20,7 +20,7 @@
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 import java.lang.ref.WeakReference;
 
@@ -31,7 +31,7 @@
 
     private final WeakReference<Context> mContextRef;
 
-    public TintResources(@NonNull Context context, @NonNull final Resources res) {
+    public TintResources(@NonNull Context context, final @NonNull Resources res) {
         super(res);
         mContextRef = new WeakReference<>(context);
     }
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java
index dd9b704..2efd63a8 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java
@@ -23,9 +23,10 @@
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.ref.WeakReference;
 
 /**
@@ -50,8 +51,8 @@
     private final WeakReference<Context> mContextRef;
 
     @SuppressWarnings("deprecation")
-    public VectorEnabledTintResources(@NonNull final Context context,
-            @NonNull final Resources res) {
+    public VectorEnabledTintResources(final @NonNull Context context,
+            final @NonNull Resources res) {
         super(res);
         mContextRef = new WeakReference<>(context);
     }
diff --git a/appcompat/appcompat/build.gradle b/appcompat/appcompat/build.gradle
index 5dfee05..8fa8635 100644
--- a/appcompat/appcompat/build.gradle
+++ b/appcompat/appcompat/build.gradle
@@ -15,6 +15,7 @@
 }
 
 dependencies {
+    api(libs.jspecify)
     api("androidx.annotation:annotation:1.8.1")
     api("androidx.core:core:1.13.0")
 
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogFragmentTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogFragmentTest.java
index cf7049e..8613f5d 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogFragmentTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatDialogFragmentTest.java
@@ -22,13 +22,13 @@
 import android.app.Dialog;
 import android.os.Bundle;
 
-import androidx.annotation.NonNull;
 import androidx.appcompat.test.R;
 import androidx.fragment.app.DialogFragment;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
 import androidx.test.platform.app.InstrumentationRegistry;
 
+import org.jspecify.annotations.NonNull;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -82,9 +82,8 @@
     }
 
     public static class TestDialogFragment extends AppCompatDialogFragment {
-        @NonNull
         @Override
-        public Dialog onCreateDialog(Bundle savedInstanceState) {
+        public @NonNull Dialog onCreateDialog(Bundle savedInstanceState) {
             return new AlertDialog.Builder(requireContext())
                     .setTitle("Test")
                     .setMessage("Message")
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatMenuItemIconTintingTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatMenuItemIconTintingTest.java
index 4b12878..f3e1ffc 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatMenuItemIconTintingTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/AppCompatMenuItemIconTintingTest.java
@@ -29,7 +29,6 @@
 import android.view.MenuItem;
 
 import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
 import androidx.appcompat.test.R;
 import androidx.appcompat.testutils.TestUtils;
 import androidx.core.content.res.ResourcesCompat;
@@ -40,6 +39,7 @@
 import androidx.test.filters.LargeTest;
 import androidx.test.rule.ActivityTestRule;
 
+import org.jspecify.annotations.NonNull;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/BaseBasicsTestCase.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/BaseBasicsTestCase.java
index 9cf5964..f5ab27a 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/BaseBasicsTestCase.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/BaseBasicsTestCase.java
@@ -40,7 +40,6 @@
 import android.view.View;
 import android.view.WindowManager;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 import androidx.appcompat.custom.FitWindowsContentLayout;
 import androidx.appcompat.test.R;
@@ -56,6 +55,7 @@
 import androidx.test.filters.SmallTest;
 import androidx.test.rule.ActivityTestRule;
 
+import org.jspecify.annotations.NonNull;
 import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
@@ -386,7 +386,7 @@
         verify(apCallback).onSupportActionModeFinished(any(ActionMode.class));
     }
 
-    private WindowInsetsCompat waitForWindowInsets(@NonNull final View view) throws Throwable {
+    private WindowInsetsCompat waitForWindowInsets(final @NonNull View view) throws Throwable {
         final CountDownLatch latch = new CountDownLatch(1);
         final AtomicReference<WindowInsetsCompat> received = new AtomicReference<>();
         // Set a listener to catch WindowInsets
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/CustomCollapsibleView.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/CustomCollapsibleView.java
index 76ee4ad..be13793 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/CustomCollapsibleView.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/CustomCollapsibleView.java
@@ -20,9 +20,10 @@
 import android.util.AttributeSet;
 import android.view.View;
 
-import androidx.annotation.Nullable;
 import androidx.appcompat.view.CollapsibleActionView;
 
+import org.jspecify.annotations.Nullable;
+
 public class CustomCollapsibleView extends View implements CollapsibleActionView {
     public CustomCollapsibleView(Context context) {
         this(context, null, 0);
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/FragmentContentIdActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/FragmentContentIdActivity.java
index 935ec3f..2d2cef9 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/FragmentContentIdActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/FragmentContentIdActivity.java
@@ -20,11 +20,11 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import androidx.annotation.Nullable;
 import androidx.appcompat.test.R;
 import androidx.appcompat.testutils.BaseTestActivity;
 import androidx.fragment.app.Fragment;
 
+import org.jspecify.annotations.Nullable;
 
 public class FragmentContentIdActivity extends BaseTestActivity {
 
@@ -60,9 +60,8 @@
     }
 
     public static class FragmentB extends Fragment {
-        @Nullable
         @Override
-        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+        public @Nullable View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                 @Nullable Bundle savedInstanceState) {
             View view = new View(getContext());
             view.setId(R.id.fragment_b);
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java
index 7678876..c7fcc95 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java
@@ -22,12 +22,13 @@
 import android.os.Build;
 import android.os.Bundle;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.test.R;
 import androidx.appcompat.testutils.BaseTestActivity;
 import androidx.core.os.LocaleListCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 
@@ -83,8 +84,7 @@
         mOnDestroySemaphore.release();
     }
 
-    @Nullable
-    Configuration getLastConfigurationChangeAndClear() {
+    @Nullable Configuration getLastConfigurationChangeAndClear() {
         final Configuration config = mLastConfigurationChange;
         mLastConfigurationChange = null;
         return config;
@@ -94,8 +94,7 @@
      * @return a copy of the {@link Configuration} from the most recent call to {@link #onCreate} or
      * {@link #onConfigurationChanged}, or {@code null} if neither has been called yet
      */
-    @Nullable
-    Configuration getEffectiveConfiguration() {
+    @Nullable Configuration getEffectiveConfiguration() {
         return mEffectiveConfiguration;
     }
 
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeActivity.java
index 376c362..ce04aa3 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeActivity.java
@@ -19,11 +19,12 @@
 import android.content.res.Configuration;
 import android.os.Bundle;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.test.R;
 import androidx.appcompat.testutils.BaseTestActivity;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 
@@ -81,8 +82,7 @@
         mOnDestroySemaphore.release();
     }
 
-    @Nullable
-    Configuration getLastConfigurationChangeAndClear() {
+    @Nullable Configuration getLastConfigurationChangeAndClear() {
         final Configuration config = mLastConfigurationChange;
         mLastConfigurationChange = null;
         return config;
@@ -92,8 +92,7 @@
      * @return a copy of the {@link Configuration} from the most recent call to {@link #onCreate} or
      *         {@link #onConfigurationChanged}, or {@code null} if neither has been called yet
      */
-    @Nullable
-    Configuration getEffectiveConfiguration() {
+    @Nullable Configuration getEffectiveConfiguration() {
         return mEffectiveConfiguration;
     }
 
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java
index 907c068..d00422c 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java
@@ -19,10 +19,11 @@
 import android.app.Dialog;
 import android.os.Bundle;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.fragment.app.DialogFragment;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Test class extending DialogFragment used for testing of configuration changes like nightMode and
  * locales.
@@ -37,9 +38,8 @@
         return new TestDialogFragment();
     }
 
-    @NonNull
     @Override
-    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+    public @NonNull Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
         AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
         builder.setTitle("TestDialogFragment");
         builder.setMessage("TestDialogFragment");
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivity.java
index 1aff03c..e2555bb 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivity.java
@@ -19,9 +19,10 @@
 import android.content.res.Configuration;
 import android.os.Bundle;
 
-import androidx.annotation.NonNull;
 import androidx.appcompat.app.AppCompatActivity;
 
+import org.jspecify.annotations.NonNull;
+
 import java.util.concurrent.CountDownLatch;
 
 public class FilternatorActivity extends AppCompatActivity {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivityWithCustomDefault.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivityWithCustomDefault.java
index f8763e9..ac2f7c5 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivityWithCustomDefault.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivityWithCustomDefault.java
@@ -19,10 +19,11 @@
 import android.content.res.Configuration;
 import android.os.Bundle;
 
-import androidx.annotation.NonNull;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.appcompat.app.AppCompatDelegate;
 
+import org.jspecify.annotations.NonNull;
+
 import java.util.concurrent.CountDownLatch;
 
 public class FilternatorActivityWithCustomDefault extends AppCompatActivity {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/OldTranslateActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/OldTranslateActivity.java
index 3e554f1..2e78dbe 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/OldTranslateActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/OldTranslateActivity.java
@@ -18,10 +18,11 @@
 
 import android.os.Bundle;
 
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.appcompat.test.R;
 
+import org.jspecify.annotations.Nullable;
+
 public class OldTranslateActivity extends AppCompatActivity {
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/CustomViewInflater.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/CustomViewInflater.java
index b1804b9..58968fa 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/CustomViewInflater.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/CustomViewInflater.java
@@ -19,14 +19,15 @@
 import android.content.Context;
 import android.util.AttributeSet;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatViewInflater;
 import androidx.appcompat.widget.AppCompatButton;
 import androidx.appcompat.widget.AppCompatImageButton;
 import androidx.appcompat.widget.AppCompatTextView;
 import androidx.appcompat.widget.AppCompatToggleButton;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Custom view inflater that takes over the inflation of a few widget types.
  */
@@ -89,27 +90,24 @@
         }
     }
 
-    @NonNull
     @Override
-    protected AppCompatButton createButton(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatButton createButton(Context context, AttributeSet attrs) {
         return new CustomButton(context, attrs);
     }
 
-    @NonNull
     @Override
-    protected AppCompatTextView createTextView(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatTextView createTextView(Context context, AttributeSet attrs) {
         return new CustomTextView(context, attrs);
     }
 
-    @NonNull
     @Override
-    protected AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {
         return new CustomImageButton(context, attrs);
     }
 
-    @NonNull
     @Override
-    protected AppCompatToggleButton createToggleButton(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatToggleButton createToggleButton(
+            Context context, AttributeSet attrs) {
         return new CustomToggleButton(context, attrs);
     }
 }
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/MisbehavingViewInflater.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/MisbehavingViewInflater.java
index fbe91cc2..a1aec1c 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/MisbehavingViewInflater.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/inflater/MisbehavingViewInflater.java
@@ -19,19 +19,19 @@
 import android.content.Context;
 import android.util.AttributeSet;
 
-import androidx.annotation.NonNull;
 import androidx.appcompat.app.AppCompatViewInflater;
 import androidx.appcompat.widget.AppCompatButton;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Custom view inflater that declares that it takes over the view inflation but
  * does not honor the contract to return non-null instance in its
  * {@link #createButton(Context, AttributeSet)} method.
  */
 public class MisbehavingViewInflater extends AppCompatViewInflater {
-    @NonNull
     @Override
-    protected AppCompatButton createButton(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatButton createButton(Context context, AttributeSet attrs) {
         return null;
     }
 }
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java
index bb1de01..9c29c97 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java
@@ -25,14 +25,15 @@
 import android.view.MenuItem;
 import android.view.WindowManager;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatCallback;
 import androidx.appcompat.test.R;
 import androidx.appcompat.view.ActionMode;
 import androidx.testutils.LocaleTestUtils;
 import androidx.testutils.RecreatedAppCompatActivity;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.Locale;
 
 public abstract class BaseTestActivity extends RecreatedAppCompatActivity {
@@ -244,9 +245,9 @@
         }
     }
 
-    @Nullable
     @Override
-    public ActionMode onWindowStartingSupportActionMode(@NonNull ActionMode.Callback callback) {
+    public @Nullable ActionMode onWindowStartingSupportActionMode(
+            ActionMode.@NonNull Callback callback) {
         if (mAppCompatCallback != null) {
             return mAppCompatCallback.onWindowStartingSupportActionMode(callback);
         }
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/DrawerLayoutActions.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/DrawerLayoutActions.java
index 495491c..ed5107a 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/DrawerLayoutActions.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/DrawerLayoutActions.java
@@ -20,7 +20,6 @@
 
 import android.view.View;
 
-import androidx.annotation.Nullable;
 import androidx.drawerlayout.widget.DrawerLayout;
 import androidx.test.espresso.Espresso;
 import androidx.test.espresso.IdlingResource;
@@ -28,6 +27,7 @@
 import androidx.test.espresso.ViewAction;
 
 import org.hamcrest.Matcher;
+import org.jspecify.annotations.Nullable;
 
 public class DrawerLayoutActions {
     /**
@@ -38,7 +38,7 @@
             implements DrawerLayout.DrawerListener, IdlingResource {
         private int mCurrState = DrawerLayout.STATE_IDLE;
 
-        @Nullable private IdlingResource.ResourceCallback mCallback;
+        private IdlingResource.@Nullable ResourceCallback mCallback;
 
         private boolean mNeedsIdle = false;
 
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/TestUtils.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/TestUtils.java
index e13aa1a..cfcf7da 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/TestUtils.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/TestUtils.java
@@ -36,14 +36,15 @@
 import android.view.ViewTreeObserver.OnDrawListener;
 
 import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.appcompat.widget.TintTypedArray;
 import androidx.core.util.Pair;
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.rule.ActivityTestRule;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
@@ -371,8 +372,8 @@
      * @param runner the runnable to run on the main thread, or {@code null} to
      *               simply force invalidation and a draw pass
      */
-    public static void runOnMainAndDrawSync(@NonNull final ActivityTestRule activityTestRule,
-            @NonNull final View view, @Nullable final Runnable runner) {
+    public static void runOnMainAndDrawSync(final @NonNull ActivityTestRule activityTestRule,
+            final @NonNull View view, final @Nullable Runnable runner) {
         final CountDownLatch latch = new CountDownLatch(1);
 
         try {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiTest.java
index 2eefa1f..a11f943 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiTest.java
@@ -22,12 +22,12 @@
 import android.text.method.DigitsKeyListener;
 import android.text.method.KeyListener;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseImageViewTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseImageViewTest.java
index 44ce501..e3e6b80 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseImageViewTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseImageViewTest.java
@@ -30,7 +30,6 @@
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.IdRes;
-import androidx.annotation.NonNull;
 import androidx.appcompat.test.R;
 import androidx.appcompat.testutils.AppCompatTintableViewActions;
 import androidx.appcompat.testutils.BaseTestActivity;
@@ -40,6 +39,7 @@
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.filters.MediumTest;
 
+import org.jspecify.annotations.NonNull;
 import org.junit.Test;
 
 /**
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseViewTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseViewTest.java
index d87f8fb..0798649 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseViewTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseViewTest.java
@@ -25,8 +25,8 @@
 import static androidx.test.espresso.Espresso.onView;
 import static androidx.test.espresso.assertion.ViewAssertions.matches;
 import static androidx.test.espresso.matcher.ViewMatchers.withId;
-import static androidx.testutils.lifecycle.LifecycleOwnerUtils.waitUntilState;
 import static androidx.testutils.PollingCheck.waitFor;
+import static androidx.testutils.lifecycle.LifecycleOwnerUtils.waitUntilState;
 
 import static org.junit.Assert.assertNull;
 
@@ -39,7 +39,6 @@
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.IdRes;
-import androidx.annotation.NonNull;
 import androidx.appcompat.test.R;
 import androidx.appcompat.testutils.AppCompatTintableViewActions;
 import androidx.appcompat.testutils.BaseTestActivity;
@@ -51,6 +50,7 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
 
+import org.jspecify.annotations.NonNull;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextEmojiTest.java
index 534c451..11a91cd 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextEmojiTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextEmojiTest.java
@@ -24,13 +24,13 @@
 import android.text.method.NumberKeyListener;
 import android.view.KeyEvent;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.test.R;
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextReceiveContentTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextReceiveContentTest.java
index 005ca1a..ccfb32f 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextReceiveContentTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextReceiveContentTest.java
@@ -47,8 +47,6 @@
 import android.view.inputmethod.InputConnection;
 import android.view.inputmethod.InputContentInfo;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.appcompat.test.R;
 import androidx.core.util.ObjectsCompat;
@@ -64,6 +62,8 @@
 import androidx.test.filters.SdkSuppress;
 import androidx.test.rule.ActivityTestRule;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
@@ -598,14 +598,11 @@
     private static class PayloadArgumentMatcher implements ArgumentMatcher<ContentInfoCompat> {
         public static final String EXTRA_KEY = "testExtra";
 
-        @NonNull
-        private final ClipData mClip;
+        private final @NonNull ClipData mClip;
         private final int mSource;
         private final int mFlags;
-        @Nullable
-        private final Uri mLinkUri;
-        @Nullable
-        private final String mExtraValue;
+        private final @Nullable Uri mLinkUri;
+        private final @Nullable String mExtraValue;
 
         private PayloadArgumentMatcher(@NonNull ClipData clip, int source, int flags,
                 @Nullable Uri linkUri, @Nullable String extraValue) {
@@ -616,9 +613,8 @@
             mExtraValue = extraValue;
         }
 
-        @NonNull
         @Override
-        public String toString() {
+        public @NonNull String toString() {
             return "[" + "clip=" + mClip + ", source=" + mSource + ", flags=" + mFlags
                     + ", linkUri=" + mLinkUri + ", extraValue=" + mExtraValue + "]";
         }
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextViewEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextViewEmojiTest.java
index 49640e8..137aa96 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextViewEmojiTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextViewEmojiTest.java
@@ -22,12 +22,12 @@
 import android.text.method.DigitsKeyListener;
 import android.text.method.KeyListener;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeTest.java
index 2a3c537..f8c4b67 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeTest.java
@@ -26,13 +26,13 @@
 import android.util.AttributeSet;
 import android.widget.LinearLayout;
 
-import androidx.annotation.Nullable;
 import androidx.appcompat.test.R;
 import androidx.core.widget.TextViewCompat;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
 import androidx.test.filters.SmallTest;
 
+import org.jspecify.annotations.Nullable;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/ToolbarTestActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/ToolbarTestActivity.java
index b4123e9..5ff5184 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/ToolbarTestActivity.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/ToolbarTestActivity.java
@@ -18,10 +18,11 @@
 
 import android.os.Bundle;
 
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.appcompat.test.R;
 
+import org.jspecify.annotations.Nullable;
+
 public class ToolbarTestActivity extends AppCompatActivity {
 
     @Override
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBar.java
index fb0241a..4333c77 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBar.java
@@ -32,8 +32,6 @@
 
 import androidx.annotation.DrawableRes;
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StringRes;
 import androidx.appcompat.R;
@@ -42,6 +40,9 @@
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentTransaction;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
@@ -549,8 +550,7 @@
      *
      * @return The current ActionBar title or null.
      */
-    @Nullable
-    public abstract CharSequence getTitle();
+    public abstract @Nullable CharSequence getTitle();
 
     /**
      * Returns the current ActionBar subtitle in standard mode.
@@ -559,8 +559,7 @@
      *
      * @return The current ActionBar subtitle or null.
      */
-    @Nullable
-    public abstract CharSequence getSubtitle();
+    public abstract @Nullable CharSequence getSubtitle();
 
     /**
      * Returns the current navigation mode. The result will be one of:
@@ -745,8 +744,7 @@
      * navigation patterns</a> instead.
      */
     @Deprecated
-    @Nullable
-    public abstract Tab getSelectedTab();
+    public abstract @Nullable Tab getSelectedTab();
 
     /**
      * Returns the tab at the specified index.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java
index c3925bf..71d5d6a 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java
@@ -25,14 +25,15 @@
 import android.view.MenuItem;
 import android.view.View;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.StringRes;
 import androidx.appcompat.graphics.drawable.DrawerArrowDrawable;
 import androidx.appcompat.widget.Toolbar;
 import androidx.core.view.GravityCompat;
 import androidx.drawerlayout.widget.DrawerLayout;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * This class provides a handy way to tie together the functionality of
  * {@link DrawerLayout} and the framework <code>ActionBar</code> to
@@ -74,8 +75,7 @@
          * @return Delegate to use for ActionBarDrawableToggles, or null if the Activity
          * does not wish to override the default behavior.
          */
-        @Nullable
-        Delegate getDrawerToggleDelegate();
+        @Nullable Delegate getDrawerToggleDelegate();
     }
 
     public interface Delegate {
@@ -365,8 +365,7 @@
     /**
      * @return DrawerArrowDrawable that is currently shown by the ActionBarDrawerToggle.
      */
-    @NonNull
-    public DrawerArrowDrawable getDrawerArrowDrawable() {
+    public @NonNull DrawerArrowDrawable getDrawerArrowDrawable() {
         return mSlider;
     }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertController.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertController.java
index e1ca2bc..7dabfdd 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertController.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertController.java
@@ -54,12 +54,13 @@
 import android.widget.SimpleCursorAdapter;
 import android.widget.TextView;
 
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 import androidx.appcompat.widget.LinearLayoutCompat;
 import androidx.core.view.ViewCompat;
 import androidx.core.widget.NestedScrollView;
 
+import org.jspecify.annotations.Nullable;
+
 import java.lang.ref.WeakReference;
 
 class AlertController {
@@ -437,8 +438,8 @@
      * @param defaultPanel the default panel
      * @return the panel to use
      */
-    @Nullable
-    private ViewGroup resolvePanel(@Nullable View customPanel, @Nullable View defaultPanel) {
+    private @Nullable ViewGroup resolvePanel(
+            @Nullable View customPanel, @Nullable View defaultPanel) {
         if (customPanel == null) {
             // Inflate the default panel, if needed.
             if (defaultPanel instanceof ViewStub) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertDialog.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertDialog.java
index 1e4fc9d..ce6244b 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertDialog.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AlertDialog.java
@@ -37,13 +37,14 @@
 import androidx.annotation.ArrayRes;
 import androidx.annotation.AttrRes;
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StringRes;
 import androidx.annotation.StyleRes;
 import androidx.appcompat.R;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A subclass of Dialog that can display one, two or three buttons. If you only want to
  * display a String in this dialog box, use the setMessage() method.  If you
@@ -352,8 +353,7 @@
          *
          * @return A Context for built Dialogs.
          */
-        @NonNull
-        public Context getContext() {
+        public @NonNull Context getContext() {
             return P.mContext;
         }
 
@@ -975,8 +975,7 @@
          * processing is needed, {@link #show()} may be called instead to both
          * create and display the dialog.
          */
-        @NonNull
-        public AlertDialog create() {
+        public @NonNull AlertDialog create() {
             // We can't use Dialog's 3-arg constructor with the createThemeContextWrapper param,
             // so we always have to re-set the theme
             final AlertDialog dialog = new AlertDialog(P.mContext, mTheme);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
index cfe80b38..bd983f3 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
@@ -36,8 +36,6 @@
 import androidx.annotation.ContentView;
 import androidx.annotation.IdRes;
 import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.StyleRes;
 import androidx.appcompat.app.AppCompatDelegate.NightMode;
 import androidx.appcompat.view.ActionMode;
@@ -53,6 +51,9 @@
 import androidx.savedstate.SavedStateRegistry;
 import androidx.savedstate.ViewTreeSavedStateRegistryOwner;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Base class for activities that wish to use some of the newer platform features on older
  * Android devices. Some of these backported features include:
@@ -117,9 +118,8 @@
         // TODO: Directly connect AppCompatDelegate to SavedStateRegistry
         getSavedStateRegistry().registerSavedStateProvider(DELEGATE_TAG,
                 new SavedStateRegistry.SavedStateProvider() {
-                    @NonNull
                     @Override
-                    public Bundle saveState() {
+                    public @NonNull Bundle saveState() {
                         Bundle outState = new Bundle();
                         getDelegate().onSaveInstanceState(outState);
                         return outState;
@@ -160,8 +160,7 @@
      *
      * @return The Activity's ActionBar, or null if it does not have one.
      */
-    @Nullable
-    public ActionBar getSupportActionBar() {
+    public @Nullable ActionBar getSupportActionBar() {
         return getDelegate().getSupportActionBar();
     }
 
@@ -185,9 +184,8 @@
         getDelegate().setSupportActionBar(toolbar);
     }
 
-    @NonNull
     @Override
-    public MenuInflater getMenuInflater() {
+    public @NonNull MenuInflater getMenuInflater() {
         return getDelegate().getMenuInflater();
     }
 
@@ -265,7 +263,7 @@
     }
 
     @Override
-    public final boolean onMenuItemSelected(int featureId, @NonNull android.view.MenuItem item) {
+    public final boolean onMenuItemSelected(int featureId, android.view.@NonNull MenuItem item) {
         if (super.onMenuItemSelected(featureId, item)) {
             return true;
         }
@@ -350,9 +348,9 @@
      * @param callback Callback to control the lifecycle of this action mode
      * @return The ActionMode that was started, or null if the system should present it
      */
-    @Nullable
     @Override
-    public ActionMode onWindowStartingSupportActionMode(@NonNull ActionMode.Callback callback) {
+    public @Nullable ActionMode onWindowStartingSupportActionMode(
+            ActionMode.@NonNull Callback callback) {
         return null;
     }
 
@@ -362,8 +360,7 @@
      * @param callback Callback that will manage lifecycle events for this context mode
      * @return The ContextMode that was started, or null if it was canceled
      */
-    @Nullable
-    public ActionMode startSupportActionMode(@NonNull ActionMode.Callback callback) {
+    public @Nullable ActionMode startSupportActionMode(ActionMode.@NonNull Callback callback) {
         return getDelegate().startSupportActionMode(callback);
     }
 
@@ -499,9 +496,8 @@
      *
      * @return a new Intent targeting the defined parent activity of sourceActivity
      */
-    @Nullable
     @Override
-    public Intent getSupportParentActivityIntent() {
+    public @Nullable Intent getSupportParentActivityIntent() {
         return NavUtils.getParentActivityIntent(this);
     }
 
@@ -552,9 +548,8 @@
     public void onSupportContentChanged() {
     }
 
-    @Nullable
     @Override
-    public ActionBarDrawerToggle.Delegate getDrawerToggleDelegate() {
+    public ActionBarDrawerToggle.@Nullable Delegate getDrawerToggleDelegate() {
         return getDelegate().getDrawerToggleDelegate();
     }
 
@@ -583,8 +578,7 @@
     /**
      * @return The {@link AppCompatDelegate} being used by this Activity.
      */
-    @NonNull
-    public AppCompatDelegate getDelegate() {
+    public @NonNull AppCompatDelegate getDelegate() {
         if (mDelegate == null) {
             mDelegate = AppCompatDelegate.create(this, this);
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatCallback.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatCallback.java
index 0447939..cae571e 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatCallback.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatCallback.java
@@ -16,9 +16,10 @@
 
 package androidx.appcompat.app;
 
-import androidx.annotation.Nullable;
 import androidx.appcompat.view.ActionMode;
 
+import org.jspecify.annotations.Nullable;
+
 /**
  * Implemented this in order for AppCompat to be able to callback in certain situations.
  * <p>
@@ -50,6 +51,5 @@
      * @param callback Callback to control the lifecycle of this action mode
      * @return The ActionMode that was started, or null if the system should present it
      */
-    @Nullable
-    ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback);
+    @Nullable ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback);
 }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
index a1d6165b..e6a1cd5 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
@@ -47,8 +47,6 @@
 import androidx.annotation.IdRes;
 import androidx.annotation.IntDef;
 import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StyleRes;
@@ -62,6 +60,9 @@
 import androidx.core.view.WindowCompat;
 import androidx.fragment.app.FragmentActivity;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.ref.WeakReference;
@@ -305,8 +306,7 @@
      *
      * @param callback An optional callback for AppCompat specific events
      */
-    @NonNull
-    public static AppCompatDelegate create(@NonNull Activity activity,
+    public static @NonNull AppCompatDelegate create(@NonNull Activity activity,
             @Nullable AppCompatCallback callback) {
         return new AppCompatDelegateImpl(activity, callback);
     }
@@ -316,8 +316,7 @@
      *
      * @param callback An optional callback for AppCompat specific events
      */
-    @NonNull
-    public static AppCompatDelegate create(@NonNull Dialog dialog,
+    public static @NonNull AppCompatDelegate create(@NonNull Dialog dialog,
             @Nullable AppCompatCallback callback) {
         return new AppCompatDelegateImpl(dialog, callback);
     }
@@ -328,9 +327,8 @@
      *
      * @param callback An optional callback for AppCompat specific events
      */
-    @NonNull
-    public static AppCompatDelegate create(@NonNull Context context, @NonNull Window window,
-            @Nullable AppCompatCallback callback) {
+    public static @NonNull AppCompatDelegate create(@NonNull Context context,
+            @NonNull Window window, @Nullable AppCompatCallback callback) {
         return new AppCompatDelegateImpl(context, window, callback);
     }
 
@@ -340,9 +338,8 @@
      *
      * @param callback An optional callback for AppCompat specific events
      */
-    @NonNull
-    public static AppCompatDelegate create(@NonNull Context context, @NonNull Activity activity,
-            @Nullable AppCompatCallback callback) {
+    public static @NonNull AppCompatDelegate create(@NonNull Context context,
+            @NonNull Activity activity, @Nullable AppCompatCallback callback) {
         return new AppCompatDelegateImpl(context, activity, callback);
     }
 
@@ -356,8 +353,7 @@
      *
      * @return AppCompat's action bar, or null if it does not have one.
      */
-    @Nullable
-    public abstract ActionBar getSupportActionBar();
+    public abstract @Nullable ActionBar getSupportActionBar();
 
     /**
      * Set a {@link Toolbar} to act as the {@link ActionBar} for this delegate.
@@ -435,8 +431,7 @@
      * @return The view if found or null otherwise.
      */
     @SuppressWarnings("TypeParameterUnusedInFormals")
-    @Nullable
-    public abstract <T extends View> T findViewById(@IdRes int id);
+    public abstract <T extends View> @Nullable T findViewById(@IdRes int id);
 
     /**
      * Should be called instead of {@link Activity#setContentView(android.view.View)}}
@@ -470,9 +465,8 @@
     /**
      * Should be called from {@link Activity#attachBaseContext(Context)}.
      */
-    @NonNull
     @CallSuper
-    public Context attachBaseContext2(@NonNull Context context) {
+    public @NonNull Context attachBaseContext2(@NonNull Context context) {
         attachBaseContext(context);
         return context;
     }
@@ -497,8 +491,7 @@
      * Returns an {@link ActionBarDrawerToggle.Delegate} which can be returned from your Activity
      * if it implements {@link ActionBarDrawerToggle.DelegateProvider}.
      */
-    @Nullable
-    public abstract ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+    public abstract ActionBarDrawerToggle.@Nullable Delegate getDrawerToggleDelegate();
 
     /**
      * Enable extended window features.  This should be called instead of
@@ -527,8 +520,8 @@
      * @param callback Callback that will manage lifecycle events for this context mode
      * @return The ContextMode that was started, or null if it was canceled
      */
-    @Nullable
-    public abstract ActionMode startSupportActionMode(@NonNull ActionMode.Callback callback);
+    public abstract @Nullable ActionMode startSupportActionMode(
+            ActionMode.@NonNull Callback callback);
 
     /**
      * Installs AppCompat's {@link android.view.LayoutInflater} Factory so that it can replace
@@ -637,8 +630,7 @@
     /**
      * Returns the context for the current delegate.
      */
-    @Nullable
-    public Context getContextForDelegate() {
+    public @Nullable Context getContextForDelegate() {
         return null;
     }
 
@@ -815,8 +807,7 @@
      * Activity.onCreate().</b></p>
      */
     @AnyThread
-    @NonNull
-    public static LocaleListCompat getApplicationLocales() {
+    public static @NonNull LocaleListCompat getApplicationLocales() {
         if (Build.VERSION.SDK_INT >= 33) {
             // If the API version is 33 or above we want to redirect the call to the framework API.
             Object localeManager = getLocaleManagerForApplication();
@@ -849,8 +840,7 @@
      *
      * @see #setApplicationLocales(LocaleListCompat)
      */
-    @Nullable
-    static LocaleListCompat getRequestedAppLocales() {
+    static @Nullable LocaleListCompat getRequestedAppLocales() {
         return sRequestedAppLocales;
     }
 
@@ -859,8 +849,7 @@
      *
      * @see #setApplicationLocales(LocaleListCompat)
      */
-    @Nullable
-    static LocaleListCompat getStoredAppLocales() {
+    static @Nullable LocaleListCompat getStoredAppLocales() {
         return sStoredAppLocales;
     }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
index 6f787f3..9347e01 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
@@ -79,8 +79,6 @@
 
 import androidx.annotation.CallSuper;
 import androidx.annotation.IdRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StyleRes;
@@ -126,6 +124,8 @@
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleOwner;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.xmlpull.v1.XmlPullParser;
 
 import java.util.List;
@@ -376,10 +376,9 @@
         }
     }
 
-    @NonNull
     @Override
     @CallSuper
-    public Context attachBaseContext2(@NonNull final Context baseContext) {
+    public @NonNull Context attachBaseContext2(final @NonNull Context baseContext) {
         mBaseContextAttached = true;
 
         // This is a tricky method. Here are some things to avoid:
@@ -660,9 +659,8 @@
     }
 
     @SuppressWarnings({"TypeParameterUnusedInFormals", "unchecked"})
-    @Nullable
     @Override
-    public <T extends View> T findViewById(@IdRes int id) {
+    public <T extends View> @Nullable T findViewById(@IdRes int id) {
         ensureSubDecor();
         return (T) mWindow.findViewById(id);
     }
@@ -1243,7 +1241,7 @@
     }
 
     @Override
-    public ActionMode startSupportActionMode(@NonNull final ActionMode.Callback callback) {
+    public ActionMode startSupportActionMode(final ActionMode.@NonNull Callback callback) {
         if (callback == null) {
             throw new IllegalArgumentException("ActionMode callback can not be null.");
         }
@@ -1280,7 +1278,7 @@
         invalidatePanelMenu(FEATURE_OPTIONS_PANEL);
     }
 
-    ActionMode startSupportActionModeFromWindow(@NonNull ActionMode.Callback callback) {
+    ActionMode startSupportActionModeFromWindow(ActionMode.@NonNull Callback callback) {
         endOnGoingFadeAnimation();
         if (mActionMode != null) {
             mActionMode.finish();
@@ -1713,8 +1711,7 @@
         return onCreateView(null, name, context, attrs);
     }
 
-    @Nullable
-    private AppCompatActivity tryUnwrapContext() {
+    private @Nullable AppCompatActivity tryUnwrapContext() {
         Context context = mContext;
         while (context != null) {
             if (context instanceof AppCompatActivity) {
@@ -2297,8 +2294,8 @@
      * @param rectInsets the current system window insets if {@code insets} is not available
      * @return the new top system window inset
      */
-    final int updateStatusGuard(@Nullable final WindowInsetsCompat insets,
-            @Nullable final Rect rectInsets) {
+    final int updateStatusGuard(final @Nullable WindowInsetsCompat insets,
+            final @Nullable Rect rectInsets) {
         int systemWindowInsetTop = 0;
         if (insets != null) {
             systemWindowInsetTop = insets.getSystemWindowInsetTop();
@@ -2557,8 +2554,7 @@
      * checks for requested app-specific locales and returns them after an overlay
      * with the system locales. If requested app-specific do not exist, it returns a null.
      */
-    @Nullable
-    LocaleListCompat calculateApplicationLocales(@NonNull Context context) {
+    @Nullable LocaleListCompat calculateApplicationLocales(@NonNull Context context) {
         if (Build.VERSION.SDK_INT >= 33) {
             return null;
         }
@@ -2686,8 +2682,7 @@
         }
     }
 
-    @NonNull
-    private Configuration createOverrideAppConfiguration(@NonNull Context context,
+    private @NonNull Configuration createOverrideAppConfiguration(@NonNull Context context,
             @ApplyableNightMode int mode, @Nullable LocaleListCompat locales,
             @Nullable Configuration configOverlay, boolean ignoreFollowSystem) {
         int newNightMode;
@@ -2858,7 +2853,7 @@
     }
 
     private void updateResourcesConfiguration(int uiModeNightModeValue,
-            @Nullable final LocaleListCompat locales, final boolean callOnConfigChange,
+            final @Nullable LocaleListCompat locales, final boolean callOnConfigChange,
             @Nullable Configuration configOverlay) {
         // If the Activity is not set to handle config changes we will
         // update the Resources with a new Configuration with  updated nightMode and locales.
@@ -2918,10 +2913,9 @@
 
     /**
      */
-    @NonNull
     @RestrictTo(LIBRARY)
     @VisibleForTesting
-    final AutoNightModeManager getAutoTimeNightModeManager() {
+    final @NonNull AutoNightModeManager getAutoTimeNightModeManager() {
         return getAutoTimeNightModeManager(mContext);
     }
 
@@ -3368,8 +3362,7 @@
     interface ActionBarMenuCallback {
         boolean onPreparePanel(int featureId);
 
-        @Nullable
-        View onCreatePanelView(int featureId);
+        @Nullable View onCreatePanelView(int featureId);
     }
 
     class AppCompatWindowCallback extends WindowCallbackWrapper {
@@ -3636,8 +3629,7 @@
             mContext.registerReceiver(mReceiver, filter);
         }
 
-        @Nullable
-        abstract IntentFilter createIntentFilterForBroadcastReceiver();
+        abstract @Nullable IntentFilter createIntentFilterForBroadcastReceiver();
 
         void cleanup() {
             if (mReceiver != null) {
@@ -3778,8 +3770,7 @@
      * <p>
      * This is fine for device configurations as no member is ever undefined.
      */
-    @NonNull
-    private static Configuration generateConfigDelta(@NonNull Configuration base,
+    private static @NonNull Configuration generateConfigDelta(@NonNull Configuration base,
             @Nullable Configuration change) {
         final Configuration delta = new Configuration();
         delta.fontScale = 0;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
index 6b4759e..45a10d7 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
@@ -29,8 +29,6 @@
 import androidx.activity.ViewTreeOnBackPressedDispatcherOwner;
 import androidx.annotation.IdRes;
 import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.view.ActionMode;
@@ -38,6 +36,9 @@
 import androidx.lifecycle.ViewTreeLifecycleOwner;
 import androidx.savedstate.ViewTreeSavedStateRegistryOwner;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Base class for AppCompat themed {@link android.app.Dialog}s.
  */
@@ -120,9 +121,8 @@
     }
 
     @SuppressWarnings("TypeParameterUnusedInFormals")
-    @Nullable
     @Override
-    public <T extends View> T findViewById(@IdRes int id) {
+    public <T extends View> @Nullable T findViewById(@IdRes int id) {
         return getDelegate().findViewById(id);
     }
 
@@ -186,8 +186,7 @@
     /**
      * @return The {@link AppCompatDelegate} being used by this Dialog.
      */
-    @NonNull
-    public AppCompatDelegate getDelegate() {
+    public @NonNull AppCompatDelegate getDelegate() {
         if (mDelegate == null) {
             mDelegate = AppCompatDelegate.create(this, this);
         }
@@ -212,9 +211,8 @@
     public void onSupportActionModeFinished(ActionMode mode) {
     }
 
-    @Nullable
     @Override
-    public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) {
+    public @Nullable ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) {
         return null;
     }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialogFragment.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialogFragment.java
index ffa9967..345b83d 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialogFragment.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialogFragment.java
@@ -25,11 +25,12 @@
 import android.view.WindowManager;
 
 import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.fragment.app.DialogFragment;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A special version of {@link DialogFragment} which uses an {@link AppCompatDialog} in place of a
  * platform-styled dialog.
@@ -48,9 +49,8 @@
         super(contentLayoutId);
     }
 
-    @NonNull
     @Override
-    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+    public @NonNull Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
         return new AppCompatDialog(getContext(), getTheme());
     }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatViewInflater.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatViewInflater.java
index f6de633..6f4dc4c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatViewInflater.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatViewInflater.java
@@ -25,8 +25,6 @@
 import android.view.InflateException;
 import android.view.View;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 import androidx.appcompat.view.ContextThemeWrapper;
 import androidx.appcompat.widget.AppCompatAutoCompleteTextView;
@@ -47,6 +45,9 @@
 import androidx.collection.SimpleArrayMap;
 import androidx.core.view.ViewCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -120,8 +121,7 @@
      *                    additional resource system feature backports
      * @return an AppCompat-compatible widget
      */
-    @Nullable
-    public final View createView(@Nullable View parent, @NonNull final String name,
+    public final @Nullable View createView(@Nullable View parent, final @NonNull String name,
             @NonNull Context context,
             @NonNull AttributeSet attrs, boolean inheritContext,
             boolean readAndroidTheme, boolean readAppTheme, boolean wrapContext) {
@@ -223,75 +223,63 @@
         return view;
     }
 
-    @NonNull
-    protected AppCompatTextView createTextView(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatTextView createTextView(Context context, AttributeSet attrs) {
         return new AppCompatTextView(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatImageView createImageView(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatImageView createImageView(Context context, AttributeSet attrs) {
         return new AppCompatImageView(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatButton createButton(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatButton createButton(Context context, AttributeSet attrs) {
         return new AppCompatButton(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatEditText createEditText(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatEditText createEditText(Context context, AttributeSet attrs) {
         return new AppCompatEditText(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatSpinner createSpinner(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatSpinner createSpinner(Context context, AttributeSet attrs) {
         return new AppCompatSpinner(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {
         return new AppCompatImageButton(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatCheckBox createCheckBox(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatCheckBox createCheckBox(Context context, AttributeSet attrs) {
         return new AppCompatCheckBox(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatRadioButton createRadioButton(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatRadioButton createRadioButton(Context context, AttributeSet attrs) {
         return new AppCompatRadioButton(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatCheckedTextView createCheckedTextView(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatCheckedTextView createCheckedTextView(Context context,
+            AttributeSet attrs) {
         return new AppCompatCheckedTextView(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatAutoCompleteTextView createAutoCompleteTextView(Context context,
+    protected @NonNull AppCompatAutoCompleteTextView createAutoCompleteTextView(Context context,
             AttributeSet attrs) {
         return new AppCompatAutoCompleteTextView(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(Context context,
-            AttributeSet attrs) {
+    protected @NonNull AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(
+            Context context, AttributeSet attrs) {
         return new AppCompatMultiAutoCompleteTextView(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatRatingBar createRatingBar(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatRatingBar createRatingBar(Context context, AttributeSet attrs) {
         return new AppCompatRatingBar(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatSeekBar createSeekBar(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatSeekBar createSeekBar(Context context, AttributeSet attrs) {
         return new AppCompatSeekBar(context, attrs);
     }
 
-    @NonNull
-    protected AppCompatToggleButton createToggleButton(Context context, AttributeSet attrs) {
+    protected @NonNull AppCompatToggleButton createToggleButton(Context context,
+            AttributeSet attrs) {
         return new AppCompatToggleButton(context, attrs);
     }
 
@@ -302,8 +290,7 @@
         }
     }
 
-    @Nullable
-    protected View createView(Context context, String name, AttributeSet attrs) {
+    protected @Nullable View createView(Context context, String name, AttributeSet attrs) {
         return null;
     }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java
index de453cf..12a0bd4 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java
@@ -25,10 +25,11 @@
 import android.os.Build;
 import android.os.IBinder;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 import androidx.core.os.LocaleListCompat;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * A placeholder service to avoid adding application-level metadata. The service
  * is only used to expose metadata defined in the library's manifest. It is
@@ -41,9 +42,9 @@
 public final class AppLocalesMetadataHolderService extends Service {
     public AppLocalesMetadataHolderService() {}
 
-    @NonNull
     @Override
-    public IBinder onBind(@SuppressWarnings("InvalidNullabilityOverride") @NonNull Intent intent) {
+    public @NonNull IBinder onBind(
+            @SuppressWarnings("InvalidNullabilityOverride") @NonNull Intent intent) {
         throw new UnsupportedOperationException();
     }
 
@@ -53,9 +54,8 @@
      * <p>This serviceInfo contains the attribute "autoStoreLocales", its value being a boolean
      * that informs us if the developer wants us to handle the storage of locales or not.</p>
      */
-    @NonNull
     @SuppressWarnings("deprecation") // GET_DISABLED_COMPONENTS, getServiceInfo
-    public static ServiceInfo getServiceInfo(@NonNull Context context) throws
+    public static @NonNull ServiceInfo getServiceInfo(@NonNull Context context) throws
             PackageManager.NameNotFoundException {
         int flags = PackageManager.GET_META_DATA;
         // The service is marked as disabled so we need to include the following flags.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/LayoutIncludeDetector.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/LayoutIncludeDetector.java
index 71963ec..be26f91 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/LayoutIncludeDetector.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/LayoutIncludeDetector.java
@@ -18,9 +18,8 @@
 
 import android.util.AttributeSet;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -35,8 +34,7 @@
  */
 class LayoutIncludeDetector {
 
-    @NonNull
-    private final Deque<WeakReference<XmlPullParser>> mXmlParserStack = new ArrayDeque<>();
+    private final @NonNull Deque<WeakReference<XmlPullParser>> mXmlParserStack = new ArrayDeque<>();
 
     /**
      * Returns true if this is the start of an included layout file, otherwise false.
@@ -89,9 +87,8 @@
      * @param xmlParserStack stack to purge
      * @return most recent {@link XmlPullParser} that is not outdated
      */
-    @Nullable
-    private static XmlPullParser popOutdatedAttrHolders(@NonNull
-            Deque<WeakReference<XmlPullParser>> xmlParserStack) {
+    private static @Nullable XmlPullParser popOutdatedAttrHolders(
+            @NonNull Deque<WeakReference<XmlPullParser>> xmlParserStack) {
         while (!xmlParserStack.isEmpty()) {
             XmlPullParser parser = xmlParserStack.peek().get();
             if (isParserOutdated(parser)) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ResourcesFlusher.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ResourcesFlusher.java
index d7fb7ad..f0b53bf 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ResourcesFlusher.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ResourcesFlusher.java
@@ -21,9 +21,10 @@
 import android.util.Log;
 import android.util.LongSparseArray;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.reflect.Field;
 import java.util.Map;
 
@@ -42,7 +43,7 @@
     private static Field sResourcesImplField;
     private static boolean sResourcesImplFieldFetched;
 
-    static void flush(@NonNull final Resources resources) {
+    static void flush(final @NonNull Resources resources) {
         if (Build.VERSION.SDK_INT >= 28) {
             // no-op on P and above
             return;
@@ -56,7 +57,7 @@
     }
 
     @RequiresApi(21)
-    private static void flushLollipops(@NonNull final Resources resources) {
+    private static void flushLollipops(final @NonNull Resources resources) {
         if (!sDrawableCacheFieldFetched) {
             try {
                 sDrawableCacheField = Resources.class.getDeclaredField("mDrawableCache");
@@ -80,7 +81,7 @@
     }
 
     @RequiresApi(23)
-    private static void flushMarshmallows(@NonNull final Resources resources) {
+    private static void flushMarshmallows(final @NonNull Resources resources) {
         if (!sDrawableCacheFieldFetched) {
             try {
                 sDrawableCacheField = Resources.class.getDeclaredField("mDrawableCache");
@@ -109,7 +110,7 @@
     }
 
     @RequiresApi(24)
-    private static void flushNougats(@NonNull final Resources resources) {
+    private static void flushNougats(final @NonNull Resources resources) {
         if (!sResourcesImplFieldFetched) {
             try {
                 sResourcesImplField = Resources.class.getDeclaredField("mResourcesImpl");
@@ -161,7 +162,7 @@
         }
     }
 
-    private static void flushThemedResourcesCache(@NonNull final Object cache) {
+    private static void flushThemedResourcesCache(final @NonNull Object cache) {
         if (!sThemedResourceCacheClazzFetched) {
             try {
                 sThemedResourceCacheClazz = Class.forName("android.content.res.ThemedResourceCache");
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ToolbarActionBar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ToolbarActionBar.java
index d2565a5..883b7e4 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ToolbarActionBar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ToolbarActionBar.java
@@ -30,8 +30,6 @@
 import android.view.Window;
 import android.widget.SpinnerAdapter;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.view.menu.MenuBuilder;
 import androidx.appcompat.view.menu.MenuPresenter;
 import androidx.appcompat.widget.DecorToolbar;
@@ -40,6 +38,9 @@
 import androidx.core.util.Preconditions;
 import androidx.core.view.ViewCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.ArrayList;
 
 class ToolbarActionBar extends ActionBar {
@@ -68,7 +69,7 @@
             };
 
     ToolbarActionBar(@NonNull Toolbar toolbar, @Nullable CharSequence title,
-            @NonNull Window.Callback windowCallback) {
+            Window.@NonNull Callback windowCallback) {
         Preconditions.checkNotNull(toolbar);
         mDecorToolbar = new ToolbarWidgetWrapper(toolbar, false);
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/TwilightManager.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/TwilightManager.java
index 6d445c09..16ae3e4 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/TwilightManager.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/TwilightManager.java
@@ -27,11 +27,12 @@
 import android.text.format.DateUtils;
 import android.util.Log;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresPermission;
 import androidx.annotation.VisibleForTesting;
 import androidx.core.content.PermissionChecker;
 
+import org.jspecify.annotations.NonNull;
+
 import java.util.Calendar;
 
 /**
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/WindowDecorActionBar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/WindowDecorActionBar.java
index ff2e791f1..0c4b3cb 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/WindowDecorActionBar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/WindowDecorActionBar.java
@@ -42,7 +42,6 @@
 import android.view.animation.Interpolator;
 import android.widget.SpinnerAdapter;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.content.res.AppCompatResources;
@@ -67,6 +66,8 @@
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentTransaction;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java b/appcompat/appcompat/src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java
index ae0eb0d..97d7e03 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java
@@ -32,12 +32,13 @@
 import androidx.annotation.ColorInt;
 import androidx.annotation.FloatRange;
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.core.graphics.drawable.DrawableCompat;
 import androidx.core.view.ViewCompat;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/StandaloneActionMode.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/StandaloneActionMode.java
index 7f8b6e3..8c28593 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/StandaloneActionMode.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/StandaloneActionMode.java
@@ -23,13 +23,14 @@
 import android.view.MenuItem;
 import android.view.View;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.view.menu.MenuBuilder;
 import androidx.appcompat.view.menu.MenuPopupHelper;
 import androidx.appcompat.view.menu.SubMenuBuilder;
 import androidx.appcompat.widget.ActionBarContextView;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.ref.WeakReference;
 
 /**
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java
index a589b288b..37700ab 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java
@@ -29,14 +29,15 @@
 import android.view.SubMenu;
 import android.view.View;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.core.content.ContextCompat;
 import androidx.core.graphics.drawable.DrawableCompat;
 import androidx.core.internal.view.SupportMenuItem;
 import androidx.core.view.ActionProvider;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  */
 @RestrictTo(LIBRARY_GROUP_PREFIX)
@@ -180,9 +181,8 @@
         return this;
     }
 
-    @NonNull
     @Override
-    public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {
+    public @NonNull MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {
         mShortcutAlphabeticChar = Character.toLowerCase(alphaChar);
         mShortcutAlphabeticModifiers = KeyEvent.normalizeMetaState(alphaModifiers);
         return this;
@@ -239,9 +239,8 @@
         return this;
     }
 
-    @NonNull
     @Override
-    public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {
+    public @NonNull MenuItem setNumericShortcut(char numericChar, int numericModifiers) {
         mShortcutNumericChar = numericChar;
         mShortcutNumericModifiers = KeyEvent.normalizeMetaState(numericModifiers);
         return this;
@@ -260,9 +259,8 @@
         return this;
     }
 
-    @NonNull
     @Override
-    public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,
+    public @NonNull MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,
             int alphaModifiers) {
         mShortcutNumericChar = numericChar;
         mShortcutNumericModifiers = KeyEvent.normalizeMetaState(numericModifiers);
@@ -323,9 +321,8 @@
         return false;
     }
 
-    @NonNull
     @Override
-    public SupportMenuItem setActionView(View actionView) {
+    public @NonNull SupportMenuItem setActionView(View actionView) {
         throw new UnsupportedOperationException();
     }
 
@@ -344,9 +341,8 @@
         throw new UnsupportedOperationException();
     }
 
-    @NonNull
     @Override
-    public SupportMenuItem setActionView(int resId) {
+    public @NonNull SupportMenuItem setActionView(int resId) {
         throw new UnsupportedOperationException();
     }
 
@@ -355,15 +351,13 @@
         return null;
     }
 
-    @NonNull
     @Override
-    public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {
+    public @NonNull SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {
         throw new UnsupportedOperationException();
     }
 
-    @NonNull
     @Override
-    public SupportMenuItem setShowAsActionFlags(int actionEnum) {
+    public @NonNull SupportMenuItem setShowAsActionFlags(int actionEnum) {
         setShowAsAction(actionEnum);
         return this;
     }
@@ -388,9 +382,8 @@
         throw new UnsupportedOperationException();
     }
 
-    @NonNull
     @Override
-    public SupportMenuItem setContentDescription(CharSequence contentDescription) {
+    public @NonNull SupportMenuItem setContentDescription(CharSequence contentDescription) {
         mContentDescription = contentDescription;
         return this;
     }
@@ -400,9 +393,8 @@
         return mContentDescription;
     }
 
-    @NonNull
     @Override
-    public SupportMenuItem setTooltipText(CharSequence tooltipText) {
+    public @NonNull SupportMenuItem setTooltipText(CharSequence tooltipText) {
         mTooltipText = tooltipText;
         return this;
     }
@@ -412,9 +404,8 @@
         return mTooltipText;
     }
 
-    @NonNull
     @Override
-    public MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {
+    public @NonNull MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {
         mIconTintList = iconTintList;
         mHasIconTint = true;
 
@@ -428,9 +419,8 @@
         return mIconTintList;
     }
 
-    @NonNull
     @Override
-    public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {
+    public @NonNull MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {
         mIconTintMode = iconTintMode;
         mHasIconTintMode = true;
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java
index 3957a72..e22ad41 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java
@@ -42,8 +42,6 @@
 
 import androidx.annotation.AttrRes;
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.StyleRes;
 import androidx.appcompat.R;
 import androidx.appcompat.widget.MenuItemHoverListener;
@@ -51,6 +49,9 @@
 import androidx.core.internal.view.SupportMenu;
 import androidx.core.view.GravityCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
@@ -144,7 +145,7 @@
 
         @Override
         public void onItemHoverEnter(
-                @NonNull final MenuBuilder menu, @NonNull final MenuItem item) {
+                final @NonNull MenuBuilder menu, final @NonNull MenuItem item) {
             // Something new was hovered, cancel all scheduled runnables.
             mSubMenuHoverHandler.removeCallbacksAndMessages(null);
 
@@ -531,8 +532,7 @@
      * @param submenu the submenu whose parent view should be obtained
      * @return the parent view, or {@code null} if one could not be found
      */
-    @Nullable
-    private View findParentViewForSubmenu(
+    private @Nullable View findParentViewForSubmenu(
             @NonNull CascadingMenuInfo parentInfo, @NonNull MenuBuilder submenu) {
         final MenuItem owner = findMenuItemForSubmenu(parentInfo.menu, submenu);
         if (owner == null) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuBuilder.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuBuilder.java
index 47fb9e8..c028921 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuBuilder.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuBuilder.java
@@ -37,7 +37,6 @@
 import android.view.View;
 import android.view.ViewConfiguration;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.core.content.ContextCompat;
 import androidx.core.internal.view.SupportMenu;
@@ -45,6 +44,8 @@
 import androidx.core.view.ActionProvider;
 import androidx.core.view.ViewConfigurationCompat;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.List;
@@ -1116,8 +1117,7 @@
         onItemsChanged(true);
     }
 
-    @NonNull
-    public ArrayList<MenuItemImpl> getVisibleItems() {
+    public @NonNull ArrayList<MenuItemImpl> getVisibleItems() {
         if (!mIsVisibleItemsStale) return mVisibleItems;
 
         // Refresh the visible items
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuDialogHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuDialogHelper.java
index 4d4093b..43ba513 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuDialogHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuDialogHelper.java
@@ -24,10 +24,11 @@
 import android.view.Window;
 import android.view.WindowManager;
 
-import androidx.annotation.NonNull;
 import androidx.appcompat.R;
 import androidx.appcompat.app.AlertDialog;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Helper for menus that appear as Dialogs (context and submenus).
  */
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java
index dbdc39a..80f9f41 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java
@@ -36,8 +36,6 @@
 import android.view.ViewDebug;
 import android.widget.LinearLayout;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.content.res.AppCompatResources;
@@ -45,6 +43,9 @@
 import androidx.core.internal.view.SupportMenuItem;
 import androidx.core.view.ActionProvider;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  */
 @RestrictTo(LIBRARY_GROUP_PREFIX)
@@ -255,9 +256,8 @@
         return this;
     }
 
-    @NonNull
     @Override
-    public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {
+    public @NonNull MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {
         if (mShortcutAlphabeticChar == alphaChar
                 && mShortcutAlphabeticModifiers == alphaModifiers) {
             return this;
@@ -298,9 +298,8 @@
         return this;
     }
 
-    @NonNull
     @Override
-    public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {
+    public @NonNull MenuItem setNumericShortcut(char numericChar, int numericModifiers) {
         if (mShortcutNumericChar == numericChar && mShortcutNumericModifiers == numericModifiers) {
             return this;
         }
@@ -323,9 +322,8 @@
         return this;
     }
 
-    @NonNull
     @Override
-    public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,
+    public @NonNull MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,
             int alphaModifiers) {
         mShortcutNumericChar = numericChar;
         mShortcutNumericModifiers = KeyEvent.normalizeMetaState(numericModifiers);
@@ -526,9 +524,8 @@
     }
 
 
-    @NonNull
     @Override
-    public MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {
+    public @NonNull MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {
         mIconTintList = iconTintList;
         mHasIconTint = true;
         mNeedToApplyIconTint = true;
@@ -543,9 +540,8 @@
         return mIconTintList;
     }
 
-    @NonNull
     @Override
-    public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {
+    public @NonNull MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {
         mIconTintMode = iconTintMode;
         mHasIconTintMode = true;
         mNeedToApplyIconTint = true;
@@ -740,9 +736,8 @@
         mMenu.onItemActionRequestChanged(this);
     }
 
-    @NonNull
     @Override
-    public SupportMenuItem setActionView(View view) {
+    public @NonNull SupportMenuItem setActionView(View view) {
         mActionView = view;
         mActionProvider = null;
         if (view != null && view.getId() == View.NO_ID && mId > 0) {
@@ -752,9 +747,8 @@
         return this;
     }
 
-    @NonNull
     @Override
-    public SupportMenuItem setActionView(int resId) {
+    public @NonNull SupportMenuItem setActionView(int resId) {
         final Context context = mMenu.getContext();
         final LayoutInflater inflater = LayoutInflater.from(context);
         setActionView(inflater.inflate(resId, new LinearLayout(context), false));
@@ -790,9 +784,8 @@
         return mActionProvider;
     }
 
-    @NonNull
     @Override
-    public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {
+    public @NonNull SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {
         if (mActionProvider != null) {
             mActionProvider.reset();
         }
@@ -810,9 +803,8 @@
         return this;
     }
 
-    @NonNull
     @Override
-    public SupportMenuItem setShowAsActionFlags(int actionEnum) {
+    public @NonNull SupportMenuItem setShowAsActionFlags(int actionEnum) {
         setShowAsAction(actionEnum);
         return this;
     }
@@ -875,9 +867,8 @@
         return this;
     }
 
-    @NonNull
     @Override
-    public SupportMenuItem setContentDescription(CharSequence contentDescription) {
+    public @NonNull SupportMenuItem setContentDescription(CharSequence contentDescription) {
         mContentDescription = contentDescription;
 
         mMenu.onItemsChanged(false);
@@ -890,9 +881,8 @@
         return mContentDescription;
     }
 
-    @NonNull
     @Override
-    public SupportMenuItem setTooltipText(CharSequence tooltipText) {
+    public @NonNull SupportMenuItem setTooltipText(CharSequence tooltipText) {
         mTooltipText = tooltipText;
 
         mMenu.onItemsChanged(false);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java
index d35af13..c3a73f7 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java
@@ -30,12 +30,13 @@
 import android.view.View;
 import android.widget.FrameLayout;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.view.CollapsibleActionView;
 import androidx.core.internal.view.SupportMenuItem;
 import androidx.core.view.ActionProvider;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.reflect.Method;
 
 /**
@@ -469,8 +470,7 @@
         }
 
         @Override
-        @NonNull
-        public View onCreateActionView() {
+        public @NonNull View onCreateActionView() {
             return mInner.onCreateActionView();
         }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopup.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopup.java
index f59c9f9..b926aa8 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopup.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopup.java
@@ -28,10 +28,11 @@
 import android.widget.ListAdapter;
 import android.widget.PopupWindow;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.core.internal.view.SupportMenu;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Base class for a menu popup abstraction - i.e., some type of menu, housed in a popup window
  * environment.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java
index 7bf848f..9567c4c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java
@@ -31,13 +31,14 @@
 import android.widget.PopupWindow.OnDismissListener;
 
 import androidx.annotation.AttrRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StyleRes;
 import androidx.appcompat.R;
 import androidx.core.view.GravityCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Presents a menu as a small, simple popup anchored to another view.
  *
@@ -153,8 +154,7 @@
     /**
      */
     @RestrictTo(LIBRARY)
-    @NonNull
-    public MenuPopup getPopup() {
+    public @NonNull MenuPopup getPopup() {
         if (mPopup == null) {
             mPopup = createPopup();
         }
@@ -221,9 +221,8 @@
      *
      * @return an initialized popup
      */
-    @NonNull
     @SuppressWarnings("deprecation") /* getDefaultDisplay */
-    private MenuPopup createPopup() {
+    private @NonNull MenuPopup createPopup() {
         final WindowManager windowManager = (WindowManager) mContext.getSystemService(
                 Context.WINDOW_SERVICE);
         final Display display = windowManager.getDefaultDisplay();
@@ -320,7 +319,7 @@
     }
 
     @Override
-    public void setPresenterCallback(@Nullable MenuPresenter.Callback cb) {
+    public void setPresenterCallback(MenuPresenter.@Nullable Callback cb) {
         mPresenterCallback = cb;
         if (mPopup != null) {
             mPopup.setCallback(cb);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPresenter.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPresenter.java
index 46af852..7694890 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPresenter.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPresenter.java
@@ -22,9 +22,10 @@
 import android.os.Parcelable;
 import android.view.ViewGroup;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * A MenuPresenter is responsible for building views for a Menu object. It takes over some
  * responsibility from the old style monolithic MenuBuilder class.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java
index fbd4601..01ba5eb 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java
@@ -25,9 +25,10 @@
 import android.view.SubMenu;
 import android.view.View;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * The model for a sub menu, which is an extension of the menu.  Most methods are proxied to the
  * parent menu.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AbsActionBarView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AbsActionBarView.java
index 3ed4a46..bf59b8e 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AbsActionBarView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AbsActionBarView.java
@@ -26,13 +26,14 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 import androidx.core.view.ViewCompat;
 import androidx.core.view.ViewPropertyAnimatorCompat;
 import androidx.core.view.ViewPropertyAnimatorListener;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 abstract class AbsActionBarView extends ViewGroup {
     private static final int FADE_DURATION = 200;
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarBackgroundDrawable.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarBackgroundDrawable.java
index 2af5be6..305053c9 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarBackgroundDrawable.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarBackgroundDrawable.java
@@ -22,9 +22,10 @@
 import android.graphics.PixelFormat;
 import android.graphics.drawable.Drawable;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 
+import org.jspecify.annotations.NonNull;
+
 class ActionBarBackgroundDrawable extends Drawable {
 
     final ActionBarContainer mContainer;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java
index bd7ce7f..0dc464f 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java
@@ -28,11 +28,12 @@
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * This class acts as a container for the action bar view and action mode context views.
  * It applies special styles as needed to help handle animated transitions between them.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContextView.java
index 3fbccd1..99eaa09 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContextView.java
@@ -27,14 +27,15 @@
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.view.ActionMode;
 import androidx.appcompat.view.menu.MenuBuilder;
 import androidx.core.view.ViewCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  */
 @RestrictTo(LIBRARY_GROUP_PREFIX)
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarOverlayLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarOverlayLayout.java
index bc0e4a3..f578c7a 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarOverlayLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarOverlayLayout.java
@@ -39,8 +39,6 @@
 import android.view.WindowInsets;
 import android.widget.OverScroller;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
@@ -54,6 +52,9 @@
 import androidx.core.view.ViewCompat;
 import androidx.core.view.WindowInsetsCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Special layout for the containing of an overlay action bar (and its content) to correctly handle
  * fitting system windows when the content has request that its layout ignore them.
@@ -101,10 +102,10 @@
     private final Rect mLastInnerInsetsRect = new Rect();
 
     // Used on API 21+
-    @NonNull private WindowInsetsCompat mBaseInnerInsets = WindowInsetsCompat.CONSUMED;
-    @NonNull private WindowInsetsCompat mLastBaseInnerInsets = WindowInsetsCompat.CONSUMED;
-    @NonNull private WindowInsetsCompat mInnerInsets = WindowInsetsCompat.CONSUMED;
-    @NonNull private WindowInsetsCompat mLastInnerInsets = WindowInsetsCompat.CONSUMED;
+    private @NonNull WindowInsetsCompat mBaseInnerInsets = WindowInsetsCompat.CONSUMED;
+    private @NonNull WindowInsetsCompat mLastBaseInnerInsets = WindowInsetsCompat.CONSUMED;
+    private @NonNull WindowInsetsCompat mInnerInsets = WindowInsetsCompat.CONSUMED;
+    private @NonNull WindowInsetsCompat mLastInnerInsets = WindowInsetsCompat.CONSUMED;
 
     private ActionBarVisibilityCallback mActionBarVisibilityCallback;
 
@@ -394,7 +395,7 @@
 
     @RequiresApi(21)
     @Override
-    public WindowInsets onApplyWindowInsets(@NonNull final WindowInsets in) {
+    public WindowInsets onApplyWindowInsets(final @NonNull WindowInsets in) {
         pullChildren();
 
         final int vis = getWindowSystemUiVisibility();
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuPresenter.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuPresenter.java
index 11f4532..0940822 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuPresenter.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuPresenter.java
@@ -30,8 +30,6 @@
 import android.view.View.MeasureSpec;
 import android.view.ViewGroup;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 import androidx.appcompat.view.ActionBarPolicy;
 import androidx.appcompat.view.menu.ActionMenuItemView;
@@ -46,6 +44,9 @@
 import androidx.core.view.ActionProvider;
 import androidx.core.view.GravityCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.ArrayList;
 
 /**
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuView.java
index 949e159..02c7e00 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionMenuView.java
@@ -31,8 +31,6 @@
 import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityEvent;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StyleRes;
 import androidx.appcompat.view.menu.ActionMenuItemView;
@@ -41,6 +39,9 @@
 import androidx.appcompat.view.menu.MenuPresenter;
 import androidx.appcompat.view.menu.MenuView;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * ActionMenuView is a presentation of a series of menu options as a View. It provides
  * several top level options as action buttons while spilling remaining options over as
@@ -559,8 +560,7 @@
      *
      * @return The overflow icon drawable
      */
-    @Nullable
-    public Drawable getOverflowIcon() {
+    public @Nullable Drawable getOverflowIcon() {
         getMenu();
         return mPresenter.getOverflowIcon();
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserView.java
index 4fc7fb2..380eec9 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserView.java
@@ -44,8 +44,6 @@
 import android.widget.PopupWindow;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.view.menu.ShowableListMenu;
@@ -53,6 +51,9 @@
 import androidx.core.view.ViewCompat;
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * This class is a view for choosing an activity for handling a given {@link Intent}.
  * <p>
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AlertDialogLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AlertDialogLayout.java
index 819c18f..eacffd1 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AlertDialogLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AlertDialogLayout.java
@@ -25,12 +25,13 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.core.view.GravityCompat;
 import androidx.core.view.ViewCompat;
 
+import org.jspecify.annotations.Nullable;
+
 /**
  * Special implementation of linear layout that's capable of laying out alert
  * dialog components.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java
index d184fc2..6f137f8 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java
@@ -31,8 +31,6 @@
 import android.widget.TextView;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.content.res.AppCompatResources;
@@ -41,6 +39,9 @@
 import androidx.core.widget.TintableCompoundDrawablesView;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A {@link AutoCompleteTextView} which supports compatible features on older versions of the
  * platform, including:
@@ -66,8 +67,7 @@
 
     private final AppCompatBackgroundHelper mBackgroundTintHelper;
     private final AppCompatTextHelper mTextHelper;
-    @NonNull
-    private final AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
+    private final @NonNull AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
 
     public AppCompatAutoCompleteTextView(@NonNull Context context) {
         this(context, null);
@@ -183,8 +183,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportBackgroundTintList() {
+    public @Nullable ColorStateList getSupportBackgroundTintList() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
     }
@@ -196,7 +195,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -209,8 +208,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportBackgroundTintMode() {
+    public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
     }
@@ -247,14 +245,13 @@
      */
     @Override
     public void setCustomSelectionActionModeCallback(
-            @Nullable ActionMode.Callback actionModeCallback) {
+            ActionMode.@Nullable Callback actionModeCallback) {
         super.setCustomSelectionActionModeCallback(
                 TextViewCompat.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
     }
 
     @Override
-    @Nullable
-    public ActionMode.Callback getCustomSelectionActionModeCallback() {
+    public ActionMode.@Nullable Callback getCustomSelectionActionModeCallback() {
         return TextViewCompat.unwrapCustomSelectionActionModeCallback(
                 super.getCustomSelectionActionModeCallback());
     }
@@ -307,10 +304,9 @@
      * @see #setSupportCompoundDrawablesTintList(ColorStateList)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public ColorStateList getSupportCompoundDrawablesTintList() {
+    public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
         return mTextHelper.getCompoundDrawableTintList();
     }
 
@@ -348,10 +344,9 @@
      * @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+    public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
         return mTextHelper.getCompoundDrawableTintMode();
     }
 
@@ -370,7 +365,7 @@
      */
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
         mTextHelper.setCompoundDrawableTintMode(tintMode);
         mTextHelper.applyCompoundDrawablesTints();
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatBackgroundHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatBackgroundHelper.java
index bcc381b..c3d5148 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatBackgroundHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatBackgroundHelper.java
@@ -23,15 +23,15 @@
 import android.util.AttributeSet;
 import android.view.View;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 import androidx.core.view.ViewCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 class AppCompatBackgroundHelper {
 
-    @NonNull
-    private final View mView;
+    private final @NonNull View mView;
     private final AppCompatDrawableManager mDrawableManager;
 
     private int mBackgroundResId = -1;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatButton.java
index 4f96bef..5e5e452 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatButton.java
@@ -33,8 +33,6 @@
 import android.widget.TextView;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.core.view.TintableBackgroundView;
@@ -43,6 +41,9 @@
 import androidx.core.widget.TintableCompoundDrawablesView;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A {@link Button} which supports compatible features on older versions of the platform,
  * including:
@@ -65,8 +66,7 @@
 
     private final AppCompatBackgroundHelper mBackgroundTintHelper;
     private final AppCompatTextHelper mTextHelper;
-    @NonNull
-    private AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
+    private @NonNull AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
 
     public AppCompatButton(@NonNull Context context) {
         this(context, null);
@@ -129,8 +129,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportBackgroundTintList() {
+    public @Nullable ColorStateList getSupportBackgroundTintList() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
     }
@@ -142,7 +141,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -155,8 +154,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportBackgroundTintMode() {
+    public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
     }
@@ -260,7 +258,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] presetSizes, int unit)
+    public void setAutoSizeTextTypeUniformWithPresetSizes(int @NonNull [] presetSizes, int unit)
             throws IllegalArgumentException {
         if (SDK_LEVEL_SUPPORTS_AUTOSIZE) {
             super.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, unit);
@@ -372,14 +370,13 @@
      */
     @Override
     public void setCustomSelectionActionModeCallback(
-            @Nullable ActionMode.Callback actionModeCallback) {
+            ActionMode.@Nullable Callback actionModeCallback) {
         super.setCustomSelectionActionModeCallback(
                 TextViewCompat.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
     }
 
     @Override
-    @Nullable
-    public ActionMode.Callback getCustomSelectionActionModeCallback() {
+    public ActionMode.@Nullable Callback getCustomSelectionActionModeCallback() {
         return TextViewCompat.unwrapCustomSelectionActionModeCallback(
                 super.getCustomSelectionActionModeCallback());
     }
@@ -397,10 +394,9 @@
     /**
      * @return the tint applied to the compound drawables
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public ColorStateList getSupportCompoundDrawablesTintList() {
+    public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
         return mTextHelper.getCompoundDrawableTintList();
     }
 
@@ -409,7 +405,7 @@
      */
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
         mTextHelper.setCompoundDrawableTintMode(tintMode);
         mTextHelper.applyCompoundDrawablesTints();
     }
@@ -417,16 +413,15 @@
     /**
      * @return the blending mode used to apply the tint to the compound drawables
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+    public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
         return mTextHelper.getCompoundDrawableTintMode();
     }
 
 
     @Override
-    public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+    public void setFilters(@SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
         super.setFilters(getEmojiTextViewHelper().getFilters(filters));
     }
 
@@ -434,8 +429,7 @@
     /**
      * This may be called from super constructors.
      */
-    @NonNull
-    private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+    private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
         //noinspection ConstantConditions
         if (mAppCompatEmojiTextHelper == null) {
             mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java
index 79d3921..1a750fb 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java
@@ -29,8 +29,6 @@
 import android.widget.TextView;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.content.res.AppCompatResources;
@@ -40,6 +38,9 @@
 import androidx.core.widget.TintableCompoundDrawablesView;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A {@link CheckBox} which supports compatible features on older versions of the platform,
  * including:
@@ -94,8 +95,7 @@
     /**
      * This may be called from super constructors.
      */
-    @NonNull
-    private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+    private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
         if (mAppCompatEmojiTextHelper == null) {
             mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
         }
@@ -130,9 +130,8 @@
      * This should be accessed from {@link androidx.core.widget.CompoundButtonCompat}
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    @Nullable
     @Override
-    public ColorStateList getSupportButtonTintList() {
+    public @Nullable ColorStateList getSupportButtonTintList() {
         return mCompoundButtonHelper != null
                 ? mCompoundButtonHelper.getSupportButtonTintList()
                 : null;
@@ -143,7 +142,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportButtonTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportButtonTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mCompoundButtonHelper != null) {
             mCompoundButtonHelper.setSupportButtonTintMode(tintMode);
         }
@@ -153,9 +152,8 @@
      * This should be accessed from {@link androidx.core.widget.CompoundButtonCompat}
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    @Nullable
     @Override
-    public PorterDuff.Mode getSupportButtonTintMode() {
+    public PorterDuff.@Nullable Mode getSupportButtonTintMode() {
         return mCompoundButtonHelper != null
                 ? mCompoundButtonHelper.getSupportButtonTintMode()
                 : null;
@@ -180,8 +178,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportBackgroundTintList() {
+    public @Nullable ColorStateList getSupportBackgroundTintList() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
     }
@@ -193,7 +190,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -206,8 +203,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportBackgroundTintMode() {
+    public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
     }
@@ -240,7 +236,7 @@
     }
 
     @Override
-    public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+    public void setFilters(@SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
         super.setFilters(getEmojiTextViewHelper().getFilters(filters));
     }
 
@@ -287,10 +283,9 @@
      * @see #setSupportCompoundDrawablesTintList(ColorStateList)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public ColorStateList getSupportCompoundDrawablesTintList() {
+    public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
         return mTextHelper.getCompoundDrawableTintList();
     }
 
@@ -328,10 +323,9 @@
      * @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+    public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
         return mTextHelper.getCompoundDrawableTintMode();
     }
 
@@ -350,7 +344,7 @@
      */
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
         mTextHelper.setCompoundDrawableTintMode(tintMode);
         mTextHelper.applyCompoundDrawablesTints();
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextView.java
index 606a40c..88acdf6 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextView.java
@@ -31,8 +31,6 @@
 import android.widget.TextView;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.content.res.AppCompatResources;
@@ -43,6 +41,9 @@
 import androidx.core.widget.TintableCompoundDrawablesView;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A {@link CheckedTextView} which supports compatible features on older versions of the platform,
  * including:
@@ -70,8 +71,7 @@
     private final AppCompatCheckedTextViewHelper mCheckedHelper;
     private final AppCompatBackgroundHelper mBackgroundTintHelper;
     private final AppCompatTextHelper mTextHelper;
-    @NonNull
-    private AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
+    private @NonNull AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
 
     public AppCompatCheckedTextView(@NonNull Context context) {
         this(context, null);
@@ -131,9 +131,8 @@
      *
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    @Nullable
     @Override
-    public ColorStateList getSupportCheckMarkTintList() {
+    public @Nullable ColorStateList getSupportCheckMarkTintList() {
         return mCheckedHelper != null
                 ? mCheckedHelper.getSupportCheckMarkTintList()
                 : null;
@@ -145,7 +144,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportCheckMarkTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportCheckMarkTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mCheckedHelper != null) {
             mCheckedHelper.setSupportCheckMarkTintMode(tintMode);
         }
@@ -156,9 +155,8 @@
      *
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    @Nullable
     @Override
-    public PorterDuff.Mode getSupportCheckMarkTintMode() {
+    public PorterDuff.@Nullable Mode getSupportCheckMarkTintMode() {
         return mCheckedHelper != null
                 ? mCheckedHelper.getSupportCheckMarkTintMode()
                 : null;
@@ -183,8 +181,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportBackgroundTintList() {
+    public @Nullable ColorStateList getSupportBackgroundTintList() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
     }
@@ -196,7 +193,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -209,8 +206,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportBackgroundTintMode() {
+    public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
     }
@@ -254,8 +250,7 @@
     }
 
     @Override
-    @Nullable
-    public InputConnection onCreateInputConnection(@NonNull EditorInfo outAttrs) {
+    public @Nullable InputConnection onCreateInputConnection(@NonNull EditorInfo outAttrs) {
         return AppCompatHintHelper.onCreateInputConnection(super.onCreateInputConnection(outAttrs),
                 outAttrs, this);
     }
@@ -266,14 +261,13 @@
      */
     @Override
     public void setCustomSelectionActionModeCallback(
-            @Nullable ActionMode.Callback actionModeCallback) {
+            ActionMode.@Nullable Callback actionModeCallback) {
         super.setCustomSelectionActionModeCallback(
                 TextViewCompat.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
     }
 
     @Override
-    @Nullable
-    public ActionMode.Callback getCustomSelectionActionModeCallback() {
+    public ActionMode.@Nullable Callback getCustomSelectionActionModeCallback() {
         return TextViewCompat.unwrapCustomSelectionActionModeCallback(
                 super.getCustomSelectionActionModeCallback());
     }
@@ -281,8 +275,7 @@
     /**
      * This may be called from super constructors.
      */
-    @NonNull
-    private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+    private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
         //noinspection ConstantConditions
         if (mAppCompatEmojiTextHelper == null) {
             mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
@@ -334,10 +327,9 @@
      * @see #setSupportCompoundDrawablesTintList(ColorStateList)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public ColorStateList getSupportCompoundDrawablesTintList() {
+    public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
         return mTextHelper.getCompoundDrawableTintList();
     }
 
@@ -375,10 +367,9 @@
      * @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+    public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
         return mTextHelper.getCompoundDrawableTintMode();
     }
 
@@ -397,7 +388,7 @@
      */
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
         mTextHelper.setCompoundDrawableTintMode(tintMode);
         mTextHelper.applyCompoundDrawablesTints();
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextViewHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextViewHelper.java
index 73b631a..3459276 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextViewHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckedTextViewHelper.java
@@ -25,8 +25,6 @@
 import android.util.AttributeSet;
 import android.widget.CheckedTextView;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.content.res.AppCompatResources;
@@ -34,10 +32,12 @@
 import androidx.core.view.ViewCompat;
 import androidx.core.widget.CheckedTextViewCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 @RestrictTo(LIBRARY)
 class AppCompatCheckedTextViewHelper {
-    @NonNull
-    private final CheckedTextView mView;
+    private final @NonNull CheckedTextView mView;
 
     private ColorStateList mCheckMarkTintList = null;
     private PorterDuff.Mode mCheckMarkTintMode = null;
@@ -107,7 +107,7 @@
         return mCheckMarkTintList;
     }
 
-    void setSupportCheckMarkTintMode(@Nullable PorterDuff.Mode tintMode) {
+    void setSupportCheckMarkTintMode(PorterDuff.@Nullable Mode tintMode) {
         mCheckMarkTintMode = tintMode;
         mHasCheckMarkTintMode = true;
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCompoundButtonHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCompoundButtonHelper.java
index bf9b410..e78f66f 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCompoundButtonHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCompoundButtonHelper.java
@@ -23,17 +23,17 @@
 import android.util.AttributeSet;
 import android.widget.CompoundButton;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 import androidx.appcompat.content.res.AppCompatResources;
 import androidx.core.graphics.drawable.DrawableCompat;
 import androidx.core.view.ViewCompat;
 import androidx.core.widget.CompoundButtonCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 class AppCompatCompoundButtonHelper {
-    @NonNull
-    private final CompoundButton mView;
+    private final @NonNull CompoundButton mView;
 
     private ColorStateList mButtonTintList = null;
     private PorterDuff.Mode mButtonTintMode = null;
@@ -101,7 +101,7 @@
         return mButtonTintList;
     }
 
-    void setSupportButtonTintMode(@Nullable PorterDuff.Mode tintMode) {
+    void setSupportButtonTintMode(PorterDuff.@Nullable Mode tintMode) {
         mButtonTintMode = tintMode;
         mHasButtonTintMode = true;
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java
index 479200e..e894c47 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java
@@ -39,11 +39,12 @@
 import androidx.annotation.ColorInt;
 import androidx.annotation.DimenRes;
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.core.graphics.drawable.DrawableCompat;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  */
 @RestrictTo(LIBRARY_GROUP_PREFIX)
@@ -148,7 +149,7 @@
                             getThemeAttrColor(context, R.attr.colorAccent));
                 }
 
-                private ColorStateList createButtonColorStateList(@NonNull final Context context,
+                private ColorStateList createButtonColorStateList(final @NonNull Context context,
                         @ColorInt final int baseColor) {
                     final int[][] states = new int[4][];
                     final int[] colors = new int[4];
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEditText.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEditText.java
index fcb6eda..58c2f28 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEditText.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEditText.java
@@ -38,8 +38,6 @@
 import android.widget.TextView;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.UiThread;
@@ -56,6 +54,9 @@
 import androidx.core.widget.TintableCompoundDrawablesView;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A {@link EditText} which supports compatible features on older versions of the platform,
  * including:
@@ -83,10 +84,8 @@
     private final AppCompatTextHelper mTextHelper;
     private final AppCompatTextClassifierHelper mTextClassifierHelper;
     private final TextViewOnReceiveContentListener mDefaultOnReceiveContentListener;
-    @NonNull
-    private final AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
-    @Nullable
-    private SuperCaller mSuperCaller;
+    private final @NonNull AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
+    private @Nullable SuperCaller mSuperCaller;
 
     public AppCompatEditText(@NonNull Context context) {
         this(context, null);
@@ -162,7 +161,7 @@
      * will return null.
      */
     @Override
-    @Nullable public Editable getText() {
+    public @Nullable Editable getText() {
         if (Build.VERSION.SDK_INT >= 28) {
             return super.getText();
         }
@@ -207,8 +206,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportBackgroundTintList() {
+    public @Nullable ColorStateList getSupportBackgroundTintList() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
     }
@@ -220,7 +218,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -233,8 +231,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportBackgroundTintMode() {
+    public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
     }
@@ -264,9 +261,8 @@
      *
      * {@inheritDoc}
      */
-    @Nullable
     @Override
-    public InputConnection onCreateInputConnection(@NonNull EditorInfo outAttrs) {
+    public @Nullable InputConnection onCreateInputConnection(@NonNull EditorInfo outAttrs) {
         InputConnection ic = super.onCreateInputConnection(outAttrs);
         mTextHelper.populateSurroundingTextIfNeeded(this, ic, outAttrs);
         ic = AppCompatHintHelper.onCreateInputConnection(ic, outAttrs, this);
@@ -290,14 +286,13 @@
      */
     @Override
     public void setCustomSelectionActionModeCallback(
-            @Nullable ActionMode.Callback actionModeCallback) {
+            ActionMode.@Nullable Callback actionModeCallback) {
         super.setCustomSelectionActionModeCallback(
                 TextViewCompat.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
     }
 
     @Override
-    @Nullable
-    public ActionMode.Callback getCustomSelectionActionModeCallback() {
+    public ActionMode.@Nullable Callback getCustomSelectionActionModeCallback() {
         return TextViewCompat.unwrapCustomSelectionActionModeCallback(
                 super.getCustomSelectionActionModeCallback());
     }
@@ -317,9 +312,8 @@
     }
 
     @UiThread
-    @NonNull
     @RequiresApi(26)
-    private SuperCaller getSuperCaller() {
+    private @NonNull SuperCaller getSuperCaller() {
         if (mSuperCaller == null) {
             mSuperCaller = new SuperCaller();
         }
@@ -345,9 +339,8 @@
      * {@link android.view.textclassifier.TextClassificationManager}.
      */
     @Override
-    @NonNull
     @RequiresApi(api = 26)
-    public TextClassifier getTextClassifier() {
+    public @NonNull TextClassifier getTextClassifier() {
         // The null check is necessary because getTextClassifier is called when we are invoking
         // the super class's constructor.
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P || mTextClassifierHelper == null) {
@@ -394,9 +387,8 @@
      * @return The portion of the passed-in content that was not handled (may be all, some, or none
      * of the passed-in content).
      */
-    @Nullable
     @Override
-    public ContentInfoCompat onReceiveContent(@NonNull ContentInfoCompat payload) {
+    public @Nullable ContentInfoCompat onReceiveContent(@NonNull ContentInfoCompat payload) {
         return mDefaultOnReceiveContentListener.onReceiveContent(this, payload);
     }
 
@@ -448,10 +440,9 @@
      * @see #setSupportCompoundDrawablesTintList(ColorStateList)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public ColorStateList getSupportCompoundDrawablesTintList() {
+    public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
         return mTextHelper.getCompoundDrawableTintList();
     }
 
@@ -489,10 +480,9 @@
      * @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+    public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
         return mTextHelper.getCompoundDrawableTintMode();
     }
 
@@ -511,7 +501,7 @@
      */
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
         mTextHelper.setCompoundDrawableTintMode(tintMode);
         mTextHelper.applyCompoundDrawablesTints();
     }
@@ -519,8 +509,7 @@
     @RequiresApi(api = 26)
     class SuperCaller {
 
-        @Nullable
-        public TextClassifier getTextClassifier() {
+        public @Nullable TextClassifier getTextClassifier() {
             return AppCompatEditText.super.getTextClassifier();
         }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiEditTextHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiEditTextHelper.java
index 987ca76..9f0a585 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiEditTextHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiEditTextHelper.java
@@ -26,20 +26,19 @@
 import android.widget.EditText;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 import androidx.emoji2.viewsintegration.EmojiEditTextHelper;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Helper for using EmojiCompat from TextView in appcompat.
  */
 class AppCompatEmojiEditTextHelper {
 
-    @NonNull
-    private final EditText mView;
-    @NonNull
-    private final EmojiEditTextHelper mEmojiEditTextHelper;
+    private final @NonNull EditText mView;
+    private final @NonNull EmojiEditTextHelper mEmojiEditTextHelper;
 
     /**
      * Helper for integrating EmojiCompat into an EditText subclass.
@@ -116,8 +115,7 @@
      *
      * @return a new KeyListener instance that wraps {@code keyListener}, or null if passed null.
      */
-    @Nullable
-    KeyListener getKeyListener(@Nullable KeyListener keyListener) {
+    @Nullable KeyListener getKeyListener(@Nullable KeyListener keyListener) {
         // add a guard for NumberkeyListener both here and in emoji2 to avoid release dependency.
         // this allows appcompat 1.4.1 to ship without a dependency on emoji2 1.1.
         if (isEmojiCapableKeyListener(keyListener)) {
@@ -142,8 +140,7 @@
      *
      * @return a new InputConnection instance that wraps {@code inputConnection}
      */
-    @Nullable
-    InputConnection onCreateInputConnection(@Nullable InputConnection inputConnection,
+    @Nullable InputConnection onCreateInputConnection(@Nullable InputConnection inputConnection,
             @NonNull EditorInfo outAttrs) {
         return mEmojiEditTextHelper.onCreateInputConnection(inputConnection, outAttrs);
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiTextHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiTextHelper.java
index b7418d6..0308988 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiTextHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEmojiTextHelper.java
@@ -23,20 +23,19 @@
 import android.util.AttributeSet;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 import androidx.emoji2.viewsintegration.EmojiTextViewHelper;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Helper for using EmojiCompat from TextView in appcompat.
  */
 class AppCompatEmojiTextHelper {
 
-    @NonNull
-    private final TextView mView;
-    @NonNull
-    private final EmojiTextViewHelper mEmojiTextViewHelper;
+    private final @NonNull TextView mView;
+    private final @NonNull EmojiTextViewHelper mEmojiTextViewHelper;
 
     AppCompatEmojiTextHelper(@NonNull TextView view) {
         mView = view;
@@ -94,8 +93,8 @@
      * availability
      */
     @SuppressWarnings("ArrayReturn")
-    @NonNull
-    InputFilter[] getFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+    InputFilter @NonNull [] getFilters(
+            @SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
         return mEmojiTextViewHelper.getFilters(filters);
     }
 
@@ -116,8 +115,7 @@
      *                             transform
      * @return the correct transformation based on isEnabled, may be null
      */
-    @Nullable
-    public TransformationMethod wrapTransformationMethod(
+    public @Nullable TransformationMethod wrapTransformationMethod(
             @Nullable TransformationMethod transformationMethod) {
         return mEmojiTextViewHelper.wrapTransformationMethod(transformationMethod);
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageButton.java
index 63c15e0..9dafb34 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageButton.java
@@ -29,8 +29,6 @@
 import android.widget.ImageView;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.core.view.TintableBackgroundView;
@@ -38,6 +36,9 @@
 import androidx.core.widget.TintableImageSourceView;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A {@link ImageButton} which supports compatible features on older versions of the platform,
  * including:
@@ -160,8 +161,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportBackgroundTintList() {
+    public @Nullable ColorStateList getSupportBackgroundTintList() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
     }
@@ -173,7 +173,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -186,8 +186,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportBackgroundTintMode() {
+    public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
     }
@@ -211,8 +210,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportImageTintList() {
+    public @Nullable ColorStateList getSupportImageTintList() {
         return mImageHelper != null
                 ? mImageHelper.getSupportImageTintList() : null;
     }
@@ -224,7 +222,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportImageTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportImageTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mImageHelper != null) {
             mImageHelper.setSupportImageTintMode(tintMode);
         }
@@ -237,8 +235,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportImageTintMode() {
+    public PorterDuff.@Nullable Mode getSupportImageTintMode() {
         return mImageHelper != null
                 ? mImageHelper.getSupportImageTintMode() : null;
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageHelper.java
index 3c7b25e..84a07cf 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageHelper.java
@@ -25,19 +25,19 @@
 import android.util.AttributeSet;
 import android.widget.ImageView;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.content.res.AppCompatResources;
 import androidx.core.view.ViewCompat;
 import androidx.core.widget.ImageViewCompat;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  */
 @RestrictTo(LIBRARY_GROUP_PREFIX)
 public class AppCompatImageHelper {
-    @NonNull
-    private final ImageView mView;
+    private final @NonNull ImageView mView;
 
     private TintInfo mInternalImageTint;
     private TintInfo mImageTint;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java
index a7bdad9..7f1bd11 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java
@@ -28,14 +28,15 @@
 import android.widget.ImageView;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.core.view.TintableBackgroundView;
 import androidx.core.widget.ImageViewCompat;
 import androidx.core.widget.TintableImageSourceView;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A {@link ImageView} which supports compatible features on older versions of the platform,
  * including:
@@ -171,8 +172,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportBackgroundTintList() {
+    public @Nullable ColorStateList getSupportBackgroundTintList() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
     }
@@ -184,7 +184,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -197,8 +197,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportBackgroundTintMode() {
+    public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
     }
@@ -223,8 +222,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportImageTintList() {
+    public @Nullable ColorStateList getSupportImageTintList() {
         return mImageHelper != null
                 ? mImageHelper.getSupportImageTintList() : null;
     }
@@ -236,7 +234,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportImageTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportImageTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mImageHelper != null) {
             mImageHelper.setSupportImageTintMode(tintMode);
         }
@@ -249,8 +247,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportImageTintMode() {
+    public PorterDuff.@Nullable Mode getSupportImageTintMode() {
         return mImageHelper != null
                 ? mImageHelper.getSupportImageTintMode() : null;
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java
index 9ad2193..346f542 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java
@@ -30,8 +30,6 @@
 import android.widget.TextView;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.content.res.AppCompatResources;
@@ -39,6 +37,9 @@
 import androidx.core.widget.TintableCompoundDrawablesView;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A {@link MultiAutoCompleteTextView} which supports compatible features on older version of the
  * platform, including:
@@ -65,8 +66,7 @@
 
     private final AppCompatBackgroundHelper mBackgroundTintHelper;
     private final AppCompatTextHelper mTextHelper;
-    @NonNull
-    private final AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
+    private final @NonNull AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
 
     public AppCompatMultiAutoCompleteTextView(@NonNull Context context) {
         this(context, null);
@@ -183,8 +183,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportBackgroundTintList() {
+    public @Nullable ColorStateList getSupportBackgroundTintList() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
     }
@@ -196,7 +195,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -209,8 +208,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportBackgroundTintMode() {
+    public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
     }
@@ -289,10 +287,9 @@
      * @see #setSupportCompoundDrawablesTintList(ColorStateList)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public ColorStateList getSupportCompoundDrawablesTintList() {
+    public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
         return mTextHelper.getCompoundDrawableTintList();
     }
 
@@ -330,10 +327,9 @@
      * @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+    public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
         return mTextHelper.getCompoundDrawableTintMode();
     }
 
@@ -352,7 +348,7 @@
      */
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
         mTextHelper.setCompoundDrawableTintMode(tintMode);
         mTextHelper.applyCompoundDrawablesTints();
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatPopupWindow.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatPopupWindow.java
index 5c1f568..55057df 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatPopupWindow.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatPopupWindow.java
@@ -23,12 +23,13 @@
 import android.widget.PopupWindow;
 
 import androidx.annotation.AttrRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.StyleRes;
 import androidx.appcompat.R;
 import androidx.core.widget.PopupWindowCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 class AppCompatPopupWindow extends PopupWindow {
 
     private static final boolean COMPAT_OVERLAP_ANCHOR = Build.VERSION.SDK_INT < 21;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java
index e0eb8e0..53f4d82 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java
@@ -29,8 +29,6 @@
 import android.widget.TextView;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.content.res.AppCompatResources;
@@ -40,6 +38,9 @@
 import androidx.core.widget.TintableCompoundDrawablesView;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A {@link RadioButton} which supports compatible features on older versions of the platform,
  * including:
@@ -92,8 +93,7 @@
     /**
      * This may be called from super constructors.
      */
-    @NonNull
-    private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+    private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
         if (mAppCompatEmojiTextHelper == null) {
             mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
         }
@@ -128,9 +128,8 @@
      * This should be accessed from {@link androidx.core.widget.CompoundButtonCompat}
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    @Nullable
     @Override
-    public ColorStateList getSupportButtonTintList() {
+    public @Nullable ColorStateList getSupportButtonTintList() {
         return mCompoundButtonHelper != null
                 ? mCompoundButtonHelper.getSupportButtonTintList()
                 : null;
@@ -141,7 +140,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportButtonTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportButtonTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mCompoundButtonHelper != null) {
             mCompoundButtonHelper.setSupportButtonTintMode(tintMode);
         }
@@ -151,9 +150,8 @@
      * This should be accessed from {@link androidx.core.widget.CompoundButtonCompat}
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    @Nullable
     @Override
-    public PorterDuff.Mode getSupportButtonTintMode() {
+    public PorterDuff.@Nullable Mode getSupportButtonTintMode() {
         return mCompoundButtonHelper != null
                 ? mCompoundButtonHelper.getSupportButtonTintMode()
                 : null;
@@ -179,8 +177,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportBackgroundTintList() {
+    public @Nullable ColorStateList getSupportBackgroundTintList() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
     }
@@ -192,7 +189,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -205,8 +202,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportBackgroundTintMode() {
+    public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
     }
@@ -239,7 +235,7 @@
     }
 
     @Override
-    public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+    public void setFilters(@SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
         super.setFilters(getEmojiTextViewHelper().getFilters(filters));
     }
 
@@ -286,10 +282,9 @@
      * @see #setSupportCompoundDrawablesTintList(ColorStateList)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public ColorStateList getSupportCompoundDrawablesTintList() {
+    public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
         return mTextHelper.getCompoundDrawableTintList();
     }
 
@@ -327,10 +322,9 @@
      * @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+    public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
         return mTextHelper.getCompoundDrawableTintMode();
     }
 
@@ -349,7 +343,7 @@
      */
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
         mTextHelper.setCompoundDrawableTintMode(tintMode);
         mTextHelper.applyCompoundDrawablesTints();
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRatingBar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRatingBar.java
index 242f61e..7d58c8b 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRatingBar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRatingBar.java
@@ -22,10 +22,11 @@
 import android.view.View;
 import android.widget.RatingBar;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A {@link RatingBar} which supports compatible features on older versions of the platform.
  *
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatReceiveContentHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatReceiveContentHelper.java
index 91bc26a..8b2bf8e 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatReceiveContentHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatReceiveContentHelper.java
@@ -33,12 +33,13 @@
 import android.view.View;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.core.view.ContentInfoCompat;
 import androidx.core.view.ViewCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Common code for handling content via {@link ViewCompat#performReceiveContent}.
  */
@@ -150,8 +151,7 @@
      * @param view The target view.
      * @return The activity if found; null otherwise.
      */
-    @Nullable
-    static Activity tryGetActivity(@NonNull View view) {
+    static @Nullable Activity tryGetActivity(@NonNull View view) {
         Context context = view.getContext();
         while (context instanceof ContextWrapper) {
             if (context instanceof Activity) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java
index 70a8b0f..afe710c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java
@@ -21,10 +21,11 @@
 import android.util.AttributeSet;
 import android.widget.SeekBar;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A {@link SeekBar} which supports compatible features on older versions of the platform.
  *
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBarHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBarHelper.java
index ada8287..5399505c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBarHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBarHelper.java
@@ -23,11 +23,12 @@
 import android.util.AttributeSet;
 import android.widget.SeekBar;
 
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 import androidx.core.graphics.drawable.DrawableCompat;
 import androidx.core.view.ViewCompat;
 
+import org.jspecify.annotations.Nullable;
+
 class AppCompatSeekBarHelper extends AppCompatProgressBarHelper {
 
     private final SeekBar mView;
@@ -95,8 +96,7 @@
         mView.invalidate();
     }
 
-    @Nullable
-    Drawable getTickMark() {
+    @Nullable Drawable getTickMark() {
         return mTickMark;
     }
 
@@ -107,20 +107,18 @@
         applyTickMarkTint();
     }
 
-    @Nullable
-    ColorStateList getTickMarkTintList() {
+    @Nullable ColorStateList getTickMarkTintList() {
         return mTickMarkTintList;
     }
 
-    void setTickMarkTintMode(@Nullable PorterDuff.Mode tintMode) {
+    void setTickMarkTintMode(PorterDuff.@Nullable Mode tintMode) {
         mTickMarkTintMode = tintMode;
         mHasTickMarkTintMode = true;
 
         applyTickMarkTint();
     }
 
-    @Nullable
-    PorterDuff.Mode getTickMarkTintMode() {
+    PorterDuff.@Nullable Mode getTickMarkTintMode() {
         return mTickMarkTintMode;
     }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
index 37e4725..33cc244 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
@@ -47,8 +47,6 @@
 import android.widget.SpinnerAdapter;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StyleableRes;
@@ -62,6 +60,8 @@
 import androidx.core.view.TintableBackgroundView;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 
 /**
  * A {@link Spinner} which supports compatible features on older versions of the platform,
@@ -182,7 +182,7 @@
      * @see #MODE_DROPDOWN
      */
     public AppCompatSpinner(
-            @NonNull Context context, @Nullable  AttributeSet attrs, int defStyleAttr, int mode) {
+            @NonNull Context context,  @Nullable AttributeSet attrs, int defStyleAttr, int mode) {
         this(context, attrs, defStyleAttr, mode, null);
     }
 
@@ -510,8 +510,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportBackgroundTintList() {
+    public @Nullable ColorStateList getSupportBackgroundTintList() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
     }
@@ -524,7 +523,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -537,8 +536,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportBackgroundTintMode() {
+    public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
     }
@@ -689,7 +687,7 @@
          *                      views, may be {@null} to use default theme
          */
         public DropDownAdapter(@Nullable SpinnerAdapter adapter,
-                @Nullable Resources.Theme dropDownTheme) {
+                Resources.@Nullable Theme dropDownTheme) {
             mAdapter = adapter;
 
             if (adapter instanceof ListAdapter) {
@@ -1103,8 +1101,8 @@
         }
 
         static void setDropDownViewTheme(
-                @NonNull android.widget.ThemedSpinnerAdapter themedSpinnerAdapter,
-                @Nullable Resources.Theme theme
+                android.widget.@NonNull ThemedSpinnerAdapter themedSpinnerAdapter,
+                Resources.@Nullable Theme theme
         ) {
             if (!ObjectsCompat.equals(themedSpinnerAdapter.getDropDownViewTheme(), theme)) {
                 themedSpinnerAdapter.setDropDownViewTheme(theme);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextClassifierHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextClassifierHelper.java
index f675ec9..27ea549 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextClassifierHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextClassifierHelper.java
@@ -20,11 +20,12 @@
 import android.view.textclassifier.TextClassifier;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.core.util.Preconditions;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * To workaround a bug in O, by backporting a fix in P.
  * <p>
@@ -34,10 +35,8 @@
  * effect to this TextView.
  */
 final class AppCompatTextClassifierHelper {
-    @NonNull
-    private TextView mTextView;
-    @Nullable
-    private TextClassifier mTextClassifier;
+    private @NonNull TextView mTextView;
+    private @Nullable TextClassifier mTextClassifier;
 
     AppCompatTextClassifierHelper(@NonNull TextView textView) {
         mTextView = Preconditions.checkNotNull(textView);
@@ -57,8 +56,7 @@
      * {@link android.view.textclassifier.TextClassificationManager}.
      */
     @RequiresApi(api = 26)
-    @NonNull
-    public TextClassifier getTextClassifier() {
+    public @NonNull TextClassifier getTextClassifier() {
         if (mTextClassifier == null) {
             return Api26Impl.getTextClassifier(mTextView);
         }
@@ -71,8 +69,7 @@
             // This class is not instantiable.
         }
 
-        @NonNull
-        static TextClassifier getTextClassifier(@NonNull TextView textView) {
+        static @NonNull TextClassifier getTextClassifier(@NonNull TextView textView) {
             final TextClassificationManager tcm =
                     textView.getContext().getSystemService(TextClassificationManager.class);
             if (tcm != null) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextHelper.java
index 7368922..4ea59ca 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextHelper.java
@@ -37,8 +37,6 @@
 import android.view.inputmethod.InputConnection;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.UiThread;
@@ -51,6 +49,9 @@
 import androidx.core.view.inputmethod.EditorInfoCompat;
 import androidx.core.widget.TextViewCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.ref.WeakReference;
 import java.util.Locale;
 import java.util.Objects;
@@ -64,8 +65,7 @@
     private static final int SERIF = 2;
     private static final int MONOSPACE = 3;
 
-    @NonNull
-    private final TextView mView;
+    private final @NonNull TextView mView;
 
     private TintInfo mDrawableLeftTint;
     private TintInfo mDrawableTopTint;
@@ -75,14 +75,12 @@
     private TintInfo mDrawableEndTint;
     private TintInfo mDrawableTint; // Tint used for all compound drawables
 
-    @NonNull
-    private final AppCompatTextViewAutoSizeHelper mAutoSizeTextHelper;
+    private final @NonNull AppCompatTextViewAutoSizeHelper mAutoSizeTextHelper;
 
     private int mStyle = Typeface.NORMAL;
     private int mFontWeight = TEXT_FONT_WEIGHT_UNSPECIFIED;
     private Typeface mFontTypeface;
-    @Nullable
-    private String mFontVariationSettings = null;
+    private @Nullable String mFontVariationSettings = null;
     private boolean mAsyncFontPending;
 
     AppCompatTextHelper(@NonNull TextView view) {
@@ -472,8 +470,7 @@
         return false;
     }
 
-    @NonNull
-    private ResourcesCompat.FontCallback makeFontCallback(int fontWeight, int style) {
+    private ResourcesCompat.@NonNull FontCallback makeFontCallback(int fontWeight, int style) {
         final WeakReference<TextView> textViewWeak = new WeakReference<>(mView);
         return new ResourcesCompat.FontCallback() {
             @Override
@@ -665,7 +662,7 @@
                 autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
     }
 
-    void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] presetSizes, int unit)
+    void setAutoSizeTextTypeUniformWithPresetSizes(int @NonNull [] presetSizes, int unit)
             throws IllegalArgumentException {
         mAutoSizeTextHelper.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, unit);
     }
@@ -691,8 +688,7 @@
         return mAutoSizeTextHelper.getAutoSizeTextAvailableSizes();
     }
 
-    @Nullable
-    ColorStateList getCompoundDrawableTintList() {
+    @Nullable ColorStateList getCompoundDrawableTintList() {
         return mDrawableTint != null ? mDrawableTint.mTintList : null;
     }
 
@@ -705,12 +701,11 @@
         setCompoundTints();
     }
 
-    @Nullable
-    PorterDuff.Mode getCompoundDrawableTintMode() {
+    PorterDuff.@Nullable Mode getCompoundDrawableTintMode() {
         return mDrawableTint != null ? mDrawableTint.mTintMode : null;
     }
 
-    void setCompoundDrawableTintMode(@Nullable PorterDuff.Mode tintMode) {
+    void setCompoundDrawableTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mDrawableTint == null) {
             mDrawableTint = new TintInfo();
         }
@@ -830,9 +825,8 @@
          *         {@link Paint#setFontVariationSettings(String)} would return null for this
          *         Typeface and font variation settings string.
          */
-        @Nullable
         @UiThread
-        static Typeface createVariationInstance(@Nullable Typeface baseTypeface,
+        static @Nullable Typeface createVariationInstance(@Nullable Typeface baseTypeface,
                 @Nullable String fontVariationSettings) {
             Pair<Typeface, String> cacheKey = new Pair<>(baseTypeface, fontVariationSettings);
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextView.java
index 1333bf6..ccf0a76 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextView.java
@@ -40,8 +40,6 @@
 import androidx.annotation.DrawableRes;
 import androidx.annotation.FloatRange;
 import androidx.annotation.IntRange;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.Px;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
@@ -55,6 +53,9 @@
 import androidx.core.widget.TintableCompoundDrawablesView;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 
@@ -93,8 +94,7 @@
     private final AppCompatTextHelper mTextHelper;
     private final AppCompatTextClassifierHelper mTextClassifierHelper;
     @SuppressWarnings("NotNullFieldNotInitialized") // initialized in getter
-    @NonNull
-    private AppCompatEmojiTextHelper mEmojiTextViewHelper;
+    private @NonNull AppCompatEmojiTextHelper mEmojiTextViewHelper;
 
     private boolean mIsSetTypefaceProcessing = false;
 
@@ -123,11 +123,9 @@
      */
     private String mFontVariationSettings;
 
-    @Nullable
-    private SuperCaller mSuperCaller = null;
+    private @Nullable SuperCaller mSuperCaller = null;
 
-    @Nullable
-    private Future<PrecomputedTextCompat> mPrecomputedTextFuture;
+    private @Nullable Future<PrecomputedTextCompat> mPrecomputedTextFuture;
 
     public AppCompatTextView(@NonNull Context context) {
         this(context, null);
@@ -159,8 +157,7 @@
     /**
      * This may be called from super constructors.
      */
-    @NonNull
-    private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+    private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
         //noinspection ConstantConditions
         if (mEmojiTextViewHelper == null) {
             mEmojiTextViewHelper = new AppCompatEmojiTextHelper(this);
@@ -202,8 +199,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportBackgroundTintList() {
+    public @Nullable ColorStateList getSupportBackgroundTintList() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
     }
@@ -214,7 +210,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -226,8 +222,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportBackgroundTintMode() {
+    public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
     }
@@ -276,15 +271,14 @@
         }
     }
 
-    @Nullable
     @RequiresApi(26)
     @Override
-    public String getFontVariationSettings() {
+    public @Nullable String getFontVariationSettings() {
         return mFontVariationSettings;
     }
 
     @Override
-    public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+    public void setFilters(@SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
         super.setFilters(getEmojiTextViewHelper().getFilters(filters));
     }
 
@@ -395,7 +389,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] presetSizes, int unit)
+    public void setAutoSizeTextTypeUniformWithPresetSizes(int @NonNull [] presetSizes, int unit)
             throws IllegalArgumentException {
         if (SDK_LEVEL_SUPPORTS_AUTOSIZE) {
             getSuperCaller().setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, unit);
@@ -559,14 +553,13 @@
      */
     @Override
     public void setCustomSelectionActionModeCallback(
-            @Nullable ActionMode.Callback actionModeCallback) {
+            ActionMode.@Nullable Callback actionModeCallback) {
         super.setCustomSelectionActionModeCallback(
                 TextViewCompat.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
     }
 
     @Override
-    @Nullable
-    public ActionMode.Callback getCustomSelectionActionModeCallback() {
+    public ActionMode.@Nullable Callback getCustomSelectionActionModeCallback() {
         return TextViewCompat.unwrapCustomSelectionActionModeCallback(
                 super.getCustomSelectionActionModeCallback());
     }
@@ -578,8 +571,7 @@
      * @return a current {@link PrecomputedTextCompat.Params}
      * @see PrecomputedTextCompat
      */
-    @NonNull
-    public PrecomputedTextCompat.Params getTextMetricsParamsCompat() {
+    public PrecomputedTextCompat.@NonNull Params getTextMetricsParamsCompat() {
         return TextViewCompat.getTextMetricsParams(this);
     }
 
@@ -590,7 +582,7 @@
      *
      * @see PrecomputedTextCompat
      */
-    public void setTextMetricsParamsCompat(@NonNull PrecomputedTextCompat.Params params) {
+    public void setTextMetricsParamsCompat(PrecomputedTextCompat.@NonNull Params params) {
         TextViewCompat.setTextMetricsParams(this, params);
     }
 
@@ -645,8 +637,7 @@
      */
     @Override
     @RequiresApi(api = 26)
-    @NonNull
-    public TextClassifier getTextClassifier() {
+    public @NonNull TextClassifier getTextClassifier() {
         // The null check is necessary because getTextClassifier is called when we are invoking
         // the super class's constructor.
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P || mTextClassifierHelper == null) {
@@ -752,10 +743,9 @@
      * @see #setSupportCompoundDrawablesTintList(ColorStateList)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public ColorStateList getSupportCompoundDrawablesTintList() {
+    public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
         return mTextHelper.getCompoundDrawableTintList();
     }
 
@@ -793,10 +783,9 @@
      * @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+    public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
         return mTextHelper.getCompoundDrawableTintMode();
     }
 
@@ -815,7 +804,7 @@
      */
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
         mTextHelper.setCompoundDrawableTintMode(tintMode);
         mTextHelper.applyCompoundDrawablesTints();
     }
@@ -846,10 +835,9 @@
     }
 
     @Override
-    @Nullable
     // Code inspection reveals that the superclass method can return null.
     @SuppressWarnings("InvalidNullabilityOverride")
-    public Typeface getTypeface() {
+    public @Nullable Typeface getTypeface() {
         return mOriginalTypeface;
     }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java
index cd09c92..512724c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java
@@ -36,8 +36,6 @@
 import android.util.TypedValue;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.VisibleForTesting;
@@ -45,6 +43,9 @@
 import androidx.core.view.ViewCompat;
 import androidx.core.widget.TextViewCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -96,8 +97,7 @@
     private boolean mHasPresetAutoSizeValues = false;
     private TextPaint mTempTextPaint;
 
-    @NonNull
-    private final TextView mTextView;
+    private final @NonNull TextView mTextView;
     private final Context mContext;
 
     private final Impl mImpl;
@@ -357,7 +357,7 @@
      *
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[] presetSizes, int unit)
+    void setAutoSizeTextTypeUniformWithPresetSizes(int @NonNull [] presetSizes, int unit)
             throws IllegalArgumentException {
         if (supportsAutoSizeText()) {
             final int presetSizesLength = presetSizes.length;
@@ -711,10 +711,9 @@
     }
 
     @VisibleForTesting
-    @NonNull
-    StaticLayout createLayout(
+    @NonNull StaticLayout createLayout(
             @NonNull CharSequence text,
-            @NonNull Layout.Alignment alignment,
+            Layout.@NonNull Alignment alignment,
             int availableWidth,
             int maxLines
     ) {
@@ -773,7 +772,7 @@
     // This is marked package-protected so that it doesn't require a synthetic accessor
     // when being used from the Impl inner classes
     static <T> T invokeAndReturnWithDefault(@NonNull Object object,
-            @NonNull final String methodName, @NonNull final T defaultValue) {
+            final @NonNull String methodName, final @NonNull T defaultValue) {
         T result = null;
         boolean exceptionThrown = false;
 
@@ -793,8 +792,7 @@
         return result;
     }
 
-    @Nullable
-    private static Method getTextViewMethod(@NonNull final String methodName) {
+    private static @Nullable Method getTextViewMethod(final @NonNull String methodName) {
         try {
             Method method = sTextViewMethodByNameCache.get(methodName);
             if (method == null) {
@@ -838,10 +836,9 @@
             // This class is not instantiable.
         }
 
-        @NonNull
-        static StaticLayout createStaticLayoutForMeasuring(
+        static @NonNull StaticLayout createStaticLayoutForMeasuring(
                 @NonNull CharSequence text,
-                @NonNull Layout.Alignment alignment,
+                Layout.@NonNull Alignment alignment,
                 int availableWidth,
                 int maxLines,
                 @NonNull TextView textView,
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatToggleButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatToggleButton.java
index a55a8b2..bd591b9 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatToggleButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatToggleButton.java
@@ -28,14 +28,15 @@
 import android.widget.ToggleButton;
 
 import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.core.view.TintableBackgroundView;
 import androidx.core.view.ViewCompat;
 import androidx.core.widget.TintableCompoundDrawablesView;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * A {@link ToggleButton} which supports compatible features on older versions of the platform,
  * including:
@@ -119,8 +120,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public ColorStateList getSupportBackgroundTintList() {
+    public @Nullable ColorStateList getSupportBackgroundTintList() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintList() : null;
     }
@@ -132,7 +132,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportBackgroundTintMode(PorterDuff.@Nullable Mode tintMode) {
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -145,8 +145,7 @@
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
-    @Nullable
-    public PorterDuff.Mode getSupportBackgroundTintMode() {
+    public PorterDuff.@Nullable Mode getSupportBackgroundTintMode() {
         return mBackgroundTintHelper != null
                 ? mBackgroundTintHelper.getSupportBackgroundTintMode() : null;
     }
@@ -163,7 +162,7 @@
     }
 
     @Override
-    public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+    public void setFilters(@SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
         super.setFilters(getEmojiTextViewHelper().getFilters(filters));
     }
 
@@ -171,8 +170,7 @@
     /**
      * This may be called from super constructors.
      */
-    @NonNull
-    private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+    private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
         //noinspection ConstantConditions
         if (mAppCompatEmojiTextHelper == null) {
             mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
@@ -223,10 +221,9 @@
      * @see #setSupportCompoundDrawablesTintList(ColorStateList)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public ColorStateList getSupportCompoundDrawablesTintList() {
+    public @Nullable ColorStateList getSupportCompoundDrawablesTintList() {
         return mTextHelper.getCompoundDrawableTintList();
     }
 
@@ -264,10 +261,9 @@
      * @see #setSupportCompoundDrawablesTintMode(PorterDuff.Mode)
      *
      */
-    @Nullable
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public PorterDuff.Mode getSupportCompoundDrawablesTintMode() {
+    public PorterDuff.@Nullable Mode getSupportCompoundDrawablesTintMode() {
         return mTextHelper.getCompoundDrawableTintMode();
     }
 
@@ -286,7 +282,7 @@
      */
     @Override
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public void setSupportCompoundDrawablesTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setSupportCompoundDrawablesTintMode(PorterDuff.@Nullable Mode tintMode) {
         mTextHelper.setCompoundDrawableTintMode(tintMode);
         mTextHelper.applyCompoundDrawablesTints();
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ButtonBarLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ButtonBarLayout.java
index d0fb325..37b5457 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ButtonBarLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ButtonBarLayout.java
@@ -24,12 +24,13 @@
 import android.view.View;
 import android.widget.LinearLayout;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.core.view.ViewCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * An extension of LinearLayout that automatically switches to vertical
  * orientation when it can't fit its child views horizontally.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java
index 6dda3d0..f1f6604 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java
@@ -29,10 +29,11 @@
 import android.util.TypedValue;
 import android.widget.FrameLayout;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  */
 @RestrictTo(LIBRARY)
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DialogTitle.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DialogTitle.java
index 0e43cf1..f32b45d 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DialogTitle.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DialogTitle.java
@@ -24,11 +24,12 @@
 import android.util.AttributeSet;
 import android.util.TypedValue;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Used by dialogs to change the font size and number of lines to try to fit
  * the text to the available space.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java
index 89472db..b2124e5 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java
@@ -32,7 +32,6 @@
 import android.widget.ListAdapter;
 import android.widget.ListView;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 import androidx.appcompat.R;
 import androidx.appcompat.graphics.drawable.DrawableWrapperCompat;
@@ -40,6 +39,8 @@
 import androidx.core.view.ViewPropertyAnimatorCompat;
 import androidx.core.widget.ListViewAutoScrollHelper;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java
index 5a3c3d6..aecaf58 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java
@@ -23,10 +23,11 @@
 import android.util.AttributeSet;
 import android.widget.FrameLayout;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  */
 @RestrictTo(LIBRARY_GROUP_PREFIX)
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java
index 8aec6e9..ee18239 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java
@@ -23,10 +23,11 @@
 import android.util.AttributeSet;
 import android.widget.LinearLayout;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  */
 @RestrictTo(LIBRARY_GROUP_PREFIX)
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
index c6f23eb..1356f48 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
@@ -32,14 +32,15 @@
 
 import androidx.annotation.GravityInt;
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.core.view.GravityCompat;
 import androidx.core.view.ViewCompat;
 import androidx.resourceinspection.annotation.Attribute;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java
index ca8c609..3afa057 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java
@@ -45,8 +45,6 @@
 import android.widget.PopupWindow;
 
 import androidx.annotation.AttrRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StyleRes;
@@ -54,6 +52,9 @@
 import androidx.appcompat.view.menu.ShowableListMenu;
 import androidx.core.widget.PopupWindowCompat;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.reflect.Method;
 
 /**
@@ -521,8 +522,7 @@
      * @return anchor-relative bounds, or @{@code null} if not set
      * @see #setEpicenterBounds(Rect)
      */
-    @Nullable
-    public Rect getEpicenterBounds() {
+    public @Nullable Rect getEpicenterBounds() {
         return mEpicenterBounds != null ? new Rect(mEpicenterBounds) : null;
     }
 
@@ -613,7 +613,7 @@
      *
      * @see ListView#setOnItemClickListener(AdapterView.OnItemClickListener)
      */
-    public void setOnItemClickListener(@Nullable AdapterView.OnItemClickListener clickListener) {
+    public void setOnItemClickListener(AdapterView.@Nullable OnItemClickListener clickListener) {
         mItemClickListener = clickListener;
     }
 
@@ -779,7 +779,7 @@
      *
      * @param listener Listener that will be notified when the popup is dismissed.
      */
-    public void setOnDismissListener(@Nullable PopupWindow.OnDismissListener listener) {
+    public void setOnDismissListener(PopupWindow.@Nullable OnDismissListener listener) {
         mPopup.setOnDismissListener(listener);
     }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuItemHoverListener.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuItemHoverListener.java
index 262e575..fd8ca9f 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuItemHoverListener.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuItemHoverListener.java
@@ -20,10 +20,11 @@
 
 import android.view.MenuItem;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.view.menu.MenuBuilder;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * An interface notified when a menu item is hovered. Useful for cases when hover should trigger
  * some behavior at a higher level, like managing the opening and closing of submenus.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuPopupWindow.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuPopupWindow.java
index 44c6c66..1ceaf64 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuPopupWindow.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuPopupWindow.java
@@ -33,14 +33,15 @@
 import android.widget.ListAdapter;
 import android.widget.PopupWindow;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.view.menu.ListMenuItemView;
 import androidx.appcompat.view.menu.MenuAdapter;
 import androidx.appcompat.view.menu.MenuBuilder;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.reflect.Method;
 
 /**
@@ -74,9 +75,8 @@
         super(context, attrs, defStyleAttr, defStyleRes);
     }
 
-    @NonNull
     @Override
-    DropDownListView createDropDownListView(Context context, boolean hijackFocus) {
+    @NonNull DropDownListView createDropDownListView(Context context, boolean hijackFocus) {
         MenuDropDownListView view = new MenuDropDownListView(context, hijackFocus);
         view.setHoverListener(this);
         return view;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/PopupMenu.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/PopupMenu.java
index b8cb0d8..853440e 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/PopupMenu.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/PopupMenu.java
@@ -29,8 +29,6 @@
 
 import androidx.annotation.AttrRes;
 import androidx.annotation.MenuRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StyleRes;
 import androidx.appcompat.R;
@@ -39,6 +37,9 @@
 import androidx.appcompat.view.menu.MenuPopupHelper;
 import androidx.appcompat.view.menu.ShowableListMenu;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Static library support version of the framework's {@link android.widget.PopupMenu}.
  * Used to write apps that run on platforms prior to Android 3.0.  When running
@@ -169,8 +170,7 @@
      *
      * @return a touch listener that controls drag-to-open behavior
      */
-    @NonNull
-    public View.OnTouchListener getDragToOpenListener() {
+    public View.@NonNull OnTouchListener getDragToOpenListener() {
         if (mDragListener == null) {
             mDragListener = new ForwardingListener(mAnchor) {
                 @Override
@@ -204,8 +204,7 @@
      * @see #show()
      * @see #getMenuInflater()
      */
-    @NonNull
-    public Menu getMenu() {
+    public @NonNull Menu getMenu() {
         return mMenu;
     }
 
@@ -214,8 +213,7 @@
      *         from XML into the menu returned by {@link #getMenu()}
      * @see #getMenu()
      */
-    @NonNull
-    public MenuInflater getMenuInflater() {
+    public @NonNull MenuInflater getMenuInflater() {
         return new SupportMenuInflater(mContext);
     }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java
index 7197b4b..db9e7a5 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java
@@ -42,13 +42,14 @@
 import android.widget.Spinner;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.view.ActionBarPolicy;
 import androidx.core.view.GravityCompat;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * This widget implements the dynamic action bar tab behavior that can change across different
  * configurations or circumstances.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
index 0cce612..aef3570 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
@@ -72,8 +72,6 @@
 import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
@@ -84,6 +82,9 @@
 import androidx.customview.view.AbsSavedState;
 import androidx.resourceinspection.annotation.Attribute;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.reflect.Method;
 import java.util.WeakHashMap;
 
@@ -620,8 +621,7 @@
      * {@link R.attr#queryHint}
      */
     @Attribute("androidx.appcompat:queryHint")
-    @Nullable
-    public CharSequence getQueryHint() {
+    public @Nullable CharSequence getQueryHint() {
         final CharSequence hint;
         if (mQueryHint != null) {
             hint = mQueryHint;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java
index 661dfb2..b591814b 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java
@@ -49,8 +49,6 @@
 import android.widget.TextView;
 
 import androidx.annotation.FloatRange;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 import androidx.appcompat.content.res.AppCompatResources;
 import androidx.appcompat.text.AllCapsTransformationMethod;
@@ -60,6 +58,9 @@
 import androidx.emoji2.text.EmojiCompat;
 import androidx.resourceinspection.annotation.Attribute;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.ref.Reference;
 import java.lang.ref.WeakReference;
 
@@ -195,14 +196,11 @@
     private ColorStateList mTextColors;
     private Layout mOnLayout;
     private Layout mOffLayout;
-    @Nullable
-    private TransformationMethod mSwitchTransformationMethod;
+    private @Nullable TransformationMethod mSwitchTransformationMethod;
     ObjectAnimator mPositionAnimator;
     private final AppCompatTextHelper mTextHelper;
-    @NonNull
-    private AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
-    @Nullable
-    private EmojiCompatInitCallback mEmojiCompatInitCallback;
+    private @NonNull AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
+    private @Nullable EmojiCompatInitCallback mEmojiCompatInitCallback;
 
     @SuppressWarnings("hiding")
     private final Rect mTempRect = new Rect();
@@ -582,8 +580,7 @@
      * @see android.R.attr#trackTint
      */
     @Attribute("androidx.appcompat:trackTint")
-    @Nullable
-    public ColorStateList getTrackTintList() {
+    public @Nullable ColorStateList getTrackTintList() {
         return mTrackTintList;
     }
 
@@ -598,7 +595,7 @@
      * @see #getTrackTintMode()
      * @see android.R.attr#trackTintMode
      */
-    public void setTrackTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setTrackTintMode(PorterDuff.@Nullable Mode tintMode) {
         mTrackTintMode = tintMode;
         mHasTrackTintMode = true;
 
@@ -613,8 +610,7 @@
      * @see android.R.attr#trackTintMode
      */
     @Attribute("androidx.appcompat:trackTintMode")
-    @Nullable
-    public PorterDuff.Mode getTrackTintMode() {
+    public PorterDuff.@Nullable Mode getTrackTintMode() {
         return mTrackTintMode;
     }
 
@@ -710,8 +706,7 @@
      * @see android.R.attr#thumbTint
      */
     @Attribute("androidx.appcompat:thumbTint")
-    @Nullable
-    public ColorStateList getThumbTintList() {
+    public @Nullable ColorStateList getThumbTintList() {
         return mThumbTintList;
     }
 
@@ -727,7 +722,7 @@
      * @see android.R.attr#thumbTintMode
      * @see Drawable#setTintMode(PorterDuff.Mode)
      */
-    public void setThumbTintMode(@Nullable PorterDuff.Mode tintMode) {
+    public void setThumbTintMode(PorterDuff.@Nullable Mode tintMode) {
         mThumbTintMode = tintMode;
         mHasThumbTintMode = true;
 
@@ -742,8 +737,7 @@
      * @see android.R.attr#thumbTintMode
      */
     @Attribute("androidx.appcompat:thumbTintMode")
-    @Nullable
-    public PorterDuff.Mode getThumbTintMode() {
+    public PorterDuff.@Nullable Mode getThumbTintMode() {
         return mThumbTintMode;
     }
 
@@ -868,8 +862,7 @@
         }
     }
 
-    @Nullable
-    private CharSequence doTransformForOnOffText(@Nullable CharSequence onOffText) {
+    private @Nullable CharSequence doTransformForOnOffText(@Nullable CharSequence onOffText) {
         TransformationMethod transformationMethod =
                 getEmojiTextViewHelper().wrapTransformationMethod(mSwitchTransformationMethod);
         return ((transformationMethod != null)
@@ -1542,14 +1535,13 @@
      */
     @Override
     public void setCustomSelectionActionModeCallback(
-            @Nullable ActionMode.Callback actionModeCallback) {
+            ActionMode.@Nullable Callback actionModeCallback) {
         super.setCustomSelectionActionModeCallback(
                 TextViewCompat.wrapCustomSelectionActionModeCallback(this, actionModeCallback));
     }
 
     @Override
-    @Nullable
-    public ActionMode.Callback getCustomSelectionActionModeCallback() {
+    public ActionMode.@Nullable Callback getCustomSelectionActionModeCallback() {
         return TextViewCompat.unwrapCustomSelectionActionModeCallback(
                 super.getCustomSelectionActionModeCallback());
     }
@@ -1597,15 +1589,14 @@
     }
 
     @Override
-    public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+    public void setFilters(@SuppressWarnings("ArrayReturn") InputFilter @NonNull [] filters) {
         super.setFilters(getEmojiTextViewHelper().getFilters(filters));
     }
 
     /**
      * This may be called from super constructors.
      */
-    @NonNull
-    private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+    private @NonNull AppCompatEmojiTextHelper getEmojiTextViewHelper() {
         //noinspection ConstantConditions
         if (mAppCompatEmojiTextHelper == null) {
             mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemeUtils.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemeUtils.java
index 1d955be..024172d 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemeUtils.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemeUtils.java
@@ -25,12 +25,13 @@
 import android.util.TypedValue;
 import android.view.View;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.core.graphics.ColorUtils;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  */
 @RestrictTo(LIBRARY)
@@ -58,8 +59,8 @@
      * @param disabledTextColor Disabled text color.
      * @return Color state list.
      */
-    @NonNull
-    public static ColorStateList createDisabledStateList(int textColor, int disabledTextColor) {
+    public static @NonNull ColorStateList createDisabledStateList(int textColor,
+            int disabledTextColor) {
         // Now create a new ColorStateList with the default color, and the new disabled
         // color
         final int[][] states = new int[2][];
@@ -103,8 +104,8 @@
      * @param attr Theme attribute for resolving color state list.
      * @return Resolved color state list.
      */
-    @Nullable
-    public static ColorStateList getThemeAttrColorStateList(@NonNull Context context, int attr) {
+    public static @Nullable ColorStateList getThemeAttrColorStateList(@NonNull Context context,
+            int attr) {
         TEMP_ARRAY[0] = attr;
         TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, null, TEMP_ARRAY);
         try {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java
index 77e9dae..0803510 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java
@@ -25,10 +25,11 @@
 import android.view.ViewGroup;
 import android.widget.SpinnerAdapter;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.view.ContextThemeWrapper;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * An extension of SpinnerAdapter that is capable of inflating drop-down views
  * against a different theme than normal views.
@@ -49,7 +50,7 @@
      *              {@code null} to use the default theme
      * @see SpinnerAdapter#getDropDownView(int, View, ViewGroup)
      */
-    void setDropDownViewTheme(@Nullable Resources.Theme theme);
+    void setDropDownViewTheme(Resources.@Nullable Theme theme);
 
     /**
      * Returns the value previously set by a call to
@@ -58,8 +59,7 @@
      * @return the {@link Resources.Theme} against which drop-down views are
      *         inflated, or {@code null} if one has not been explicitly set
      */
-    @Nullable
-    Resources.Theme getDropDownViewTheme();
+    Resources.@Nullable Theme getDropDownViewTheme();
 
     /**
      * A helper class which allows easy integration of {@link ThemedSpinnerAdapter} into existing
@@ -120,7 +120,7 @@
          * @param theme the theme passed in to
          *              {@link ThemedSpinnerAdapter#setDropDownViewTheme(Theme)}
          */
-        public void setDropDownViewTheme(@Nullable Resources.Theme theme) {
+        public void setDropDownViewTheme(Resources.@Nullable Theme theme) {
             if (theme == null) {
                 mDropDownInflater = null;
             } else if (theme.equals(mContext.getTheme())) {
@@ -135,8 +135,7 @@
          * Should be called from your adapter's {@link ThemedSpinnerAdapter#getDropDownViewTheme()},
          * returning the value returned from this method.
          */
-        @Nullable
-        public Resources.Theme getDropDownViewTheme() {
+        public Resources.@Nullable Theme getDropDownViewTheme() {
             return mDropDownInflater == null ? null : mDropDownInflater.getContext().getTheme();
         }
 
@@ -147,8 +146,7 @@
          * <p>The instance returned will have a correct theme, meaning that any inflated views
          * will be created with the same theme.</p>
          */
-        @NonNull
-        public LayoutInflater getDropDownViewInflater() {
+        public @NonNull LayoutInflater getDropDownViewInflater() {
             return mDropDownInflater != null ? mDropDownInflater : mInflater;
         }
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TintTypedArray.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TintTypedArray.java
index a9db85c..6541871 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TintTypedArray.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TintTypedArray.java
@@ -28,13 +28,14 @@
 import android.util.AttributeSet;
 import android.util.TypedValue;
 
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StyleableRes;
 import androidx.appcompat.content.res.AppCompatResources;
 import androidx.core.content.res.ResourcesCompat;
 
+import org.jspecify.annotations.Nullable;
+
 /**
  * A class that wraps a {@link TypedArray} and provides the same public API
  * surface. The purpose of this class is so that we can intercept calls to new APIs.
@@ -112,9 +113,8 @@
      * @throws UnsupportedOperationException if the attribute is defined but is
      *         not a font resource.
      */
-    @Nullable
-    public Typeface getFont(@StyleableRes int index, int style,
-            @Nullable ResourcesCompat.FontCallback fontCallback) {
+    public @Nullable Typeface getFont(@StyleableRes int index, int style,
+            ResourcesCompat.@Nullable FontCallback fontCallback) {
         final int resourceId = mWrapped.getResourceId(index, 0);
         if (resourceId == 0) {
             return null;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
index 349f778..87b8d12 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
@@ -48,8 +48,6 @@
 import androidx.annotation.DrawableRes;
 import androidx.annotation.MainThread;
 import androidx.annotation.MenuRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StringRes;
@@ -75,6 +73,9 @@
 import androidx.lifecycle.LifecycleOwner;
 import androidx.resourceinspection.annotation.Attribute;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -981,8 +982,7 @@
      * {@link androidx.appcompat.R.attr#navigationContentDescription}
      */
     @Attribute("androidx.appcompat:navigationContentDescription")
-    @Nullable
-    public CharSequence getNavigationContentDescription() {
+    public @Nullable CharSequence getNavigationContentDescription() {
         return mNavButtonView != null ? mNavButtonView.getContentDescription() : null;
     }
 
@@ -1075,8 +1075,7 @@
      * {@link androidx.appcompat.R.attr#navigationIcon}
      */
     @Attribute("androidx.appcompat:navigationIcon")
-    @Nullable
-    public Drawable getNavigationIcon() {
+    public @Nullable Drawable getNavigationIcon() {
         return mNavButtonView != null ? mNavButtonView.getDrawable() : null;
     }
 
@@ -1104,8 +1103,7 @@
      * {@link androidx.appcompat.R.attr#collapseContentDescription}
      */
     @Attribute("androidx.appcompat:collapseContentDescription")
-    @Nullable
-    public CharSequence getCollapseContentDescription() {
+    public @Nullable CharSequence getCollapseContentDescription() {
         return mCollapseButtonView != null ? mCollapseButtonView.getContentDescription() : null;
     }
 
@@ -1150,8 +1148,7 @@
      * {@link androidx.appcompat.R.attr#collapseIcon}
      */
     @Attribute("androidx.appcompat:collapseIcon")
-    @Nullable
-    public Drawable getCollapseIcon() {
+    public @Nullable Drawable getCollapseIcon() {
         return mCollapseButtonView != null ? mCollapseButtonView.getDrawable() : null;
     }
 
@@ -1218,8 +1215,7 @@
      *
      * @return The overflow icon drawable
      */
-    @Nullable
-    public Drawable getOverflowIcon() {
+    public @Nullable Drawable getOverflowIcon() {
         ensureMenu();
         return mMenuView.getOverflowIcon();
     }
@@ -1604,8 +1600,7 @@
      *
      */
     @VisibleForTesting
-    @Nullable
-    View getNavButtonView() {
+    @Nullable View getNavButtonView() {
         return mNavButtonView;
     }
 
@@ -2414,16 +2409,14 @@
     /**
      */
     @VisibleForTesting
-    @Nullable
-    final TextView getTitleTextView() {
+    final @Nullable TextView getTitleTextView() {
         return mTitleTextView;
     }
 
     /**
      */
     @VisibleForTesting
-    @Nullable
-    final TextView getSubtitleTextView() {
+    final @Nullable TextView getSubtitleTextView() {
         return mSubtitleTextView;
     }
 
@@ -2475,7 +2468,7 @@
     @MainThread
     @SuppressLint("LambdaLast")
     public void addMenuProvider(@NonNull MenuProvider provider, @NonNull LifecycleOwner owner,
-            @NonNull Lifecycle.State state) {
+            Lifecycle.@NonNull State state) {
         mMenuHostHelper.addMenuProvider(provider, owner, state);
     }
 
@@ -2810,13 +2803,11 @@
             dispatcher.unregisterOnBackInvokedCallback((OnBackInvokedCallback) callbackObj);
         }
 
-        @Nullable
-        static OnBackInvokedDispatcher findOnBackInvokedDispatcher(@NonNull View view) {
+        static @Nullable OnBackInvokedDispatcher findOnBackInvokedDispatcher(@NonNull View view) {
             return view.findOnBackInvokedDispatcher();
         }
 
-        @NonNull
-        static OnBackInvokedCallback newOnBackInvokedCallback(@NonNull Runnable action) {
+        static @NonNull OnBackInvokedCallback newOnBackInvokedCallback(@NonNull Runnable action) {
             return action::run;
         }
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipCompat.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipCompat.java
index 3a84584..3f9cabe 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipCompat.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipCompat.java
@@ -19,10 +19,11 @@
 import android.os.Build;
 import android.view.View;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Helper class used to emulate the behavior of {@link View#setTooltipText(CharSequence)} prior
  * to API level 26.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipPopup.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipPopup.java
index fc05b4b..39c39d9 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipPopup.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipPopup.java
@@ -33,10 +33,11 @@
 import android.view.WindowManager;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * A popup window displaying a text message aligned to a specified view.
  *
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewStubCompat.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewStubCompat.java
index 5691c63..290efdc 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewStubCompat.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewStubCompat.java
@@ -28,11 +28,12 @@
 import android.view.ViewGroup;
 import android.view.ViewParent;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.ref.WeakReference;
 
 /**
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewUtils.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewUtils.java
index 2369324..e678cab 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewUtils.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewUtils.java
@@ -28,10 +28,11 @@
 import android.view.WindowInsets;
 
 import androidx.annotation.ChecksSdkIntAtLeast;
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/WithHint.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/WithHint.java
index b5d2c34..12a1a86 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/WithHint.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/WithHint.java
@@ -18,9 +18,10 @@
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
 
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.Nullable;
+
 /**
  */
 @RestrictTo(LIBRARY_GROUP_PREFIX)
@@ -30,6 +31,5 @@
      *
      * @return the hint, or null if there isn't one set, or the hint is not enabled.
      */
-    @Nullable
-    CharSequence getHint();
+    @Nullable CharSequence getHint();
 }
diff --git a/appcompat/integration-tests/receive-content-testapp/build.gradle b/appcompat/integration-tests/receive-content-testapp/build.gradle
index 3bb6c17..342bb9f 100644
--- a/appcompat/integration-tests/receive-content-testapp/build.gradle
+++ b/appcompat/integration-tests/receive-content-testapp/build.gradle
@@ -25,6 +25,7 @@
 }
 
 dependencies {
+    api(libs.jspecify)
     api("androidx.annotation:annotation:1.8.1")
     implementation(project(":appcompat:appcompat"))
     implementation(libs.constraintLayout)
diff --git a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRecyclerViewAdapter.java b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRecyclerViewAdapter.java
index fcbf576..cf0f536 100644
--- a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRecyclerViewAdapter.java
+++ b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRecyclerViewAdapter.java
@@ -20,10 +20,11 @@
 import android.view.LayoutInflater;
 import android.view.ViewGroup;
 
-import androidx.annotation.NonNull;
 import androidx.appcompat.widget.AppCompatImageView;
 import androidx.recyclerview.widget.RecyclerView;
 
+import org.jspecify.annotations.NonNull;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -58,9 +59,8 @@
         return mAttachments.size();
     }
 
-    @NonNull
     @Override
-    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+    public @NonNull MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         AppCompatImageView view = (AppCompatImageView) LayoutInflater.from(parent.getContext())
                 .inflate(R.layout.attachment, parent, false);
         return new MyViewHolder(view);
diff --git a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRepo.java b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRepo.java
index 6c53dfe..02bcd00 100644
--- a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRepo.java
+++ b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/AttachmentsRepo.java
@@ -22,12 +22,13 @@
 import android.util.Log;
 import android.webkit.MimeTypeMap;
 
-import androidx.annotation.NonNull;
 import androidx.core.content.FileProvider;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.io.ByteStreams;
 
+import org.jspecify.annotations.NonNull;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -57,8 +58,7 @@
      * Reads the content at the given URI and writes it to private storage. Then returns a content
      * URI referencing the newly written file.
      */
-    @NonNull
-    public Uri write(@NonNull Uri uri) {
+    public @NonNull Uri write(@NonNull Uri uri) {
         ContentResolver contentResolver = mContext.getContentResolver();
         String mimeType = contentResolver.getType(uri);
         String ext = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType);
@@ -91,8 +91,7 @@
         }
     }
 
-    @NonNull
-    public ImmutableList<Uri> getAllUris() {
+    public @NonNull ImmutableList<Uri> getAllUris() {
         File[] files = mAttachmentsDir.listFiles();
         if (files == null || files.length == 0) {
             return ImmutableList.of();
@@ -104,8 +103,7 @@
         return uris.build();
     }
 
-    @NonNull
-    private Uri getUriForFile(@NonNull File file) {
+    private @NonNull Uri getUriForFile(@NonNull File file) {
         return FileProvider.getUriForFile(mContext, FILE_PROVIDER_AUTHORITY, file);
     }
 }
diff --git a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MainActivity.java b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MainActivity.java
index 408b409..975f5f5 100644
--- a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MainActivity.java
+++ b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MainActivity.java
@@ -23,8 +23,6 @@
 import android.view.MenuInflater;
 import android.view.MenuItem;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.appcompat.widget.AppCompatEditText;
 import androidx.appcompat.widget.LinearLayoutCompat;
@@ -37,6 +35,9 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /** Main activity for the app. */
 public class MainActivity extends AppCompatActivity {
     private AttachmentsRepo mAttachmentsRepo;
diff --git a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyExecutors.java b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyExecutors.java
index ed0f5e9..e33bc57 100644
--- a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyExecutors.java
+++ b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyExecutors.java
@@ -20,11 +20,11 @@
 import android.os.Looper;
 import android.util.Log;
 
-import androidx.annotation.NonNull;
-
 import com.google.common.util.concurrent.ListeningScheduledExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
 
+import org.jspecify.annotations.NonNull;
+
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 
@@ -42,13 +42,11 @@
                 }
             };
 
-    @NonNull
-    public static ListeningScheduledExecutorService bg() {
+    public static @NonNull ListeningScheduledExecutorService bg() {
         return BG;
     }
 
-    @NonNull
-    public static Executor main() {
+    public static @NonNull Executor main() {
         return MAIN_EXECUTOR;
     }
 }
diff --git a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyReceiver.java b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyReceiver.java
index fdff5b0..3509eb8 100644
--- a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyReceiver.java
+++ b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MyReceiver.java
@@ -27,8 +27,6 @@
 import android.view.View;
 import android.widget.Toast;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.core.view.ContentInfoCompat;
 import androidx.core.view.OnReceiveContentListener;
 
@@ -36,6 +34,9 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.io.FileNotFoundException;
 import java.util.ArrayList;
 import java.util.List;
@@ -56,9 +57,8 @@
         mAttachmentsRecyclerViewAdapter = attachmentsRecyclerViewAdapter;
     }
 
-    @Nullable
     @Override
-    public ContentInfoCompat onReceiveContent(@NonNull View view,
+    public @Nullable ContentInfoCompat onReceiveContent(@NonNull View view,
             @NonNull ContentInfoCompat payload) {
         // Split the incoming content into two groups: content URIs and everything else.
         // This way we can implement custom handling for URIs and delegate the rest.
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
index f3df03d..3d87ab6 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
@@ -11104,7 +11104,182 @@
     @Test
     @RequiresFlagsEnabled(Flags.FLAG_ENABLE_SCORABLE_PROPERTY)
     public void testRankWithScorableProperty_joinWithChildQuery() throws Exception {
-        // TODO(b/309826655): Implement this test once cl/696927163 is imported to AppSearch.
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(
+                Features.SCHEMA_SCORABLE_PROPERTY_CONFIG));
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(
+                Features.SEARCH_SPEC_ADVANCED_RANKING_EXPRESSION));
+        assumeTrue(mDb1.getFeatures()
+                .isFeatureSupported(Features.JOIN_SPEC_AND_QUALIFIED_ID));
+
+        AppSearchSchema personSchema = new AppSearchSchema.Builder("Person")
+                .addProperty(new StringPropertyConfig.Builder("name")
+                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                        .build())
+                .addProperty(new DoublePropertyConfig.Builder("income")
+                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+                        .setScoringEnabled(true)
+                        .build())
+                .addProperty(new BooleanPropertyConfig.Builder("isStarred")
+                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setScoringEnabled(true)
+                        .build())
+                .build();
+        AppSearchSchema callLogSchema = new AppSearchSchema.Builder("CallLog")
+                .addProperty(new StringPropertyConfig.Builder("personQualifiedId")
+                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setJoinableValueType(StringPropertyConfig.JOINABLE_VALUE_TYPE_QUALIFIED_ID)
+                        .build())
+                .addProperty(new DoublePropertyConfig.Builder("rfsScore")
+                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+                        .setScoringEnabled(true)
+                        .build())
+                .build();
+        AppSearchSchema smsLogSchema = new AppSearchSchema.Builder("SmsLog")
+                .addProperty(new StringPropertyConfig.Builder("personQualifiedId")
+                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                        .setJoinableValueType(StringPropertyConfig.JOINABLE_VALUE_TYPE_QUALIFIED_ID)
+                        .build())
+                .addProperty(new DoublePropertyConfig.Builder("rfsScore")
+                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+                        .setScoringEnabled(true)
+                        .build())
+                .build();
+        mDb1.setSchemaAsync(
+                new SetSchemaRequest.Builder()
+                        .addSchemas(personSchema, callLogSchema, smsLogSchema).build()).get();
+
+        // John will have two CallLog docs to join and one sms log to join.
+        GenericDocument personJohn = new GenericDocument.Builder<>(
+                "namespace", "johnId", "Person")
+                .setPropertyString("name", "John")
+                .setPropertyBoolean("isStarred", true)
+                .setPropertyDouble("income", 30)
+                .setScore(10)
+                .build();
+        // Kevin will have two CallLog docs to join and one sms log to join.
+        GenericDocument personKevin = new GenericDocument.Builder<>(
+                "namespace", "kevinId", "Person")
+                .setPropertyString("name", "Kevin")
+                .setPropertyBoolean("isStarred", false)
+                .setPropertyDouble("income", 40)
+                .setScore(20)
+                .build();
+        // Tim has no CallLog or SmsLog to join.
+        GenericDocument personTim = new GenericDocument.Builder<>("namespace", "timId", "Person")
+                .setPropertyString("name", "Tim")
+                .setPropertyDouble("income", 60)
+                .setPropertyBoolean("isStarred", true)
+                .setScore(50)
+                .build();
+
+        GenericDocument johnCallLog1 =
+                new GenericDocument.Builder<>(
+                        "namespace", "johnCallLog1", "CallLog")
+                        .setScore(5)
+                        .setPropertyDouble("rfsScore", 100, 200)
+                        .setPropertyString("personQualifiedId",
+                                DocumentIdUtil.createQualifiedId(mContext.getPackageName(),
+                                        DB_NAME_1, personJohn))
+                        .build();
+        GenericDocument johnCallLog2 =
+                new GenericDocument.Builder<>(
+                        "namespace", "johnCallLog2", "CallLog")
+                        .setScore(5)
+                        .setPropertyDouble("rfsScore", 300, 500)
+                        .setPropertyString("personQualifiedId",
+                                DocumentIdUtil.createQualifiedId(mContext.getPackageName(),
+                                        DB_NAME_1, personJohn))
+                        .build();
+        GenericDocument kevinCallLog1 =
+                new GenericDocument.Builder<>(
+                        "namespace", "kevinCallLog1", "CallLog")
+                        .setScore(5)
+                        .setPropertyDouble("rfsScore", 300, 400)
+                        .setPropertyString("personQualifiedId",
+                                DocumentIdUtil.createQualifiedId(mContext.getPackageName(),
+                                        DB_NAME_1, personKevin))
+                        .build();
+        GenericDocument kevinCallLog2 =
+                new GenericDocument.Builder<>(
+                        "namespace", "kevinCallLog2", "CallLog")
+                        .setScore(5)
+                        .setPropertyDouble("rfsScore", 500, 800)
+                        .setPropertyString("personQualifiedId",
+                                DocumentIdUtil.createQualifiedId(mContext.getPackageName(),
+                                        DB_NAME_1, personKevin))
+                        .build();
+        GenericDocument johnSmsLog1 =
+                new GenericDocument.Builder<>(
+                        "namespace", "johnSmsLog1", "SmsLog")
+                        .setScore(5)
+                        .setPropertyDouble("rfsScore", 1000, 2000)
+                        .setPropertyString("personQualifiedId",
+                                DocumentIdUtil.createQualifiedId(mContext.getPackageName(),
+                                        DB_NAME_1, personJohn))
+                        .build();
+        GenericDocument kevinSmsLog1 =
+                new GenericDocument.Builder<>(
+                        "namespace", "kevinSmsLog1", "SmsLog")
+                        .setScore(5)
+                        .setPropertyDouble("rfsScore",  2000, 3000)
+                        .setPropertyString("personQualifiedId",
+                                DocumentIdUtil.createQualifiedId(mContext.getPackageName(),
+                                        DB_NAME_1, personKevin))
+                        .build();
+
+        // Put all documents to AppSearch and verify its success.
+        AppSearchBatchResult<String, Void> result =
+                checkIsBatchResultSuccess(
+                        mDb1.putAsync(
+                                new PutDocumentsRequest.Builder()
+                                        .addGenericDocuments(
+                                                personTim, personJohn, personKevin,
+                                                kevinCallLog1, kevinCallLog2, kevinSmsLog1,
+                                                johnCallLog1, johnCallLog2, johnSmsLog1)
+                                        .build()));
+        assertThat(result.getSuccesses().size()).isEqualTo(9);
+        assertThat(result.getFailures()).isEmpty();
+
+        String childRankingStrategy =
+                "sum(getScorableProperty(\"CallLog\", \"rfsScore\")) + " +
+                        "sum(getScorableProperty(\"SmsLog\", \"rfsScore\"))";
+        double johnChildDocScore = 100 + 200 + 300 + 500 + 1000 + 2000;
+        double kevinChildDocScore = 300 + 400 + 500 + 800 + 2000 + 3000;
+        double timChildDocScore = 0;
+
+        SearchSpec childSearchSpec = new SearchSpec.Builder()
+                .setScorablePropertyRankingEnabled(true)
+                .setRankingStrategy(childRankingStrategy)
+                .build();
+        JoinSpec js = new JoinSpec.Builder("personQualifiedId")
+                .setNestedSearch("", childSearchSpec)
+                .build();
+        String parentRankingStrategy =
+                        "sum(getScorableProperty(\"Person\", \"income\")) + " +
+                        "20 * sum(getScorableProperty(\"Person\", \"isStarred\")) + " +
+                        "sum(this.childrenRankingSignals())";
+        SearchSpec parentSearchSpec = new SearchSpec.Builder()
+                .setScorablePropertyRankingEnabled(true)
+                .setJoinSpec(js)
+                .setRankingStrategy(parentRankingStrategy)
+                .addFilterSchemas("Person")
+                .build();
+        double johnExpectScore = /*income=*/30 + 20 * /*isStarred=*/1 + johnChildDocScore;
+        double kevinExpectScore = /*income=*/40 + 20 * /*isStarred=*/0 + kevinChildDocScore;
+        double timExpectScore = /*income=*/60 + 20 * /*isStarred=*/1 + timChildDocScore;
+
+        SearchResults searchResults =
+                mDb1.search("", parentSearchSpec);
+        List<SearchResult> results = retrieveAllSearchResults(searchResults);
+        assertThat(results).hasSize(3);
+        assertThat(results.get(0).getRankingSignal())
+                .isWithin(0.00001).of(kevinExpectScore);
+        assertThat(results.get(1).getRankingSignal())
+                .isWithin(0.00001).of(johnExpectScore);
+        assertThat(results.get(2).getRankingSignal())
+                .isWithin(0.00001).of(timExpectScore);
     }
 
     @Test
diff --git a/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle b/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle
index 37f331f..a5515aa 100644
--- a/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle
+++ b/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle
@@ -13,6 +13,7 @@
 }
 
 dependencies {
+    api(libs.jspecify)
     api("androidx.annotation:annotation:1.8.1")
     api("androidx.core:core:1.1.0")
     implementation(project(":appcompat:appcompat"))
diff --git a/asynclayoutinflater/asynclayoutinflater-appcompat/src/main/java/androidx/asynclayoutinflater/appcompat/AsyncAppCompatFactory.java b/asynclayoutinflater/asynclayoutinflater-appcompat/src/main/java/androidx/asynclayoutinflater/appcompat/AsyncAppCompatFactory.java
index 9455b93..405ce7e 100644
--- a/asynclayoutinflater/asynclayoutinflater-appcompat/src/main/java/androidx/asynclayoutinflater/appcompat/AsyncAppCompatFactory.java
+++ b/asynclayoutinflater/asynclayoutinflater-appcompat/src/main/java/androidx/asynclayoutinflater/appcompat/AsyncAppCompatFactory.java
@@ -21,13 +21,14 @@
 import android.util.Log;
 import android.view.View;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.R;
 import androidx.appcompat.app.AppCompatViewInflater;
 import androidx.appcompat.widget.VectorEnabledTintResources;
 import androidx.asynclayoutinflater.view.AsyncLayoutFactory;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Factory for inflating views in AppCompat activity. This is used when Async inflater is created
  * with AppCompat context.
@@ -39,19 +40,17 @@
     /**
      * Creates view using {@link AppCompatViewInflater}.
      */
-    @Nullable
     @Override
-    public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context,
-            @NonNull AttributeSet attrs) {
+    public @Nullable View onCreateView(@Nullable View parent, @NonNull String name,
+            @NonNull Context context, @NonNull AttributeSet attrs) {
         return createView(parent, name, context, attrs);
     }
 
     /**
      * Creates view using {@link AppCompatViewInflater}.
      */
-    @Nullable
     @Override
-    public View onCreateView(@NonNull String name, @NonNull Context context,
+    public @Nullable View onCreateView(@NonNull String name, @NonNull Context context,
             @NonNull AttributeSet attrs) {
         return createView(/* parent= */ null, name, context, attrs);
     }
diff --git a/asynclayoutinflater/asynclayoutinflater/build.gradle b/asynclayoutinflater/asynclayoutinflater/build.gradle
index f0484b3..5c2b29d 100644
--- a/asynclayoutinflater/asynclayoutinflater/build.gradle
+++ b/asynclayoutinflater/asynclayoutinflater/build.gradle
@@ -13,6 +13,7 @@
 }
 
 dependencies {
+    api(libs.jspecify)
     api("androidx.annotation:annotation:1.8.1")
     api("androidx.core:core:1.1.0")
     androidTestImplementation(project(":appcompat:appcompat"))
diff --git a/asynclayoutinflater/asynclayoutinflater/src/androidTest/java/androidx/asynclayoutinflater/view/FailingAsyncView.java b/asynclayoutinflater/asynclayoutinflater/src/androidTest/java/androidx/asynclayoutinflater/view/FailingAsyncView.java
index 8cb3279..35cffd1 100644
--- a/asynclayoutinflater/asynclayoutinflater/src/androidTest/java/androidx/asynclayoutinflater/view/FailingAsyncView.java
+++ b/asynclayoutinflater/asynclayoutinflater/src/androidTest/java/androidx/asynclayoutinflater/view/FailingAsyncView.java
@@ -19,6 +19,7 @@
 import android.os.Looper;
 import android.util.AttributeSet;
 import android.widget.TextView;
+
 /**
  * A view that cannot be inflated on the bg thread because it creates a {@link Handler}.
  */
diff --git a/asynclayoutinflater/asynclayoutinflater/src/main/java/androidx/asynclayoutinflater/view/AsyncLayoutInflater.java b/asynclayoutinflater/asynclayoutinflater/src/main/java/androidx/asynclayoutinflater/view/AsyncLayoutInflater.java
index 8572b19..72281aa 100644
--- a/asynclayoutinflater/asynclayoutinflater/src/main/java/androidx/asynclayoutinflater/view/AsyncLayoutInflater.java
+++ b/asynclayoutinflater/asynclayoutinflater/src/main/java/androidx/asynclayoutinflater/view/AsyncLayoutInflater.java
@@ -27,11 +27,12 @@
 import android.view.ViewGroup;
 
 import androidx.annotation.LayoutRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.UiThread;
 import androidx.core.util.Pools.SynchronizedPool;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.Executor;
 
diff --git a/benchmark/benchmark-common/build.gradle b/benchmark/benchmark-common/build.gradle
index a6af5e3..0718f57 100644
--- a/benchmark/benchmark-common/build.gradle
+++ b/benchmark/benchmark-common/build.gradle
@@ -75,6 +75,7 @@
 }
 
 dependencies {
+    api(libs.jspecify)
     implementation(libs.kotlinStdlib)
     api("androidx.annotation:annotation:1.8.1")
     api("androidx.annotation:annotation-experimental:1.4.1")
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/ProfileSession.java b/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/ProfileSession.java
index 2e33e53..11fe2f0 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/ProfileSession.java
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/ProfileSession.java
@@ -21,11 +21,12 @@
 import android.system.Os;
 import android.system.OsConstants;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
@@ -247,8 +248,7 @@
         return file.canExecute();
     }
 
-    @Nullable
-    private String findSimpleperfInTempDir() {
+    private @Nullable String findSimpleperfInTempDir() {
         String path = "/data/local/tmp/simpleperf";
         File file = new File(path);
         if (!file.isFile()) {
@@ -408,8 +408,7 @@
         }
     }
 
-    @NonNull
-    private String readReply() {
+    private @NonNull String readReply() {
         // Read one byte at a time to stop at line break or EOF. BufferedReader will try to read
         // more than available and make us blocking, so don't use it.
         String s = "";
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/RecordOptions.java b/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/RecordOptions.java
index 4a23dba..e538e454f 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/RecordOptions.java
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/simpleperf/RecordOptions.java
@@ -18,11 +18,12 @@
 
 import android.system.Os;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
@@ -59,8 +60,7 @@
      * Set output filename. Default is perf-<month>-<day>-<hour>-<minute>-<second>.data.
      * The file will be generated under simpleperf_data/.
      */
-    @NonNull
-    public RecordOptions setOutputFilename(@NonNull String filename) {
+    public @NonNull RecordOptions setOutputFilename(@NonNull String filename) {
         mOutputFilename = filename;
         return this;
     }
@@ -68,8 +68,7 @@
     /**
      * Set event to record. Default is cpu-cycles. See `simpleperf list` for all available events.
      */
-    @NonNull
-    public RecordOptions setEvent(@NonNull String event) {
+    public @NonNull RecordOptions setEvent(@NonNull String event) {
         mEvent = event;
         return this;
     }
@@ -77,8 +76,7 @@
     /**
      * Set how many samples to generate each second running. Default is 4000.
      */
-    @NonNull
-    public RecordOptions setSampleFrequency(int freq) {
+    public @NonNull RecordOptions setSampleFrequency(int freq) {
         mFreq = freq;
         return this;
     }
@@ -87,8 +85,7 @@
      * Set record duration. The record stops after `durationInSecond` seconds. By default,
      * record stops only when stopRecording() is called.
      */
-    @NonNull
-    public RecordOptions setDuration(double durationInSecond) {
+    public @NonNull RecordOptions setDuration(double durationInSecond) {
         mDurationInSeconds = durationInSecond;
         return this;
     }
@@ -96,8 +93,7 @@
     /**
      * Record some threads in the app process. By default, record all threads in the process.
      */
-    @NonNull
-    public RecordOptions setSampleThreads(@NonNull List<Integer> threads) {
+    public @NonNull RecordOptions setSampleThreads(@NonNull List<Integer> threads) {
         mThreads.addAll(threads);
         return this;
     }
@@ -105,15 +101,13 @@
     /**
      * Record current thread in the app process. By default, record all threads in the process.
      */
-    @NonNull
-    public RecordOptions setSampleCurrentThread() {
+    public @NonNull RecordOptions setSampleCurrentThread() {
         return setSampleThreads(Collections.singletonList(Os.gettid()));
     }
     /**
      * Record dwarf based call graph. It is needed to get Java callstacks.
      */
-    @NonNull
-    public RecordOptions recordDwarfCallGraph() {
+    public @NonNull RecordOptions recordDwarfCallGraph() {
         mDwarfCallGraph = true;
         mFpCallGraph = false;
         return this;
@@ -123,8 +117,7 @@
      * Record frame pointer based call graph. It is suitable to get C++ callstacks on 64bit devices.
      */
     @SuppressWarnings("unused")
-    @NonNull
-    public RecordOptions recordFramePointerCallGraph() {
+    public @NonNull RecordOptions recordFramePointerCallGraph() {
         mFpCallGraph = true;
         mDwarfCallGraph = false;
         return this;
@@ -133,8 +126,7 @@
     /**
      * Trace context switch info to show where threads spend time off cpu.
      */
-    @NonNull
-    public RecordOptions traceOffCpu() {
+    public @NonNull RecordOptions traceOffCpu() {
         mTraceOffCpu = true;
         return this;
     }
@@ -142,8 +134,7 @@
     /**
      * Translate record options into arguments for `simpleperf record` cmd.
      */
-    @NonNull
-    public List<String> toRecordArgs() {
+    public @NonNull List<String> toRecordArgs() {
         ArrayList<String> args = new ArrayList<>();
 
         String filename = mOutputFilename;
@@ -192,18 +183,15 @@
         return time.format(formatter);
     }
 
-    @Nullable
-    private String mOutputFilename;
+    private @Nullable String mOutputFilename;
 
-    @NonNull
-    private String mEvent = "cpu-cycles";
+    private @NonNull String mEvent = "cpu-cycles";
 
     private int mFreq = 4000;
 
     private double mDurationInSeconds = 0.0;
 
-    @NonNull
-    private final ArrayList<Integer> mThreads = new ArrayList<>();
+    private final @NonNull ArrayList<Integer> mThreads = new ArrayList<>();
 
     private boolean mDwarfCallGraph = false;
 
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/ByteBufferUtil.java b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/ByteBufferUtil.java
index f968b6f..672a9dc 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/ByteBufferUtil.java
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/ByteBufferUtil.java
@@ -15,7 +15,7 @@
  */
 package androidx.benchmark.vmtrace;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -30,8 +30,8 @@
     private ByteBufferUtil() {
     }
 
-    @NonNull
-    public static ByteBuffer mapFile(@NonNull File f, long offset, @NonNull ByteOrder byteOrder)
+    public static @NonNull ByteBuffer mapFile(@NonNull File f, long offset,
+            @NonNull ByteOrder byteOrder)
             throws IOException {
         FileInputStream dataFile = new FileInputStream(f);
         try {
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/MethodInfo.java b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/MethodInfo.java
index edd3552..ba51ac8 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/MethodInfo.java
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/MethodInfo.java
@@ -16,7 +16,7 @@
 
 package androidx.benchmark.vmtrace;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 import java.util.Locale;
 
@@ -46,24 +46,21 @@
         this.srcLineNumber = srcLineNumber;
     }
 
-    @NonNull
-    public String getFullName() {
+    public @NonNull String getFullName() {
         if (mFullName == null) {
             mFullName = String.format(Locale.US, "%s.%s: %s", className, methodName, signature);
         }
         return mFullName;
     }
 
-    @NonNull
-    public String getShortName() {
+    public @NonNull String getShortName() {
         if (mShortName == null) {
             mShortName = String.format(Locale.US, "%s.%s", getUnqualifiedClassName(), methodName);
         }
         return mShortName;
     }
 
-    @NonNull
-    private String getUnqualifiedClassName() {
+    private @NonNull String getUnqualifiedClassName() {
         String cn = className;
         int i = cn.lastIndexOf('/');
         if (i > 0) {
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceHandler.java b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceHandler.java
index 55ebfa4..fdd35f8 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceHandler.java
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceHandler.java
@@ -15,7 +15,7 @@
  */
 package androidx.benchmark.vmtrace;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 /**
  * This interface used by {@link VmTraceParser}. {@link VmTraceParser} parses a trace file and
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceParser.java b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceParser.java
index f7c8a0b..3a7df15 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceParser.java
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/vmtrace/VmTraceParser.java
@@ -16,7 +16,7 @@
 
 package androidx.benchmark.vmtrace;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 import java.io.BufferedReader;
 import java.io.File;
diff --git a/benchmark/benchmark-macro/build.gradle b/benchmark/benchmark-macro/build.gradle
index 3b9fbf5..cb5aa1c 100644
--- a/benchmark/benchmark-macro/build.gradle
+++ b/benchmark/benchmark-macro/build.gradle
@@ -68,6 +68,7 @@
 }
 
 dependencies {
+    api(libs.jspecify)
     api(project(":benchmark:benchmark-common"))
     api(libs.junit)
     api(libs.kotlinStdlib)
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/JankCollectionHelper.java b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/JankCollectionHelper.java
index fff2766..b75342a 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/JankCollectionHelper.java
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/JankCollectionHelper.java
@@ -19,12 +19,13 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.uiautomator.UiDevice;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.io.IOException;
 import java.util.Collections;
 import java.util.HashMap;
@@ -170,8 +171,7 @@
             mMetricId = metricId;
         }
 
-        @Nullable
-        public Double parse(@NonNull String lines) {
+        public @Nullable Double parse(@NonNull String lines) {
             Matcher matcher = mPattern.matcher(lines);
             if (matcher.matches()) {
                 return Double.valueOf(matcher.group(mGroupIndex));
@@ -180,8 +180,7 @@
             }
         }
 
-        @NonNull
-        public String getMetricId() {
+        public @NonNull String getMetricId() {
             return mMetricId;
         }
     }
@@ -221,8 +220,7 @@
     }
 
     /** Collect the {@code gfxinfo} metrics for tracked processes (or all, if unspecified). */
-    @NonNull
-    public Map<String, Double> getMetrics() {
+    public @NonNull Map<String, Double> getMetrics() {
         Map<String, Double> result = new HashMap<>();
         if (mTrackedPackages.isEmpty()) {
             result.putAll(getGfxInfoMetrics());
@@ -258,7 +256,7 @@
     }
 
     /** Add a package or list of packages to be tracked. */
-    public void addTrackedPackages(@NonNull String... packages) {
+    public void addTrackedPackages(String @NonNull ... packages) {
         Collections.addAll(mTrackedPackages, packages);
     }
 
@@ -348,7 +346,7 @@
         return results;
     }
 
-    private String constructKey(@NonNull String ...tokens) {
+    private String constructKey(String @NonNull ...tokens) {
         return TextUtils.join("_", tokens);
     }
 
@@ -371,9 +369,8 @@
     }
 
     /** Returns the {@link UiDevice} under test. */
-    @NonNull
     @VisibleForTesting
-    protected UiDevice getDevice() {
+    protected @NonNull UiDevice getDevice() {
         if (mDevice == null) {
             mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
         }
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.android.kt
index c3ce4cc..fd710df 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.android.kt
@@ -25,18 +25,14 @@
 import android.view.ViewOutlineProvider
 import android.view.Window
 import android.view.WindowManager
-import androidx.activity.BackEventCompat
 import androidx.activity.ComponentDialog
-import androidx.activity.compose.PredictiveBackHandler
 import androidx.compose.foundation.layout.Box
-import androidx.compose.material3.LocalContentColor
 import androidx.compose.material3.isFlagSecureEnabled
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionContext
 import androidx.compose.runtime.DisposableEffect
 import androidx.compose.runtime.SideEffect
 import androidx.compose.runtime.getValue
-import androidx.compose.runtime.key
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCompositionContext
@@ -45,7 +41,6 @@
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.R
-import androidx.compose.ui.graphics.luminance
 import androidx.compose.ui.platform.AbstractComposeView
 import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.LocalLayoutDirection
@@ -67,7 +62,6 @@
 import androidx.savedstate.findViewTreeSavedStateRegistryOwner
 import androidx.savedstate.setViewTreeSavedStateRegistryOwner
 import java.util.UUID
-import kotlin.coroutines.cancellation.CancellationException
 
 /**
  * A dialog that is _always_ full screen and edge-to-edge. This is intended to be the underlying
@@ -86,12 +80,12 @@
  * if [DialogProperties.dismissOnBackPress] is true.
  */
 @Composable
-internal fun BasicEdgeToEdgeDialog(
+internal actual fun BasicEdgeToEdgeDialog(
     onDismissRequest: () -> Unit,
-    modifier: Modifier = Modifier,
-    properties: DialogProperties = DialogProperties(),
-    lightStatusBars: Boolean = LocalContentColor.current.luminance() < 0.5f,
-    lightNavigationBars: Boolean = LocalContentColor.current.luminance() < 0.5f,
+    modifier: Modifier,
+    properties: DialogProperties,
+    lightStatusBars: Boolean,
+    lightNavigationBars: Boolean,
     content: @Composable (PredictiveBackState) -> Unit,
 ) {
     val view = LocalView.current
@@ -326,87 +320,6 @@
     }
 }
 
-internal enum class SwipeEdge {
-    Left,
-    Right
-}
-
-/**
- * The state describing a one-shot back state, with use in a [PredictiveBackStateHandler].
- *
- * Because the back handler can only be used once, there are three states that [BackEventProgress]
- * can be in:
- * - [NotRunning]
- * - [InProgress], which can happen on API 34 and above if a predictive back is in progress.
- * - [Completed]
- */
-internal sealed interface BackEventProgress {
-    /** There is no predictive back ongoing, and the back has not been completed. */
-    object NotRunning : BackEventProgress
-
-    /** There is an ongoing predictive back animation, with the given [progress]. */
-    data class InProgress(
-        val touchX: Float,
-        val touchY: Float,
-        val progress: Float,
-        val swipeEdge: SwipeEdge,
-    ) : BackEventProgress
-
-    /** The back has completed. */
-    object Completed : BackEventProgress
-}
-
-@Composable
-internal fun rememberPredictiveBackState(): PredictiveBackState = remember {
-    PredictiveBackStateImpl()
-}
-
-internal sealed interface PredictiveBackState {
-    val value: BackEventProgress
-}
-
-private class PredictiveBackStateImpl : PredictiveBackState {
-    override var value: BackEventProgress by mutableStateOf(BackEventProgress.NotRunning)
-}
-
-@Composable
-internal fun PredictiveBackStateHandler(
-    state: PredictiveBackState,
-    enabled: Boolean = true,
-    onBack: () -> Unit,
-) {
-    // Safely update the current `onBack` lambda when a new one is provided
-    val currentOnBack by rememberUpdatedState(onBack)
-
-    key(state) {
-        state as PredictiveBackStateImpl
-        PredictiveBackHandler(
-            enabled = enabled && state.value !is BackEventProgress.Completed,
-        ) { progress ->
-            try {
-                progress.collect { backEvent ->
-                    state.value =
-                        BackEventProgress.InProgress(
-                            backEvent.touchX,
-                            backEvent.touchY,
-                            backEvent.progress,
-                            when (backEvent.swipeEdge) {
-                                BackEventCompat.EDGE_LEFT -> SwipeEdge.Left
-                                BackEventCompat.EDGE_RIGHT -> SwipeEdge.Right
-                                else -> error("Unknown swipe edge")
-                            },
-                        )
-                }
-                state.value = BackEventProgress.Completed
-                currentOnBack()
-            } catch (e: CancellationException) {
-                state.value = BackEventProgress.NotRunning
-                throw e
-            }
-        }
-    }
-}
-
 // Taken from AndroidPopup.android.kt
 internal fun SecureFlagPolicy.shouldApplySecureFlag(isSecureFlagSetOnParent: Boolean): Boolean {
     return when (this) {
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.kt
new file mode 100644
index 0000000..30f461f
--- /dev/null
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.kt
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.material3.internal
+
+import androidx.compose.material3.LocalContentColor
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.key
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberUpdatedState
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.luminance
+import androidx.compose.ui.window.DialogProperties
+import kotlinx.coroutines.CancellationException
+
+@Composable
+internal expect fun BasicEdgeToEdgeDialog(
+    onDismissRequest: () -> Unit,
+    modifier: Modifier = Modifier,
+    properties: DialogProperties = DialogProperties(),
+    lightStatusBars: Boolean = LocalContentColor.current.luminance() < 0.5f,
+    lightNavigationBars: Boolean = LocalContentColor.current.luminance() < 0.5f,
+    content: @Composable (PredictiveBackState) -> Unit,
+)
+
+internal sealed interface PredictiveBackState {
+    val value: BackEventProgress
+}
+
+/**
+ * The state describing a one-shot back state, with use in a [PredictiveBackStateHandler].
+ *
+ * Because the back handler can only be used once, there are three states that [BackEventProgress]
+ * can be in:
+ * - [NotRunning]
+ * - [InProgress], which can happen on API 34 and above if a predictive back is in progress.
+ * - [Completed]
+ */
+internal sealed interface BackEventProgress {
+    /** There is no predictive back ongoing, and the back has not been completed. */
+    object NotRunning : BackEventProgress
+
+    /** There is an ongoing predictive back animation, with the given [progress]. */
+    data class InProgress(
+        val touchX: Float,
+        val touchY: Float,
+        val progress: Float,
+        val swipeEdge: SwipeEdge,
+    ) : BackEventProgress
+
+    /** The back has completed. */
+    object Completed : BackEventProgress
+}
+
+internal enum class SwipeEdge {
+    Left,
+    Right
+}
+
+@Composable
+internal fun rememberPredictiveBackState(): PredictiveBackState = remember {
+    PredictiveBackStateImpl()
+}
+
+private class PredictiveBackStateImpl : PredictiveBackState {
+    override var value: BackEventProgress by mutableStateOf(BackEventProgress.NotRunning)
+}
+
+@Composable
+internal fun PredictiveBackStateHandler(
+    state: PredictiveBackState,
+    enabled: Boolean = true,
+    onBack: () -> Unit,
+) {
+    // Safely update the current `onBack` lambda when a new one is provided
+    val currentOnBack by rememberUpdatedState(onBack)
+
+    key(state) {
+        state as PredictiveBackStateImpl
+        PredictiveBackHandler(
+            enabled = enabled && state.value !is BackEventProgress.Completed,
+        ) { progress ->
+            try {
+                progress.collect { backEvent ->
+                    state.value =
+                        BackEventProgress.InProgress(
+                            backEvent.touchX,
+                            backEvent.touchY,
+                            backEvent.progress,
+                            when (backEvent.swipeEdge) {
+                                BackEventCompat.EDGE_LEFT -> SwipeEdge.Left
+                                BackEventCompat.EDGE_RIGHT -> SwipeEdge.Right
+                                else -> error("Unknown swipe edge")
+                            },
+                        )
+                }
+                state.value = BackEventProgress.Completed
+                currentOnBack()
+            } catch (e: CancellationException) {
+                state.value = BackEventProgress.NotRunning
+                throw e
+            }
+        }
+    }
+}
diff --git a/compose/material3/material3/src/commonStubsMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.commonStubs.kt b/compose/material3/material3/src/commonStubsMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.commonStubs.kt
new file mode 100644
index 0000000..b50e87e
--- /dev/null
+++ b/compose/material3/material3/src/commonStubsMain/kotlin/androidx/compose/material3/internal/BasicEdgeToEdgeDialog.commonStubs.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.material3.internal
+
+import androidx.compose.material3.implementedInJetBrainsFork
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.window.DialogProperties
+
+@Composable
+internal actual fun BasicEdgeToEdgeDialog(
+    onDismissRequest: () -> Unit,
+    modifier: Modifier,
+    properties: DialogProperties,
+    lightStatusBars: Boolean,
+    lightNavigationBars: Boolean,
+    content: @Composable (PredictiveBackState) -> Unit,
+): Unit = implementedInJetBrainsFork()
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/MovableContent.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/MovableContent.kt
index f142586..8dda6de 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/MovableContent.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/MovableContent.kt
@@ -34,8 +34,8 @@
  */
 @OptIn(InternalComposeApi::class)
 fun movableContentOf(content: @Composable () -> Unit): @Composable () -> Unit {
-    val movableContent = MovableContent<Unit>({ content() })
-    return { currentComposer.insertMovableContent(movableContent, Unit) }
+    val movableContent = MovableContent<Nothing?>({ content() })
+    return { currentComposer.insertMovableContent(movableContent, null) }
 }
 
 /**
@@ -103,10 +103,10 @@
     content: @Composable (P1, P2, P3) -> Unit
 ): @Composable (P1, P2, P3) -> Unit {
     val movableContent =
-        MovableContent<Pair<Pair<P1, P2>, P3>> {
-            content(it.first.first, it.first.second, it.second)
-        }
-    return { p1, p2, p3 -> currentComposer.insertMovableContent(movableContent, (p1 to p2) to p3) }
+        MovableContent<Triple<P1, P2, P3>> { content(it.first, it.second, it.third) }
+    return { p1, p2, p3 ->
+        currentComposer.insertMovableContent(movableContent, Triple(p1, p2, p3))
+    }
 }
 
 /**
@@ -130,11 +130,12 @@
     content: @Composable (P1, P2, P3, P4) -> Unit
 ): @Composable (P1, P2, P3, P4) -> Unit {
     val movableContent =
-        MovableContent<Pair<Pair<P1, P2>, Pair<P3, P4>>> {
-            content(it.first.first, it.first.second, it.second.first, it.second.second)
+        MovableContent<Array<Any?>> { (p1, p2, p3, p4) ->
+            @Suppress("UNCHECKED_CAST") // Types are guaranteed below.
+            content(p1 as P1, p2 as P2, p3 as P3, p4 as P4)
         }
     return { p1, p2, p3, p4 ->
-        currentComposer.insertMovableContent(movableContent, (p1 to p2) to (p3 to p4))
+        currentComposer.insertMovableContent(movableContent, arrayOf(p1, p2, p3, p4))
     }
 }
 
@@ -204,9 +205,8 @@
 fun <R, P1, P2> movableContentWithReceiverOf(
     content: @Composable R.(P1, P2) -> Unit
 ): @Composable R.(P1, P2) -> Unit {
-    val movableContent =
-        MovableContent<Pair<Pair<R, P1>, P2>> { it.first.first.content(it.first.second, it.second) }
-    return { p1, p2 -> currentComposer.insertMovableContent(movableContent, (this to p1) to p2) }
+    val movableContent = MovableContent<Triple<R, P1, P2>> { it.first.content(it.second, it.third) }
+    return { p1, p2 -> currentComposer.insertMovableContent(movableContent, Triple(this, p1, p2)) }
 }
 
 /**
@@ -230,11 +230,12 @@
     content: @Composable R.(P1, P2, P3) -> Unit
 ): @Composable R.(P1, P2, P3) -> Unit {
     val movableContent =
-        MovableContent<Pair<Pair<R, P1>, Pair<P2, P3>>> {
-            it.first.first.content(it.first.second, it.second.first, it.second.second)
+        MovableContent<Array<Any?>> { (r, p1, p2, p3) ->
+            @Suppress("UNCHECKED_CAST") // Types are guaranteed below.
+            (r as R).content(p1 as P1, p2 as P2, p3 as P3)
         }
     return { p1, p2, p3 ->
-        currentComposer.insertMovableContent(movableContent, (this to p1) to (p2 to p3))
+        currentComposer.insertMovableContent(movableContent, arrayOf(this, p1, p2, p3))
     }
 }
 
diff --git a/libraryversions.toml b/libraryversions.toml
index 8575a9c..e0fec0e 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -44,7 +44,7 @@
 CORE_ROLE = "1.2.0-alpha01"
 CORE_SPLASHSCREEN = "1.2.0-alpha02"
 CORE_TELECOM = "1.0.0-alpha4"
-CORE_UWB = "1.0.0-alpha09"
+CORE_UWB = "1.0.0-alpha10"
 CORE_VIEWTREE = "1.0.0-alpha01"
 CREDENTIALS = "1.5.0-beta01"
 CREDENTIALS_E2EE_QUARANTINE = "1.0.0-alpha02"
diff --git a/privacysandbox/ui/integration-tests/mediateesdkprovider/build.gradle b/privacysandbox/ui/integration-tests/mediateesdkprovider/build.gradle
index 2073543..549a7ee 100644
--- a/privacysandbox/ui/integration-tests/mediateesdkprovider/build.gradle
+++ b/privacysandbox/ui/integration-tests/mediateesdkprovider/build.gradle
@@ -16,18 +16,13 @@
 
 plugins {
     id("AndroidXPlugin")
-    id("com.android.application")
+    id("com.android.library")
     id("org.jetbrains.kotlin.android")
 }
 
 android {
     namespace "androidx.privacysandbox.ui.integration.mediateesdkprovider"
-
-    defaultConfig {
-        applicationId "androidx.privacysandbox.ui.integration.mediateesdkprovider"
-        minSdk 33
-        compileSdk 35
-    }
+    compileSdk 35
 
     buildTypes {
         release {
@@ -39,9 +34,9 @@
 dependencies {
     api(libs.kotlinStdlib)
     api("androidx.annotation:annotation:1.8.1")
+    implementation project(':privacysandbox:sdkruntime:sdkruntime-provider')
     implementation project(':privacysandbox:ui:integration-tests:testaidl')
     implementation project(':privacysandbox:ui:ui-core')
     implementation project(':privacysandbox:ui:ui-provider')
-    implementation project(':privacysandbox:sdkruntime:sdkruntime-client')
     implementation project(':privacysandbox:ui:integration-tests:sdkproviderutils')
 }
diff --git a/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/AndroidManifest.xml b/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/AndroidManifest.xml
deleted file mode 100644
index b9e9b43..0000000
--- a/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2024 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <application
-        android:allowBackup="true">
-        <sdk-library android:name="androidx.privacysandbox.ui.integration.mediateesdkprovider"
-            android:versionMajor="1" />
-        <property android:name="android.sdksandbox.PROPERTY_SDK_PROVIDER_CLASS_NAME"
-            android:value="androidx.privacysandbox.ui.integration.mediateesdkprovider.SdkProviderImpl" />
-    </application>
-
-</manifest>
diff --git a/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/java/androidx/privacysandbox/ui/integration/mediateesdkprovider/SdkProviderImpl.kt b/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/java/androidx/privacysandbox/ui/integration/mediateesdkprovider/SdkProviderImpl.kt
index 7d6c6ba8..d5f70e7 100644
--- a/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/java/androidx/privacysandbox/ui/integration/mediateesdkprovider/SdkProviderImpl.kt
+++ b/privacysandbox/ui/integration-tests/mediateesdkprovider/src/main/java/androidx/privacysandbox/ui/integration/mediateesdkprovider/SdkProviderImpl.kt
@@ -16,25 +16,19 @@
 
 package androidx.privacysandbox.ui.integration.mediateesdkprovider
 
-import android.annotation.SuppressLint
-import android.app.sdksandbox.SandboxedSdk
-import android.app.sdksandbox.SandboxedSdkProvider
 import android.content.Context
 import android.os.Bundle
-import android.os.ext.SdkExtensions
 import android.view.View
-import androidx.annotation.RequiresExtension
+import androidx.privacysandbox.sdkruntime.core.SandboxedSdkCompat
+import androidx.privacysandbox.sdkruntime.core.SandboxedSdkProviderCompat
 import androidx.privacysandbox.ui.integration.sdkproviderutils.MediateeSdkApiImpl
 
-// TODO(b/257429573): Remove this line once fixed.
-@SuppressLint("ClassVerificationFailure")
-@RequiresExtension(extension = SdkExtensions.AD_SERVICES, version = 5)
-class SdkProviderImpl : SandboxedSdkProvider() {
-    override fun onLoadSdk(p0: Bundle): SandboxedSdk {
-        return SandboxedSdk(MediateeSdkApiImpl(context!!))
+class SdkProviderImpl : SandboxedSdkProviderCompat() {
+    override fun onLoadSdk(params: Bundle): SandboxedSdkCompat {
+        return SandboxedSdkCompat(MediateeSdkApiImpl(context!!))
     }
 
-    override fun getView(p0: Context, p1: Bundle, p2: Int, p3: Int): View {
+    override fun getView(windowContext: Context, params: Bundle, width: Int, height: Int): View {
         throw IllegalStateException("This getView method will not be used.")
     }
 }
diff --git a/privacysandbox/ui/integration-tests/mediateesdkproviderwrapper/build.gradle b/privacysandbox/ui/integration-tests/mediateesdkproviderwrapper/build.gradle
new file mode 100644
index 0000000..b08d73b
--- /dev/null
+++ b/privacysandbox/ui/integration-tests/mediateesdkproviderwrapper/build.gradle
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import androidx.build.AndroidXConfig
+
+plugins {
+    id("AndroidXPlugin")
+    id("com.android.privacy-sandbox-sdk")
+}
+
+android {
+    namespace "androidx.privacysandbox.ui.integration.mediateesdkproviderwrapper"
+    compileSdk 35
+    minSdk 21
+    buildToolsVersion AndroidXConfig.getDefaultAndroidConfig(project).buildToolsVersion
+
+    bundle {
+        packageName = "androidx.privacysandbox.ui.integration.mediateesdkproviderwrapper"
+
+        // This is the entry point class to our SDK in the SDK Runtime. It enables backward
+        // compatibility support.
+        sdkProviderClassName = "androidx.privacysandbox.sdkruntime.provider.SandboxedSdkProviderAdapter"
+
+        // This is the class path of our implementation of the SandboxedSdkProviderCompat class.
+        compatSdkProviderClassName = "androidx.privacysandbox.ui.integration.mediateesdkprovider.SdkProviderImpl"
+
+        setVersion(1, 0, 0)
+    }
+}
+
+dependencies {
+    include(project(":privacysandbox:ui:integration-tests:mediateesdkprovider"))
+}
diff --git a/privacysandbox/ui/integration-tests/testapp/build.gradle b/privacysandbox/ui/integration-tests/testapp/build.gradle
index 8ea67e8..002e7c0 100644
--- a/privacysandbox/ui/integration-tests/testapp/build.gradle
+++ b/privacysandbox/ui/integration-tests/testapp/build.gradle
@@ -26,7 +26,6 @@
 
     defaultConfig {
         applicationId "androidx.privacysandbox.ui.integration.testapp"
-        minSdk 33
     }
 
     buildTypes {
@@ -34,22 +33,28 @@
             minifyEnabled false
         }
     }
+
+    privacySandbox {
+        enable = true
+    }
 }
 
 dependencies {
     implementation(libs.kotlinStdlib)
     api("androidx.annotation:annotation:1.8.1")
-    implementation 'androidx.core:core-ktx:1.8.0'
-    implementation 'androidx.appcompat:appcompat:1.6.0'
-    implementation 'com.google.android.material:material:1.6.0'
-    implementation "androidx.activity:activity-ktx:1.7.2"
-    implementation "androidx.drawerlayout:drawerlayout:1.2.0"
-    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
-    implementation 'androidx.recyclerview:recyclerview:1.3.2'
-    implementation project(':privacysandbox:sdkruntime:sdkruntime-client')
-    implementation project(':privacysandbox:ui:integration-tests:testaidl')
-    implementation project(':privacysandbox:ui:integration-tests:sdkproviderutils')
-    implementation project(':privacysandbox:ui:ui-core')
-    implementation project(':privacysandbox:ui:ui-client')
-    implementation project(':privacysandbox:ui:ui-provider')
+    implementation("androidx.core:core-ktx:1.8.0")
+    implementation("androidx.appcompat:appcompat:1.6.0")
+    implementation("com.google.android.material:material:1.6.0")
+    implementation("androidx.activity:activity-ktx:1.7.2")
+    implementation("androidx.drawerlayout:drawerlayout:1.2.0")
+    implementation("androidx.constraintlayout:constraintlayout:2.0.1")
+    implementation("androidx.recyclerview:recyclerview:1.3.2")
+    implementation(project(":privacysandbox:sdkruntime:sdkruntime-client"))
+    implementation(project(":privacysandbox:ui:integration-tests:testaidl"))
+    implementation(project(":privacysandbox:ui:integration-tests:sdkproviderutils"))
+    implementation(project(":privacysandbox:ui:integration-tests:testsdkproviderwrapper"))
+    implementation(project(":privacysandbox:ui:integration-tests:mediateesdkproviderwrapper"))
+    implementation(project(":privacysandbox:ui:ui-core"))
+    implementation(project(":privacysandbox:ui:ui-client"))
+    implementation(project(":privacysandbox:ui:ui-provider"))
 }
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/AndroidManifest.xml b/privacysandbox/ui/integration-tests/testapp/src/main/AndroidManifest.xml
index 77e1152..3f10b0c 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -35,12 +35,6 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
-        <uses-sdk-library android:name="androidx.privacysandbox.ui.integration.testsdkprovider"
-            android:versionMajor="1"
-            android:certDigest="EE:B9:3D:E4:98:2F:A1:2E:AD:5B:C1:16:7A:6E:10:BD:23:49:B4:04:65:C4:3A:01:CC:54:06:4D:E5:2A:38:04" />
-        <uses-sdk-library android:name="androidx.privacysandbox.ui.integration.mediateesdkprovider"
-            android:versionMajor="1"
-            android:certDigest="EE:B9:3D:E4:98:2F:A1:2E:AD:5B:C1:16:7A:6E:10:BD:23:49:B4:04:65:C4:3A:01:CC:54:06:4D:E5:2A:38:04" />
     </application>
 
 </manifest>
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/BaseFragment.kt b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/BaseFragment.kt
index 79fdec1..bd41656 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/BaseFragment.kt
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/BaseFragment.kt
@@ -44,6 +44,7 @@
  */
 abstract class BaseFragment : Fragment() {
     private lateinit var sdkApi: ISdkApi
+
     private lateinit var sdkSandboxManager: SdkSandboxManagerCompat
     private lateinit var activity: Activity
 
@@ -139,9 +140,9 @@
     }
 
     companion object {
-        private const val SDK_NAME = "androidx.privacysandbox.ui.integration.testsdkprovider"
+        private const val SDK_NAME = "androidx.privacysandbox.ui.integration.testsdkproviderwrapper"
         private const val MEDIATEE_SDK_NAME =
-            "androidx.privacysandbox.ui.integration.mediateesdkprovider"
+            "androidx.privacysandbox.ui.integration.mediateesdkproviderwrapper"
         const val TAG = "TestSandboxClient"
         var isZOrderOnTop = true
         @AdType var currentAdType = AdType.BASIC_NON_WEBVIEW
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt
index 5812058..080650a 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt
@@ -296,8 +296,8 @@
         private const val TAG = "TestSandboxClient"
 
         /** Name of the SDK to be loaded. */
-        private const val SDK_NAME = "androidx.privacysandbox.ui.integration.testsdkprovider"
+        private const val SDK_NAME = "androidx.privacysandbox.ui.integration.testsdkproviderwrapper"
         private const val MEDIATEE_SDK_NAME =
-            "androidx.privacysandbox.ui.integration.mediateesdkprovider"
+            "androidx.privacysandbox.ui.integration.mediateesdkproviderwrapper"
     }
 }
diff --git a/privacysandbox/ui/integration-tests/testsdkprovider/build.gradle b/privacysandbox/ui/integration-tests/testsdkprovider/build.gradle
index 441c562..7a9161f 100644
--- a/privacysandbox/ui/integration-tests/testsdkprovider/build.gradle
+++ b/privacysandbox/ui/integration-tests/testsdkprovider/build.gradle
@@ -16,19 +16,14 @@
 
 plugins {
     id("AndroidXPlugin")
-    id("com.android.application")
+    id("com.android.library")
     id("org.jetbrains.kotlin.android")
 }
 
 android {
+    compileSdk 35
     namespace 'androidx.privacysandbox.ui.integration.testsdkprovider'
 
-    defaultConfig {
-        applicationId "androidx.privacysandbox.ui.integration.testsdkprovider"
-        minSdk 33
-        compileSdk 35
-    }
-
     buildTypes {
         release {
             minifyEnabled false
@@ -39,10 +34,10 @@
 dependencies {
     api(libs.kotlinStdlib)
     api("androidx.annotation:annotation:1.8.1")
+    implementation project(':privacysandbox:sdkruntime:sdkruntime-provider')
     implementation project(':privacysandbox:ui:integration-tests:testaidl')
     implementation project(':privacysandbox:ui:integration-tests:sdkproviderutils')
     implementation project(':privacysandbox:ui:ui-core')
     implementation project(':privacysandbox:ui:ui-provider')
-    implementation project(':privacysandbox:sdkruntime:sdkruntime-client')
     implementation project(':webkit:webkit')
 }
diff --git a/privacysandbox/ui/integration-tests/testsdkprovider/src/main/AndroidManifest.xml b/privacysandbox/ui/integration-tests/testsdkprovider/src/main/AndroidManifest.xml
deleted file mode 100644
index 9156289..0000000
--- a/privacysandbox/ui/integration-tests/testsdkprovider/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2023 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <application
-        android:allowBackup="true">
-        <sdk-library android:name="androidx.privacysandbox.ui.integration.testsdkprovider"
-            android:versionMajor="1" />
-        <property android:name="android.sdksandbox.PROPERTY_SDK_PROVIDER_CLASS_NAME"
-            android:value="androidx.privacysandbox.ui.integration.testsdkprovider.SdkProviderImpl" />
-    </application>
-
-</manifest>
diff --git a/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkApi.kt b/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkApi.kt
index 5ae1688..5f149dd 100644
--- a/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkApi.kt
+++ b/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkApi.kt
@@ -234,7 +234,7 @@
 
     companion object {
         private const val MEDIATEE_SDK =
-            "androidx.privacysandbox.ui.integration.mediateesdkprovider"
+            "androidx.privacysandbox.ui.integration.mediateesdkproviderwrapper"
         private const val UPDATE_DELEGATE_INTERVAL: Long = 5000L
     }
 }
diff --git a/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkProviderImpl.kt b/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkProviderImpl.kt
index 2b1d2a1..62b9086 100644
--- a/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkProviderImpl.kt
+++ b/privacysandbox/ui/integration-tests/testsdkprovider/src/main/java/androidx/privacysandbox/ui/integration/testsdkprovider/SdkProviderImpl.kt
@@ -16,22 +16,18 @@
 
 package androidx.privacysandbox.ui.integration.testsdkprovider
 
-import android.app.sdksandbox.SandboxedSdk
-import android.app.sdksandbox.SandboxedSdkProvider
 import android.content.Context
 import android.os.Bundle
-import android.os.ext.SdkExtensions
 import android.view.View
-import androidx.annotation.RequiresExtension
+import androidx.privacysandbox.sdkruntime.core.SandboxedSdkCompat
+import androidx.privacysandbox.sdkruntime.core.SandboxedSdkProviderCompat
 
-// TODO(b/257429573): Remove this line once fixed.
-@RequiresExtension(extension = SdkExtensions.AD_SERVICES, version = 5)
-class SdkProviderImpl : SandboxedSdkProvider() {
-    override fun onLoadSdk(p0: Bundle): SandboxedSdk {
-        return SandboxedSdk(SdkApi(context!!))
+class SdkProviderImpl : SandboxedSdkProviderCompat() {
+    override fun onLoadSdk(params: Bundle): SandboxedSdkCompat {
+        return SandboxedSdkCompat(SdkApi(context!!))
     }
 
-    override fun getView(p0: Context, p1: Bundle, p2: Int, p3: Int): View {
+    override fun getView(windowContext: Context, params: Bundle, width: Int, height: Int): View {
         TODO("Not yet implemented")
     }
 }
diff --git a/privacysandbox/ui/integration-tests/testsdkproviderwrapper/build.gradle b/privacysandbox/ui/integration-tests/testsdkproviderwrapper/build.gradle
new file mode 100644
index 0000000..b2da013
--- /dev/null
+++ b/privacysandbox/ui/integration-tests/testsdkproviderwrapper/build.gradle
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import androidx.build.AndroidXConfig
+
+plugins {
+    id("AndroidXPlugin")
+    id("com.android.privacy-sandbox-sdk")
+}
+
+android {
+    namespace "androidx.privacysandbox.ui.integration.testsdkproviderwrapper"
+    compileSdk 35
+    minSdk 21
+    buildToolsVersion AndroidXConfig.getDefaultAndroidConfig(project).buildToolsVersion
+
+    bundle {
+        packageName = "androidx.privacysandbox.ui.integration.testsdkproviderwrapper"
+
+        // This is the entry point class to our SDK in the SDK Runtime. It enables backward
+        // compatibility support.
+        sdkProviderClassName = "androidx.privacysandbox.sdkruntime.provider.SandboxedSdkProviderAdapter"
+
+        // This is the class path of our implementation of the SandboxedSdkProviderCompat class.
+        compatSdkProviderClassName = "androidx.privacysandbox.ui.integration.testsdkprovider.SdkProviderImpl"
+
+        setVersion(1, 0, 0)
+    }
+}
+
+dependencies {
+    include(project(":privacysandbox:ui:integration-tests:testsdkprovider"))
+}
diff --git a/settings.gradle b/settings.gradle
index 454fc7e..ec91b3e 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -896,10 +896,12 @@
 includeProject(":privacysandbox:tools:tools-core", [BuildType.MAIN])
 includeProject(":privacysandbox:tools:tools-testing", [BuildType.MAIN])
 includeProject(":privacysandbox:ui:integration-tests:mediateesdkprovider", [BuildType.MAIN])
+includeProject(":privacysandbox:ui:integration-tests:mediateesdkproviderwrapper", [BuildType.MAIN])
 includeProject(":privacysandbox:ui:integration-tests:sdkproviderutils", [BuildType.MAIN])
 includeProject(":privacysandbox:ui:integration-tests:testaidl", [BuildType.MAIN])
 includeProject(":privacysandbox:ui:integration-tests:testapp", [BuildType.MAIN])
 includeProject(":privacysandbox:ui:integration-tests:testsdkprovider", [BuildType.MAIN])
+includeProject(":privacysandbox:ui:integration-tests:testsdkproviderwrapper", [BuildType.MAIN])
 includeProject(":privacysandbox:ui:ui-client", [BuildType.MAIN])
 includeProject(":privacysandbox:ui:ui-core", [BuildType.MAIN])
 includeProject(":privacysandbox:ui:ui-provider", [BuildType.MAIN])
