Migrate wear tiles to use JSpecify annotations

CL created by running `development/jspecify_update.py wear/tiles`

We are updating all AndroidX libraries to use the Jspecify nullness annotations (https://docs.google.com/document/d/1XjainD032hUdCfgXIzRThHvP9FJANYuocKaTDXWuLXo/edit?usp=sharing)

Bug: 326456246
Test: `checkApi`, `lint`, `runErrorProne`
Relnote: "This library now uses [JSpecify nullness annotations](https://jspecify.dev/), which are type-use. Kotlin developers should use the following compiler arguments to enforce correct usage: -Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode"
Change-Id: I390e9fc6d6e16227f3c7f1d114aa15c4c4626b65
diff --git a/wear/tiles/tiles-material/build.gradle b/wear/tiles/tiles-material/build.gradle
index 5a1fa54..f1afc74 100644
--- a/wear/tiles/tiles-material/build.gradle
+++ b/wear/tiles/tiles-material/build.gradle
@@ -32,6 +32,7 @@
 }
 
 dependencies {
+    api(libs.jspecify)
     api("androidx.annotation:annotation:1.8.1")
     api(project(":wear:tiles:tiles"))
     implementation(project(":wear:tiles:tiles-proto"))
diff --git a/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/RunnerUtils.java b/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/RunnerUtils.java
index f630834..a8cb5ea 100644
--- a/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/RunnerUtils.java
+++ b/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/RunnerUtils.java
@@ -22,13 +22,14 @@
 import android.graphics.Bitmap;
 import android.util.Log;
 
-import androidx.annotation.NonNull;
 import androidx.test.core.app.ActivityScenario;
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.screenshot.AndroidXScreenshotTestRule;
 import androidx.test.screenshot.matchers.MSSIMMatcher;
 import androidx.wear.tiles.material.testapp.GoldenTestActivity;
 
+import org.jspecify.annotations.NonNull;
+
 @SuppressWarnings("deprecation")
 public class RunnerUtils {
     // This isn't totally ideal right now. The screenshot tests run on a phone, so emulate some
@@ -40,7 +41,7 @@
 
     public static void runSingleScreenshotTest(
             @NonNull AndroidXScreenshotTestRule rule,
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement layoutElement,
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement layoutElement,
             @NonNull String expected) {
         byte[] layoutElementPayload = layoutElement.toLayoutElementProto().toByteArray();
 
diff --git a/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/TestCasesGenerator.java b/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/TestCasesGenerator.java
index 50d9fb8..531d07f 100644
--- a/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/TestCasesGenerator.java
+++ b/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/TestCasesGenerator.java
@@ -19,7 +19,7 @@
 import android.content.Context;
 import android.graphics.Color;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -38,11 +38,12 @@
      * different for different user font sizes. Note that some of the golden will have the same name
      * as it should point on the same size independent image.
      */
-    @NonNull
-    static Map<String, androidx.wear.tiles.LayoutElementBuilders.LayoutElement> generateTestCases(
-            @NonNull Context context,
-            @NonNull androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters deviceParameters,
-            @NonNull String goldenSuffix) {
+    static @NonNull Map<String, androidx.wear.tiles.LayoutElementBuilders.LayoutElement>
+            generateTestCases(
+                    @NonNull Context context,
+                    androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
+                            deviceParameters,
+                    @NonNull String goldenSuffix) {
         androidx.wear.tiles.ModifiersBuilders.Clickable clickable =
                 new androidx.wear.tiles.ModifiersBuilders.Clickable.Builder()
                         .setOnClick(
diff --git a/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/layouts/TestCasesGenerator.java b/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/layouts/TestCasesGenerator.java
index 5984524..342d482 100644
--- a/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/layouts/TestCasesGenerator.java
+++ b/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/layouts/TestCasesGenerator.java
@@ -20,7 +20,8 @@
 import android.graphics.Color;
 
 import androidx.annotation.Dimension;
-import androidx.annotation.NonNull;
+
+import org.jspecify.annotations.NonNull;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -37,11 +38,12 @@
      * different for different user font sizes. Note that some of the golden will have the same name
      * as it should point on the same size independent image.
      */
-    @NonNull
-    static Map<String, androidx.wear.tiles.LayoutElementBuilders.LayoutElement> generateTestCases(
-            @NonNull Context context,
-            @NonNull androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters deviceParameters,
-            @NonNull String goldenSuffix) {
+    static @NonNull Map<String, androidx.wear.tiles.LayoutElementBuilders.LayoutElement>
+            generateTestCases(
+                    @NonNull Context context,
+                    androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
+                            deviceParameters,
+                    @NonNull String goldenSuffix) {
         androidx.wear.tiles.ModifiersBuilders.Clickable clickable =
                 new androidx.wear.tiles.ModifiersBuilders.Clickable.Builder()
                         .setOnClick(
@@ -635,13 +637,11 @@
         return testCases;
     }
 
-    @NonNull
-    private static androidx.wear.tiles.ColorBuilders.ColorProp color(int yellow) {
+    private static androidx.wear.tiles.ColorBuilders.@NonNull ColorProp color(int yellow) {
         return androidx.wear.tiles.ColorBuilders.argb(yellow);
     }
 
-    @NonNull
-    private static androidx.wear.tiles.material.Text buildTextLabel(
+    private static androidx.wear.tiles.material.@NonNull Text buildTextLabel(
             @NonNull Context context, @NonNull String text) {
         return new androidx.wear.tiles.material.Text.Builder(context, text)
                 .setTypography(androidx.wear.tiles.material.Typography.TYPOGRAPHY_CAPTION1)
@@ -649,8 +649,8 @@
                 .build();
     }
 
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.Box buildColoredBoxMSL(int color) {
+    private static androidx.wear.tiles.LayoutElementBuilders.@NonNull Box buildColoredBoxMSL(
+            int color) {
         return new androidx.wear.tiles.LayoutElementBuilders.Box.Builder()
                 .setWidth(androidx.wear.tiles.DimensionBuilders.dp(60))
                 .setHeight(androidx.wear.tiles.DimensionBuilders.dp(60))
@@ -665,8 +665,8 @@
                 .build();
     }
 
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.Box buildColoredBoxPLL(int color) {
+    private static androidx.wear.tiles.LayoutElementBuilders.@NonNull Box buildColoredBoxPLL(
+            int color) {
         return new androidx.wear.tiles.LayoutElementBuilders.Box.Builder()
                 .setWidth(androidx.wear.tiles.DimensionBuilders.expand())
                 .setHeight(androidx.wear.tiles.DimensionBuilders.dp(60))
diff --git a/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/testapp/GoldenTestActivity.java b/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/testapp/GoldenTestActivity.java
index 8374563..6e4ea0c 100644
--- a/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/testapp/GoldenTestActivity.java
+++ b/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/testapp/GoldenTestActivity.java
@@ -31,7 +31,6 @@
 import android.widget.FrameLayout;
 import android.widget.FrameLayout.LayoutParams;
 
-import androidx.annotation.Nullable;
 import androidx.core.content.ContextCompat;
 import androidx.wear.protolayout.LayoutElementBuilders;
 import androidx.wear.protolayout.LayoutElementBuilders.Layout;
@@ -42,6 +41,8 @@
 import androidx.wear.tiles.material.R;
 import androidx.wear.tiles.renderer.TileRenderer;
 
+import org.jspecify.annotations.Nullable;
+
 import java.util.concurrent.Executor;
 import java.util.concurrent.TimeUnit;
 
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Button.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Button.java
index b469d86..2689359 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Button.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Button.java
@@ -22,13 +22,14 @@
 
 import androidx.annotation.Dimension;
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.HashMap;
@@ -92,9 +93,9 @@
      */
     static final String METADATA_TAG_CUSTOM_CONTENT = "CSTBTN";
 
-    @NonNull private final androidx.wear.tiles.LayoutElementBuilders.Box mElement;
+    private final androidx.wear.tiles.LayoutElementBuilders.@NonNull Box mElement;
 
-    Button(@NonNull androidx.wear.tiles.LayoutElementBuilders.Box element) {
+    Button(androidx.wear.tiles.LayoutElementBuilders.@NonNull Box element) {
         mElement = element;
     }
 
@@ -107,27 +108,27 @@
         private static final int IMAGE = 2;
         private static final int CUSTOM_CONTENT = 3;
 
-        @NonNull static final Map<Integer, String> TYPE_TO_TAG = new HashMap<>();
+        static final @NonNull Map<Integer, String> TYPE_TO_TAG = new HashMap<>();
 
         @RestrictTo(RestrictTo.Scope.LIBRARY)
         @Retention(RetentionPolicy.SOURCE)
         @IntDef({NOT_SET, ICON, TEXT, IMAGE, CUSTOM_CONTENT})
         @interface ButtonType {}
 
-        @NonNull private final Context mContext;
-        @Nullable private androidx.wear.tiles.LayoutElementBuilders.LayoutElement mCustomContent;
-        @NonNull private final androidx.wear.tiles.ModifiersBuilders.Clickable mClickable;
-        @NonNull private CharSequence mContentDescription = "";
+        private final @NonNull Context mContext;
+        private androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement mCustomContent;
+        private final androidx.wear.tiles.ModifiersBuilders.@NonNull Clickable mClickable;
+        private @NonNull CharSequence mContentDescription = "";
 
-        @NonNull
-        private androidx.wear.tiles.DimensionBuilders.DpProp mSize = ButtonDefaults.DEFAULT_SIZE;
+        private androidx.wear.tiles.DimensionBuilders.@NonNull DpProp mSize =
+                ButtonDefaults.DEFAULT_SIZE;
 
-        @Nullable private String mText = null;
-        @Nullable private Integer mTypographyName = null;
-        @Nullable private String mIcon = null;
-        @Nullable private androidx.wear.tiles.DimensionBuilders.DpProp mIconSize = null;
-        @Nullable private String mImage = null;
-        @NonNull private ButtonColors mButtonColors = ButtonDefaults.PRIMARY_COLORS;
+        private @Nullable String mText = null;
+        private @Nullable Integer mTypographyName = null;
+        private @Nullable String mIcon = null;
+        private androidx.wear.tiles.DimensionBuilders.@Nullable DpProp mIconSize = null;
+        private @Nullable String mImage = null;
+        private @NonNull ButtonColors mButtonColors = ButtonDefaults.PRIMARY_COLORS;
         @ButtonType private int mType = NOT_SET;
 
         static {
@@ -148,7 +149,7 @@
          */
         public Builder(
                 @NonNull Context context,
-                @NonNull androidx.wear.tiles.ModifiersBuilders.Clickable clickable) {
+                androidx.wear.tiles.ModifiersBuilders.@NonNull Clickable clickable) {
             mClickable = clickable;
             mContext = context;
         }
@@ -157,8 +158,7 @@
          * Sets the content description for the {@link Button}. It is highly recommended to provide
          * this for button containing icon or image.
          */
-        @NonNull
-        public Builder setContentDescription(@NonNull CharSequence contentDescription) {
+        public @NonNull Builder setContentDescription(@NonNull CharSequence contentDescription) {
             this.mContentDescription = contentDescription;
             return this;
         }
@@ -169,8 +169,8 @@
          * ButtonDefaults#EXTRA_LARGE_SIZE}. If not set, {@link ButtonDefaults#DEFAULT_SIZE} will be
          * used.
          */
-        @NonNull
-        public Builder setSize(@NonNull androidx.wear.tiles.DimensionBuilders.DpProp size) {
+        public @NonNull Builder setSize(
+                androidx.wear.tiles.DimensionBuilders.@NonNull DpProp size) {
             mSize = size;
             return this;
         }
@@ -181,8 +181,7 @@
          * ButtonDefaults#EXTRA_LARGE_SIZE}. If not set, {@link ButtonDefaults#DEFAULT_SIZE} will be
          * used.
          */
-        @NonNull
-        public Builder setSize(@Dimension(unit = DP) float size) {
+        public @NonNull Builder setSize(@Dimension(unit = DP) float size) {
             mSize = androidx.wear.tiles.DimensionBuilders.dp(size);
             return this;
         }
@@ -191,8 +190,7 @@
          * Sets the colors for the {@link Button}. If not set, {@link ButtonDefaults#PRIMARY_COLORS}
          * will be used.
          */
-        @NonNull
-        public Builder setButtonColors(@NonNull ButtonColors buttonColors) {
+        public @NonNull Builder setButtonColors(@NonNull ButtonColors buttonColors) {
             mButtonColors = buttonColors;
             return this;
         }
@@ -200,9 +198,8 @@
         /**
          * Sets the custom content for this Button. Any previously added content will be overridden.
          */
-        @NonNull
-        public Builder setCustomContent(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement content) {
+        public @NonNull Builder setCustomContent(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement content) {
             resetContent();
             this.mCustomContent = content;
             this.mType = CUSTOM_CONTENT;
@@ -215,10 +212,9 @@
          * from {@link ButtonColors} and with the given size. This icon should be image with chosen
          * alpha channel and not an actual image.
          */
-        @NonNull
-        public Builder setIconContent(
+        public @NonNull Builder setIconContent(
                 @NonNull String imageResourceId,
-                @NonNull androidx.wear.tiles.DimensionBuilders.DpProp size) {
+                androidx.wear.tiles.DimensionBuilders.@NonNull DpProp size) {
             resetContent();
             this.mIcon = imageResourceId;
             this.mType = ICON;
@@ -232,8 +228,7 @@
          * icon will be tinted to the given content color from {@link ButtonColors}. This icon
          * should be image with chosen alpha channel and not an actual image.
          */
-        @NonNull
-        public Builder setIconContent(@NonNull String imageResourceId) {
+        public @NonNull Builder setIconContent(@NonNull String imageResourceId) {
             resetContent();
             this.mIcon = imageResourceId;
             this.mType = ICON;
@@ -248,8 +243,7 @@
          * Any previously added content will be overridden. Text should contain no more than 3
          * characters, otherwise it will overflow from the edges.
          */
-        @NonNull
-        public Builder setTextContent(@NonNull String text) {
+        public @NonNull Builder setTextContent(@NonNull String text) {
             resetContent();
             this.mText = text;
             this.mType = TEXT;
@@ -262,8 +256,7 @@
          * Text} component. Any previously added content will be overridden. Text should contain no
          * more than 3 characters, otherwise it will overflow from the edges.
          */
-        @NonNull
-        public Builder setTextContent(
+        public @NonNull Builder setTextContent(
                 @NonNull String text, @Typography.TypographyName int typographyName) {
             resetContent();
             this.mText = text;
@@ -276,8 +269,7 @@
          * Sets the content of this Button to be the given image, i.e. contacts photo. Any
          * previously added content will be overridden.
          */
-        @NonNull
-        public Builder setImageContent(@NonNull String imageResourceId) {
+        public @NonNull Builder setImageContent(@NonNull String imageResourceId) {
             resetContent();
             this.mImage = imageResourceId;
             this.mType = IMAGE;
@@ -294,9 +286,8 @@
         }
 
         /** Constructs and returns {@link Button} with the provided field and look. */
-        @NonNull
         @Override
-        public Button build() {
+        public @NonNull Button build() {
             androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder modifiers =
                     new androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder()
                             .setClickable(mClickable)
@@ -335,8 +326,8 @@
             return new Button(element.build());
         }
 
-        @NonNull
-        private androidx.wear.tiles.LayoutElementBuilders.LayoutElement getCorrectContent() {
+        private androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement
+                getCorrectContent() {
             androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder content;
             switch (mType) {
                 case ICON:
@@ -399,7 +390,7 @@
         }
 
         private static @Typography.TypographyName int getDefaultTypographyForSize(
-                @NonNull androidx.wear.tiles.DimensionBuilders.DpProp size) {
+                androidx.wear.tiles.DimensionBuilders.@NonNull DpProp size) {
             if (size.getValue() == ButtonDefaults.LARGE_SIZE.getValue()) {
                 return Typography.TYPOGRAPHY_TITLE1;
             } else if (size.getValue() == ButtonDefaults.EXTRA_LARGE_SIZE.getValue()) {
@@ -413,8 +404,7 @@
     /**
      * Returns the custom content of this Button if it has been added. Otherwise, it returns null.
      */
-    @Nullable
-    public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getCustomContent() {
+    public androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement getCustomContent() {
         if (!getMetadataTag().equals(METADATA_TAG_CUSTOM_CONTENT)) {
             return null;
         }
@@ -422,8 +412,7 @@
     }
 
     /** Returns the icon content of this Button if it has been added. Otherwise, it returns null. */
-    @Nullable
-    public String getIconContent() {
+    public @Nullable String getIconContent() {
         androidx.wear.tiles.LayoutElementBuilders.Image icon = getIconContentObject();
         return icon != null ? Helper.checkNotNull(icon.getResourceId()).getValue() : null;
     }
@@ -431,42 +420,36 @@
     /**
      * Returns the image content of this Button if it has been added. Otherwise, it returns null.
      */
-    @Nullable
-    public String getImageContent() {
+    public @Nullable String getImageContent() {
         androidx.wear.tiles.LayoutElementBuilders.Image image = getImageContentObject();
         return image != null ? Helper.checkNotNull(image.getResourceId()).getValue() : null;
     }
 
     /** Returns the text content of this Button if it has been added. Otherwise, it returns null. */
-    @Nullable
-    public String getTextContent() {
+    public @Nullable String getTextContent() {
         Text text = getTextContentObject();
         return text != null ? text.getText() : null;
     }
 
-    @NonNull
-    private androidx.wear.tiles.LayoutElementBuilders.LayoutElement getAnyContent() {
+    private androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement getAnyContent() {
         return Helper.checkNotNull(mElement.getContents().get(0));
     }
 
-    @Nullable
-    private androidx.wear.tiles.LayoutElementBuilders.Image getIconContentObject() {
+    private androidx.wear.tiles.LayoutElementBuilders.@Nullable Image getIconContentObject() {
         if (!getMetadataTag().equals(METADATA_TAG_ICON)) {
             return null;
         }
         return (androidx.wear.tiles.LayoutElementBuilders.Image) getAnyContent();
     }
 
-    @Nullable
-    private Text getTextContentObject() {
+    private @Nullable Text getTextContentObject() {
         if (!getMetadataTag().equals(METADATA_TAG_TEXT)) {
             return null;
         }
         return Text.fromLayoutElement(getAnyContent());
     }
 
-    @Nullable
-    private androidx.wear.tiles.LayoutElementBuilders.Image getImageContentObject() {
+    private androidx.wear.tiles.LayoutElementBuilders.@Nullable Image getImageContentObject() {
         if (!getMetadataTag().equals(METADATA_TAG_IMAGE)) {
             return null;
         }
@@ -474,14 +457,12 @@
     }
 
     /** Returns click event action associated with this Button. */
-    @NonNull
-    public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable() {
+    public androidx.wear.tiles.ModifiersBuilders.@NonNull Clickable getClickable() {
         return Helper.checkNotNull(Helper.checkNotNull(mElement.getModifiers()).getClickable());
     }
 
     /** Returns content description for this Button. */
-    @Nullable
-    public CharSequence getContentDescription() {
+    public @Nullable CharSequence getContentDescription() {
         androidx.wear.tiles.ModifiersBuilders.Semantics semantics =
                 Helper.checkNotNull(mElement.getModifiers()).getSemantics();
         if (semantics == null) {
@@ -491,8 +472,7 @@
     }
 
     /** Returns size for this Button. */
-    @NonNull
-    public androidx.wear.tiles.DimensionBuilders.ContainerDimension getSize() {
+    public androidx.wear.tiles.DimensionBuilders.@NonNull ContainerDimension getSize() {
         return Helper.checkNotNull(mElement.getWidth());
     }
 
@@ -503,8 +483,7 @@
     }
 
     /** Returns button color of this Button. */
-    @NonNull
-    public ButtonColors getButtonColors() {
+    public @NonNull ButtonColors getButtonColors() {
         androidx.wear.tiles.ColorBuilders.ColorProp backgroundColor = getBackgroundColor();
         androidx.wear.tiles.ColorBuilders.ColorProp contentColor = null;
 
@@ -538,8 +517,7 @@
     }
 
     /** Returns metadata tag set to this Button. */
-    @NonNull
-    String getMetadataTag() {
+    @NonNull String getMetadataTag() {
         return Helper.getMetadataTagName(
                 Helper.checkNotNull(Helper.checkNotNull(mElement.getModifiers()).getMetadata()));
     }
@@ -550,9 +528,8 @@
      * container.getContents().get(index)}) if that element can be converted to Button. Otherwise,
      * it will return null.
      */
-    @Nullable
-    public static Button fromLayoutElement(
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement element) {
+    public static @Nullable Button fromLayoutElement(
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement element) {
         if (element instanceof Button) {
             return (Button) element;
         }
@@ -568,17 +545,15 @@
         return new Button(boxElement);
     }
 
-    @NonNull
     @Override
     @RestrictTo(Scope.LIBRARY_GROUP)
-    public LayoutElementProto.LayoutElement toLayoutElementProto() {
+    public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
         return Helper.checkNotNull(mElement.toLayoutElementProto());
     }
 
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @Nullable
     @Override
-    public Fingerprint getFingerprint() {
+    public @Nullable Fingerprint getFingerprint() {
         return mElement.getFingerprint();
     }
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ButtonColors.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ButtonColors.java
index 23face2..e48335b 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ButtonColors.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ButtonColors.java
@@ -17,7 +17,8 @@
 package androidx.wear.tiles.material;
 
 import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
+
+import org.jspecify.annotations.NonNull;
 
 /**
  * Represents the background and content colors used in a button Tiles component.
@@ -32,8 +33,8 @@
 @Deprecated
 @SuppressWarnings("deprecation")
 public class ButtonColors {
-    @NonNull private final androidx.wear.tiles.ColorBuilders.ColorProp mBackgroundColor;
-    @NonNull private final androidx.wear.tiles.ColorBuilders.ColorProp mContentColor;
+    private final androidx.wear.tiles.ColorBuilders.@NonNull ColorProp mBackgroundColor;
+    private final androidx.wear.tiles.ColorBuilders.@NonNull ColorProp mContentColor;
 
     /**
      * Constructor for {@link ButtonColors} object.
@@ -55,8 +56,8 @@
      * @param contentColor The content color or tint color to be used for a button.
      */
     public ButtonColors(
-            @NonNull androidx.wear.tiles.ColorBuilders.ColorProp backgroundColor,
-            @NonNull androidx.wear.tiles.ColorBuilders.ColorProp contentColor) {
+            androidx.wear.tiles.ColorBuilders.@NonNull ColorProp backgroundColor,
+            androidx.wear.tiles.ColorBuilders.@NonNull ColorProp contentColor) {
         mBackgroundColor = backgroundColor;
         mContentColor = contentColor;
     }
@@ -65,8 +66,7 @@
      * Returns a {@link ButtonColors} object, using the current Primary colors from the given {@link
      * Colors}.
      */
-    @NonNull
-    public static ButtonColors primaryButtonColors(@NonNull Colors colors) {
+    public static @NonNull ButtonColors primaryButtonColors(@NonNull Colors colors) {
         return new ButtonColors(colors.getPrimary(), colors.getOnPrimary());
     }
 
@@ -74,20 +74,17 @@
      * Returns a {@link ButtonColors} object, using the current Surface colors from the given {@link
      * Colors}.
      */
-    @NonNull
-    public static ButtonColors secondaryButtonColors(@NonNull Colors colors) {
+    public static @NonNull ButtonColors secondaryButtonColors(@NonNull Colors colors) {
         return new ButtonColors(colors.getSurface(), colors.getOnSurface());
     }
 
     /** The background color to be used on a button Tiles components. */
-    @NonNull
-    public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor() {
+    public androidx.wear.tiles.ColorBuilders.@NonNull ColorProp getBackgroundColor() {
         return mBackgroundColor;
     }
 
     /** The content or tint color to be used on a button Tiles components. */
-    @NonNull
-    public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor() {
+    public androidx.wear.tiles.ColorBuilders.@NonNull ColorProp getContentColor() {
         return mContentColor;
     }
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ButtonDefaults.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ButtonDefaults.java
index 3fa5303..6a38829 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ButtonDefaults.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ButtonDefaults.java
@@ -19,7 +19,8 @@
 import static androidx.annotation.Dimension.DP;
 
 import androidx.annotation.Dimension;
-import androidx.annotation.NonNull;
+
+import org.jspecify.annotations.NonNull;
 
 /**
  * Contains the default values used by button Tiles components.
@@ -33,41 +34,34 @@
     private ButtonDefaults() {}
 
     /** The default size for standard {@link Button}. */
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_SIZE =
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp DEFAULT_SIZE =
             androidx.wear.tiles.DimensionBuilders.dp(52);
 
     /** The recommended size for large {@link Button}. */
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp LARGE_SIZE =
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp LARGE_SIZE =
             androidx.wear.tiles.DimensionBuilders.dp(60);
 
     /** The recommended size for extra large {@link Button}. */
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp EXTRA_LARGE_SIZE =
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp EXTRA_LARGE_SIZE =
             androidx.wear.tiles.DimensionBuilders.dp(88);
 
     /** Returns the recommended icon size for the given size of a {@link Button}. */
-    @NonNull
-    public static androidx.wear.tiles.DimensionBuilders.DpProp recommendedIconSize(
-            @NonNull androidx.wear.tiles.DimensionBuilders.DpProp buttonSize) {
+    public static androidx.wear.tiles.DimensionBuilders.@NonNull DpProp recommendedIconSize(
+            androidx.wear.tiles.DimensionBuilders.@NonNull DpProp buttonSize) {
         return recommendedIconSize(buttonSize.getValue());
     }
 
     /** Returns the recommended icon size for the given size of a {@link Button}. */
-    @NonNull
-    public static androidx.wear.tiles.DimensionBuilders.DpProp recommendedIconSize(
+    public static androidx.wear.tiles.DimensionBuilders.@NonNull DpProp recommendedIconSize(
             @Dimension(unit = DP) float buttonSize) {
         return androidx.wear.tiles.DimensionBuilders.dp(buttonSize / 2);
     }
 
     /** The recommended colors for a primary {@link Button}. */
-    @NonNull
-    public static final ButtonColors PRIMARY_COLORS =
+    public static final @NonNull ButtonColors PRIMARY_COLORS =
             ButtonColors.primaryButtonColors(Colors.DEFAULT);
 
     /** The recommended colors for a secondary {@link Button}. */
-    @NonNull
-    public static final ButtonColors SECONDARY_COLORS =
+    public static final @NonNull ButtonColors SECONDARY_COLORS =
             ButtonColors.secondaryButtonColors(Colors.DEFAULT);
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Chip.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Chip.java
index 741a1a2..bef10f1 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Chip.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Chip.java
@@ -22,13 +22,14 @@
 
 import androidx.annotation.Dimension;
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.HashMap;
@@ -91,9 +92,9 @@
      */
     static final String METADATA_TAG_CUSTOM_CONTENT = "CSTCHP";
 
-    @NonNull private final androidx.wear.tiles.LayoutElementBuilders.Box mElement;
+    private final androidx.wear.tiles.LayoutElementBuilders.@NonNull Box mElement;
 
-    Chip(@NonNull androidx.wear.tiles.LayoutElementBuilders.Box element) {
+    Chip(androidx.wear.tiles.LayoutElementBuilders.@NonNull Box element) {
         mElement = element;
     }
 
@@ -110,19 +111,19 @@
         @IntDef({NOT_SET, TEXT, ICON, CUSTOM_CONTENT})
         @interface ChipType {}
 
-        @NonNull private final Context mContext;
-        @Nullable private androidx.wear.tiles.LayoutElementBuilders.LayoutElement mCustomContent;
-        @Nullable private String mImageResourceId = null;
-        @Nullable private String mPrimaryLabel = null;
-        @Nullable private String mSecondaryLabel = null;
-        @NonNull private final androidx.wear.tiles.ModifiersBuilders.Clickable mClickable;
-        @NonNull private CharSequence mContentDescription = "";
-        @NonNull private androidx.wear.tiles.DimensionBuilders.ContainerDimension mWidth;
+        private final @NonNull Context mContext;
+        private androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement mCustomContent;
+        private @Nullable String mImageResourceId = null;
+        private @Nullable String mPrimaryLabel = null;
+        private @Nullable String mSecondaryLabel = null;
+        private final androidx.wear.tiles.ModifiersBuilders.@NonNull Clickable mClickable;
+        private @NonNull CharSequence mContentDescription = "";
+        private androidx.wear.tiles.DimensionBuilders.@NonNull ContainerDimension mWidth;
 
-        @NonNull
-        private androidx.wear.tiles.DimensionBuilders.DpProp mHeight = ChipDefaults.DEFAULT_HEIGHT;
+        private androidx.wear.tiles.DimensionBuilders.@NonNull DpProp mHeight =
+                ChipDefaults.DEFAULT_HEIGHT;
 
-        @NonNull private ChipColors mChipColors = ChipDefaults.PRIMARY_COLORS;
+        private @NonNull ChipColors mChipColors = ChipDefaults.PRIMARY_COLORS;
 
         @androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignment
         private int mHorizontalAlign =
@@ -130,15 +131,14 @@
 
         @Typography.TypographyName private int mPrimaryLabelTypography;
 
-        @NonNull
-        private androidx.wear.tiles.DimensionBuilders.DpProp mHorizontalPadding =
+        private androidx.wear.tiles.DimensionBuilders.@NonNull DpProp mHorizontalPadding =
                 ChipDefaults.HORIZONTAL_PADDING;
 
         private boolean mIsScalable = true;
         private int mMaxLines = 0; // 0 indicates that is not set.
-        @NonNull private String mMetadataTag = "";
+        private @NonNull String mMetadataTag = "";
 
-        @NonNull static final Map<Integer, String> TYPE_TO_TAG = new HashMap<>();
+        static final @NonNull Map<Integer, String> TYPE_TO_TAG = new HashMap<>();
 
         static {
             TYPE_TO_TAG.put(ICON, METADATA_TAG_ICON);
@@ -157,10 +157,9 @@
          */
         public Builder(
                 @NonNull Context context,
-                @NonNull androidx.wear.tiles.ModifiersBuilders.Clickable clickable,
-                @NonNull
-                        androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
-                                deviceParameters) {
+                androidx.wear.tiles.ModifiersBuilders.@NonNull Clickable clickable,
+                androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
+                        deviceParameters) {
             mContext = context;
             mClickable = clickable;
             mWidth =
@@ -174,9 +173,8 @@
         /**
          * Sets the width of {@link Chip}. If not set, default value will be set to fill the screen.
          */
-        @NonNull
-        public Builder setWidth(
-                @NonNull androidx.wear.tiles.DimensionBuilders.ContainerDimension width) {
+        public @NonNull Builder setWidth(
+                androidx.wear.tiles.DimensionBuilders.@NonNull ContainerDimension width) {
             mWidth = width;
             return this;
         }
@@ -185,8 +183,7 @@
          * Sets the width of {@link TitleChip}. If not set, default value will be set to fill the
          * screen.
          */
-        @NonNull
-        public Builder setWidth(@Dimension(unit = DP) float width) {
+        public @NonNull Builder setWidth(@Dimension(unit = DP) float width) {
             mWidth = androidx.wear.tiles.DimensionBuilders.dp(width);
             return this;
         }
@@ -195,9 +192,8 @@
          * Sets the custom content for the {@link Chip}. Any previously added content will be
          * overridden.
          */
-        @NonNull
-        public Builder setCustomContent(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement content) {
+        public @NonNull Builder setCustomContent(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement content) {
             this.mCustomContent = content;
             this.mPrimaryLabel = "";
             this.mSecondaryLabel = "";
@@ -209,8 +205,7 @@
          * Sets the content description for the {@link Chip}. It is highly recommended to provide
          * this for chip containing icon.
          */
-        @NonNull
-        public Builder setContentDescription(@NonNull CharSequence contentDescription) {
+        public @NonNull Builder setContentDescription(@NonNull CharSequence contentDescription) {
             this.mContentDescription = contentDescription;
             return this;
         }
@@ -220,8 +215,7 @@
          * overridden. Primary label can be on 1 or 2 lines, depending on the length and existence
          * of secondary label.
          */
-        @NonNull
-        public Builder setPrimaryLabelContent(@NonNull String primaryLabel) {
+        public @NonNull Builder setPrimaryLabelContent(@NonNull String primaryLabel) {
             this.mPrimaryLabel = primaryLabel;
             this.mCustomContent = null;
             return this;
@@ -232,8 +226,7 @@
          *
          * <p>Sets the font for the primary label and should only be used internally.
          */
-        @NonNull
-        Builder setPrimaryLabelTypography(@Typography.TypographyName int typography) {
+        @NonNull Builder setPrimaryLabelTypography(@Typography.TypographyName int typography) {
             this.mPrimaryLabelTypography = typography;
             return this;
         }
@@ -243,8 +236,7 @@
          *
          * <p>Sets whether the font for the primary label is scalable.
          */
-        @NonNull
-        Builder setIsPrimaryLabelScalable(boolean isScalable) {
+        @NonNull Builder setIsPrimaryLabelScalable(boolean isScalable) {
             this.mIsScalable = isScalable;
             return this;
         }
@@ -254,8 +246,7 @@
          * be overridden. If secondary label is set, primary label must be set too with {@link
          * #setPrimaryLabelContent}.
          */
-        @NonNull
-        public Builder setSecondaryLabelContent(@NonNull String secondaryLabel) {
+        public @NonNull Builder setSecondaryLabelContent(@NonNull String secondaryLabel) {
             this.mSecondaryLabel = secondaryLabel;
             this.mCustomContent = null;
             return this;
@@ -267,8 +258,7 @@
          * ChipColors}. This icon should be image with chosen alpha channel and not an actual image.
          * If icon is set, primary label must be set too with {@link #setPrimaryLabelContent}.
          */
-        @NonNull
-        public Builder setIconContent(@NonNull String imageResourceId) {
+        public @NonNull Builder setIconContent(@NonNull String imageResourceId) {
             this.mImageResourceId = imageResourceId;
             this.mCustomContent = null;
             return this;
@@ -281,8 +271,7 @@
          * ChipColors#getIconColor()} will be used as color for the icon itself. If not set, {@link
          * ChipDefaults#PRIMARY_COLORS} will be used.
          */
-        @NonNull
-        public Builder setChipColors(@NonNull ChipColors chipColors) {
+        public @NonNull Builder setChipColors(@NonNull ChipColors chipColors) {
             mChipColors = chipColors;
             return this;
         }
@@ -295,8 +284,7 @@
          * androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignment#HORIZONTAL_ALIGN_START}
          * will be used.
          */
-        @NonNull
-        public Builder setHorizontalAlignment(
+        public @NonNull Builder setHorizontalAlignment(
                 @androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignment
                         int horizontalAlignment) {
             mHorizontalAlign = horizontalAlignment;
@@ -304,38 +292,33 @@
         }
 
         /** Used for creating CompactChip and TitleChip. */
-        @NonNull
-        Builder setHorizontalPadding(
-                @NonNull androidx.wear.tiles.DimensionBuilders.DpProp horizontalPadding) {
+        @NonNull Builder setHorizontalPadding(
+                androidx.wear.tiles.DimensionBuilders.@NonNull DpProp horizontalPadding) {
             this.mHorizontalPadding = horizontalPadding;
             return this;
         }
 
         /** Used for creating CompactChip and TitleChip. */
-        @NonNull
-        Builder setHeight(@NonNull androidx.wear.tiles.DimensionBuilders.DpProp height) {
+        @NonNull Builder setHeight(androidx.wear.tiles.DimensionBuilders.@NonNull DpProp height) {
             this.mHeight = height;
             return this;
         }
 
         /** Used for creating CompactChip and TitleChip. */
-        @NonNull
-        Builder setMaxLines(int maxLines) {
+        @NonNull Builder setMaxLines(int maxLines) {
             this.mMaxLines = maxLines;
             return this;
         }
 
         /** Used for setting the correct tag in CompactChip and TitleChip. */
-        @NonNull
-        Builder setMetadataTag(@NonNull String metadataTag) {
+        @NonNull Builder setMetadataTag(@NonNull String metadataTag) {
             this.mMetadataTag = metadataTag;
             return this;
         }
 
         /** Constructs and returns {@link Chip} with the provided content and look. */
-        @NonNull
         @Override
-        public Chip build() {
+        public @NonNull Chip build() {
             androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder modifiers =
                     new androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder()
                             .setClickable(mClickable)
@@ -374,8 +357,7 @@
             return new Chip(element.build());
         }
 
-        @NonNull
-        private String getCorrectContentDescription() {
+        private @NonNull String getCorrectContentDescription() {
             if (mContentDescription.length() == 0) {
                 mContentDescription = "";
                 if (mPrimaryLabel != null) {
@@ -414,8 +396,8 @@
             return METADATA_TAG_TEXT;
         }
 
-        @NonNull
-        private androidx.wear.tiles.LayoutElementBuilders.LayoutElement getCorrectContent() {
+        private androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement
+                getCorrectContent() {
             if (mCustomContent != null) {
                 return mCustomContent;
             }
@@ -493,41 +475,36 @@
         }
 
         private androidx.wear.tiles.LayoutElementBuilders.Box.Builder putLayoutInBox(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement element) {
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement element) {
             // Wrapped and centered content are default.
             return new androidx.wear.tiles.LayoutElementBuilders.Box.Builder().addContent(element);
         }
     }
 
     /** Returns height of this Chip. */
-    @NonNull
-    public androidx.wear.tiles.DimensionBuilders.ContainerDimension getHeight() {
+    public androidx.wear.tiles.DimensionBuilders.@NonNull ContainerDimension getHeight() {
         return Helper.checkNotNull(mElement.getHeight());
     }
 
     /** Returns width of this Chip. */
-    @NonNull
-    public androidx.wear.tiles.DimensionBuilders.ContainerDimension getWidth() {
+    public androidx.wear.tiles.DimensionBuilders.@NonNull ContainerDimension getWidth() {
         return Helper.checkNotNull(mElement.getWidth());
     }
 
     /** Returns click event action associated with this Chip. */
-    @NonNull
-    public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable() {
+    public androidx.wear.tiles.ModifiersBuilders.@NonNull Clickable getClickable() {
         return Helper.checkNotNull(Helper.checkNotNull(mElement.getModifiers()).getClickable());
     }
 
     /** Returns background color of this Chip. */
-    @NonNull
-    private androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor() {
+    private androidx.wear.tiles.ColorBuilders.@NonNull ColorProp getBackgroundColor() {
         return Helper.checkNotNull(
                 Helper.checkNotNull(Helper.checkNotNull(mElement.getModifiers()).getBackground())
                         .getColor());
     }
 
     /** Returns chip colors of this Chip. */
-    @NonNull
-    public ChipColors getChipColors() {
+    public @NonNull ChipColors getChipColors() {
         androidx.wear.tiles.ColorBuilders.ColorProp backgroundColor = getBackgroundColor();
         androidx.wear.tiles.ColorBuilders.ColorProp contentColor = null;
         androidx.wear.tiles.ColorBuilders.ColorProp secondaryContentColor = null;
@@ -563,8 +540,7 @@
     }
 
     /** Returns content description of this Chip. */
-    @Nullable
-    public CharSequence getContentDescription() {
+    public @Nullable CharSequence getContentDescription() {
         androidx.wear.tiles.ModifiersBuilders.Semantics semantics =
                 Helper.checkNotNull(mElement.getModifiers()).getSemantics();
         if (semantics == null) {
@@ -574,8 +550,7 @@
     }
 
     /** Returns custom content from this Chip if it has been added. Otherwise, it returns null. */
-    @Nullable
-    public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getCustomContent() {
+    public androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement getCustomContent() {
         if (getMetadataTag().equals(METADATA_TAG_CUSTOM_CONTENT)) {
             return Helper.checkNotNull(Helper.checkNotNull(mElement.getContents()).get(0));
         }
@@ -583,38 +558,32 @@
     }
 
     /** Returns primary label from this Chip if it has been added. Otherwise, it returns null. */
-    @Nullable
-    public String getPrimaryLabelContent() {
+    public @Nullable String getPrimaryLabelContent() {
         Text primaryLabel = getPrimaryLabelContentObject();
         return primaryLabel != null ? primaryLabel.getText() : null;
     }
 
     /** Returns secondary label from this Chip if it has been added. Otherwise, it returns null. */
-    @Nullable
-    public String getSecondaryLabelContent() {
+    public @Nullable String getSecondaryLabelContent() {
         Text label = getSecondaryLabelContentObject();
         return label != null ? label.getText() : null;
     }
 
     /** Returns icon id from this Chip if it has been added. Otherwise, it returns null. */
-    @Nullable
-    public String getIconContent() {
+    public @Nullable String getIconContent() {
         androidx.wear.tiles.LayoutElementBuilders.Image icon = getIconContentObject();
         return icon != null ? Helper.checkNotNull(icon.getResourceId()).getValue() : null;
     }
 
-    @Nullable
-    private Text getPrimaryLabelContentObject() {
+    private @Nullable Text getPrimaryLabelContentObject() {
         return getPrimaryOrSecondaryLabelContent(0);
     }
 
-    @Nullable
-    private Text getSecondaryLabelContentObject() {
+    private @Nullable Text getSecondaryLabelContentObject() {
         return getPrimaryOrSecondaryLabelContent(1);
     }
 
-    @Nullable
-    private androidx.wear.tiles.LayoutElementBuilders.Image getIconContentObject() {
+    private androidx.wear.tiles.LayoutElementBuilders.@Nullable Image getIconContentObject() {
         if (!getMetadataTag().equals(METADATA_TAG_ICON)) {
             return null;
         }
@@ -624,8 +593,7 @@
                         .get(0));
     }
 
-    @Nullable
-    private Text getPrimaryOrSecondaryLabelContent(int index) {
+    private @Nullable Text getPrimaryOrSecondaryLabelContent(int index) {
         String metadataTag = getMetadataTag();
         if (metadataTag.equals(METADATA_TAG_CUSTOM_CONTENT)) {
             return null;
@@ -669,8 +637,7 @@
     }
 
     /** Returns metadata tag set to this Chip. */
-    @NonNull
-    String getMetadataTag() {
+    @NonNull String getMetadataTag() {
         return Helper.getMetadataTagName(
                 Helper.checkNotNull(Helper.checkNotNull(mElement.getModifiers()).getMetadata()));
     }
@@ -681,9 +648,8 @@
      * container.getContents().get(index)}) if that element can be converted to Chip. Otherwise, it
      * will return null.
      */
-    @Nullable
-    public static Chip fromLayoutElement(
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement element) {
+    public static @Nullable Chip fromLayoutElement(
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement element) {
         if (element instanceof Chip) {
             return (Chip) element;
         }
@@ -699,17 +665,15 @@
         return new Chip(boxElement);
     }
 
-    @NonNull
     @Override
     @RestrictTo(Scope.LIBRARY_GROUP)
-    public LayoutElementProto.LayoutElement toLayoutElementProto() {
+    public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
         return mElement.toLayoutElementProto();
     }
 
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @Nullable
     @Override
-    public Fingerprint getFingerprint() {
+    public @Nullable Fingerprint getFingerprint() {
         return mElement.getFingerprint();
     }
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ChipColors.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ChipColors.java
index 18ae16e..8eb19b4 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ChipColors.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ChipColors.java
@@ -17,7 +17,8 @@
 package androidx.wear.tiles.material;
 
 import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
+
+import org.jspecify.annotations.NonNull;
 
 /**
  * Represents the background and content colors used in a chip Tiles component.
@@ -32,10 +33,10 @@
 @Deprecated
 @SuppressWarnings("deprecation")
 public class ChipColors {
-    @NonNull private final androidx.wear.tiles.ColorBuilders.ColorProp mBackgroundColor;
-    @NonNull private final androidx.wear.tiles.ColorBuilders.ColorProp mIconColor;
-    @NonNull private final androidx.wear.tiles.ColorBuilders.ColorProp mContentColor;
-    @NonNull private final androidx.wear.tiles.ColorBuilders.ColorProp mSecondaryContentColor;
+    private final androidx.wear.tiles.ColorBuilders.@NonNull ColorProp mBackgroundColor;
+    private final androidx.wear.tiles.ColorBuilders.@NonNull ColorProp mIconColor;
+    private final androidx.wear.tiles.ColorBuilders.@NonNull ColorProp mContentColor;
+    private final androidx.wear.tiles.ColorBuilders.@NonNull ColorProp mSecondaryContentColor;
 
     /**
      * Constructor for the {@link ChipColors} object.
@@ -85,10 +86,10 @@
      *     component.
      */
     public ChipColors(
-            @NonNull androidx.wear.tiles.ColorBuilders.ColorProp backgroundColor,
-            @NonNull androidx.wear.tiles.ColorBuilders.ColorProp iconColor,
-            @NonNull androidx.wear.tiles.ColorBuilders.ColorProp contentColor,
-            @NonNull androidx.wear.tiles.ColorBuilders.ColorProp secondaryContentColor) {
+            androidx.wear.tiles.ColorBuilders.@NonNull ColorProp backgroundColor,
+            androidx.wear.tiles.ColorBuilders.@NonNull ColorProp iconColor,
+            androidx.wear.tiles.ColorBuilders.@NonNull ColorProp contentColor,
+            androidx.wear.tiles.ColorBuilders.@NonNull ColorProp secondaryContentColor) {
         mBackgroundColor = backgroundColor;
         mIconColor = iconColor;
         mContentColor = contentColor;
@@ -102,8 +103,8 @@
      * @param contentColor The content color to be used for all items inside a chip Tiles component.
      */
     public ChipColors(
-            @NonNull androidx.wear.tiles.ColorBuilders.ColorProp backgroundColor,
-            @NonNull androidx.wear.tiles.ColorBuilders.ColorProp contentColor) {
+            androidx.wear.tiles.ColorBuilders.@NonNull ColorProp backgroundColor,
+            androidx.wear.tiles.ColorBuilders.@NonNull ColorProp contentColor) {
         mBackgroundColor = backgroundColor;
         mIconColor = contentColor;
         mContentColor = contentColor;
@@ -114,8 +115,7 @@
      * Returns a {@link ChipColors} object, using the current Primary colors from the given {@link
      * Colors}.
      */
-    @NonNull
-    public static ChipColors primaryChipColors(@NonNull Colors colors) {
+    public static @NonNull ChipColors primaryChipColors(@NonNull Colors colors) {
         return new ChipColors(colors.getPrimary(), colors.getOnPrimary());
     }
 
@@ -123,32 +123,27 @@
      * Returns a {@link ChipColors} object, using the current Surface colors from the given {@link
      * Colors}.
      */
-    @NonNull
-    public static ChipColors secondaryChipColors(@NonNull Colors colors) {
+    public static @NonNull ChipColors secondaryChipColors(@NonNull Colors colors) {
         return new ChipColors(colors.getSurface(), colors.getOnSurface());
     }
 
     /** The background color to be used on a chip Tiles components. */
-    @NonNull
-    public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor() {
+    public androidx.wear.tiles.ColorBuilders.@NonNull ColorProp getBackgroundColor() {
         return mBackgroundColor;
     }
 
     /** The icon color to be used on a chip Tiles components. */
-    @NonNull
-    public androidx.wear.tiles.ColorBuilders.ColorProp getIconColor() {
+    public androidx.wear.tiles.ColorBuilders.@NonNull ColorProp getIconColor() {
         return mIconColor;
     }
 
     /** The main text color to be used on a chip Tiles components. */
-    @NonNull
-    public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor() {
+    public androidx.wear.tiles.ColorBuilders.@NonNull ColorProp getContentColor() {
         return mContentColor;
     }
 
     /** The label text color to be used on a chip Tiles components. */
-    @NonNull
-    public androidx.wear.tiles.ColorBuilders.ColorProp getSecondaryContentColor() {
+    public androidx.wear.tiles.ColorBuilders.@NonNull ColorProp getSecondaryContentColor() {
         return mSecondaryContentColor;
     }
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ChipDefaults.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ChipDefaults.java
index ccdc94d..f848a1e 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ChipDefaults.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ChipDefaults.java
@@ -16,10 +16,11 @@
 
 package androidx.wear.tiles.material;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Contains the default values used by chip Tiles components.
  *
@@ -33,26 +34,22 @@
 
     /** The default height for standard {@link Chip} */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_HEIGHT =
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp DEFAULT_HEIGHT =
             androidx.wear.tiles.DimensionBuilders.dp(52);
 
     /** The default height for standard {@link CompactChip} */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp COMPACT_HEIGHT =
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp COMPACT_HEIGHT =
             androidx.wear.tiles.DimensionBuilders.dp(32);
 
     /** The default height of tappable area for standard {@link CompactChip} */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp COMPACT_HEIGHT_TAPPABLE =
-            androidx.wear.tiles.DimensionBuilders.dp(48);
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp
+            COMPACT_HEIGHT_TAPPABLE = androidx.wear.tiles.DimensionBuilders.dp(48);
 
     /** The default height for standard {@link TitleChip} */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp TITLE_HEIGHT =
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp TITLE_HEIGHT =
             androidx.wear.tiles.DimensionBuilders.dp(60);
 
     /** The recommended horizontal margin used for width for standard {@link Chip} */
@@ -61,60 +58,50 @@
 
     /** The recommended horizontal padding for standard {@link Chip} */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp HORIZONTAL_PADDING =
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp HORIZONTAL_PADDING =
             androidx.wear.tiles.DimensionBuilders.dp(14);
 
     /** The recommended horizontal padding for standard {@link CompactChip} */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp COMPACT_HORIZONTAL_PADDING =
-            androidx.wear.tiles.DimensionBuilders.dp(12);
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp
+            COMPACT_HORIZONTAL_PADDING = androidx.wear.tiles.DimensionBuilders.dp(12);
 
     /** The recommended horizontal padding for standard {@link TitleChip} */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp TITLE_HORIZONTAL_PADDING =
-            androidx.wear.tiles.DimensionBuilders.dp(16);
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp
+            TITLE_HORIZONTAL_PADDING = androidx.wear.tiles.DimensionBuilders.dp(16);
 
     /** The recommended vertical space between icon and text in standard {@link Chip} */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp ICON_SPACER_WIDTH =
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp ICON_SPACER_WIDTH =
             androidx.wear.tiles.DimensionBuilders.dp(6);
 
     /** The icon size used in standard {@link Chip} */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp ICON_SIZE =
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp ICON_SIZE =
             androidx.wear.tiles.DimensionBuilders.dp(24);
 
     /** The recommended colors for a primary {@link Chip}. */
-    @NonNull
-    public static final ChipColors PRIMARY_COLORS = ChipColors.primaryChipColors(Colors.DEFAULT);
+    public static final @NonNull ChipColors PRIMARY_COLORS =
+            ChipColors.primaryChipColors(Colors.DEFAULT);
 
     /** The recommended colors for a secondary {@link Chip}. */
-    @NonNull
-    public static final ChipColors SECONDARY_COLORS =
+    public static final @NonNull ChipColors SECONDARY_COLORS =
             ChipColors.secondaryChipColors(Colors.DEFAULT);
 
     /** The recommended colors for a primary {@link CompactChip}. */
-    @NonNull
-    public static final ChipColors COMPACT_PRIMARY_COLORS =
+    public static final @NonNull ChipColors COMPACT_PRIMARY_COLORS =
             ChipColors.primaryChipColors(Colors.DEFAULT);
 
     /** The recommended colors for a secondary {@link CompactChip}. */
-    @NonNull
-    public static final ChipColors COMPACT_SECONDARY_COLORS =
+    public static final @NonNull ChipColors COMPACT_SECONDARY_COLORS =
             ChipColors.secondaryChipColors(Colors.DEFAULT);
 
     /** The recommended colors for a primary {@link TitleChip}. */
-    @NonNull
-    public static final ChipColors TITLE_PRIMARY_COLORS =
+    public static final @NonNull ChipColors TITLE_PRIMARY_COLORS =
             ChipColors.primaryChipColors(Colors.DEFAULT);
 
     /** The recommended colors for a secondary {@link TitleChip}. */
-    @NonNull
-    public static final ChipColors TITLE_SECONDARY_COLORS =
+    public static final @NonNull ChipColors TITLE_SECONDARY_COLORS =
             ChipColors.secondaryChipColors(Colors.DEFAULT);
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/CircularProgressIndicator.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/CircularProgressIndicator.java
index 4e83a9a..a417faf 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/CircularProgressIndicator.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/CircularProgressIndicator.java
@@ -20,13 +20,14 @@
 
 import androidx.annotation.Dimension;
 import androidx.annotation.FloatRange;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Tiles component {@link CircularProgressIndicator} that represents circular progress indicator
  * which supports a gap in the circular track between startAngle and endAngle. [Progress Indicator
@@ -76,11 +77,11 @@
      */
     static final String METADATA_TAG = "CPI";
 
-    @NonNull private final androidx.wear.tiles.LayoutElementBuilders.Arc mElement;
-    @NonNull private final androidx.wear.tiles.LayoutElementBuilders.ArcLine mProgress;
-    @NonNull private final androidx.wear.tiles.LayoutElementBuilders.ArcLine mBackground;
+    private final androidx.wear.tiles.LayoutElementBuilders.@NonNull Arc mElement;
+    private final androidx.wear.tiles.LayoutElementBuilders.@NonNull ArcLine mProgress;
+    private final androidx.wear.tiles.LayoutElementBuilders.@NonNull ArcLine mBackground;
 
-    CircularProgressIndicator(@NonNull androidx.wear.tiles.LayoutElementBuilders.Arc element) {
+    CircularProgressIndicator(androidx.wear.tiles.LayoutElementBuilders.@NonNull Arc element) {
         this.mElement = element;
         this.mBackground =
                 (androidx.wear.tiles.LayoutElementBuilders.ArcLine) element.getContents().get(0);
@@ -91,23 +92,19 @@
     /** Builder class for {@link CircularProgressIndicator} */
     public static final class Builder
             implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-        @NonNull
-        private ProgressIndicatorColors mCircularProgressIndicatorColors =
+        private @NonNull ProgressIndicatorColors mCircularProgressIndicatorColors =
                 ProgressIndicatorDefaults.DEFAULT_COLORS;
 
-        @NonNull
-        private androidx.wear.tiles.DimensionBuilders.DpProp mStrokeWidth =
+        private androidx.wear.tiles.DimensionBuilders.@NonNull DpProp mStrokeWidth =
                 ProgressIndicatorDefaults.DEFAULT_STROKE_WIDTH;
 
-        @NonNull private CharSequence mContentDescription = "";
+        private @NonNull CharSequence mContentDescription = "";
 
-        @NonNull
-        private androidx.wear.tiles.DimensionBuilders.DegreesProp mStartAngle =
+        private androidx.wear.tiles.DimensionBuilders.@NonNull DegreesProp mStartAngle =
                 androidx.wear.tiles.DimensionBuilders.degrees(
                         ProgressIndicatorDefaults.DEFAULT_START_ANGLE);
 
-        @NonNull
-        private androidx.wear.tiles.DimensionBuilders.DegreesProp mEndAngle =
+        private androidx.wear.tiles.DimensionBuilders.@NonNull DegreesProp mEndAngle =
                 androidx.wear.tiles.DimensionBuilders.degrees(
                         ProgressIndicatorDefaults.DEFAULT_END_ANGLE);
 
@@ -122,8 +119,8 @@
          * from 0 to 1. Progress will be colored in {@link ProgressIndicatorColors#getTrackColor}.
          * If not set, 0 will be used.
          */
-        @NonNull
-        public Builder setProgress(@FloatRange(from = 0, to = 1) float progressPercentage) {
+        public @NonNull Builder setProgress(
+                @FloatRange(from = 0, to = 1) float progressPercentage) {
             this.mProgress = progressPercentage;
             return this;
         }
@@ -134,8 +131,7 @@
          * start arc from the 9 o'clock. If not set 0 will be used and the indicator will have full
          * length.
          */
-        @NonNull
-        public Builder setStartAngle(float startAngle) {
+        public @NonNull Builder setStartAngle(float startAngle) {
             this.mStartAngle = androidx.wear.tiles.DimensionBuilders.degrees(startAngle);
             return this;
         }
@@ -145,8 +141,7 @@
          * 0 is 12 o'clock. End angle doesn't need to be within 0-360 range, but it must be larger
          * than start angle. If not set 360 will be used and the indicator will have full length.
          */
-        @NonNull
-        public Builder setEndAngle(float endAngle) {
+        public @NonNull Builder setEndAngle(float endAngle) {
             this.mEndAngle = androidx.wear.tiles.DimensionBuilders.degrees(endAngle);
             return this;
         }
@@ -155,8 +150,7 @@
          * Sets the content description of the {@link CircularProgressIndicator} to be used for
          * accessibility support.
          */
-        @NonNull
-        public Builder setContentDescription(@NonNull CharSequence contentDescription) {
+        public @NonNull Builder setContentDescription(@NonNull CharSequence contentDescription) {
             this.mContentDescription = contentDescription;
             return this;
         }
@@ -167,8 +161,7 @@
          * made, while {@link ProgressIndicatorColors#getTrackColor()} will be used for a background
          * full size arc. If not set, {@link ProgressIndicatorDefaults#DEFAULT_COLORS} will be used.
          */
-        @NonNull
-        public Builder setCircularProgressIndicatorColors(
+        public @NonNull Builder setCircularProgressIndicatorColors(
                 @NonNull ProgressIndicatorColors circularProgressIndicatorColors) {
             this.mCircularProgressIndicatorColors = circularProgressIndicatorColors;
             return this;
@@ -178,9 +171,8 @@
          * Sets the stroke width of the {@link CircularProgressIndicator}. Strongly recommended
          * value is {@link ProgressIndicatorDefaults#DEFAULT_STROKE_WIDTH}.
          */
-        @NonNull
-        public Builder setStrokeWidth(
-                @NonNull androidx.wear.tiles.DimensionBuilders.DpProp strokeWidth) {
+        public @NonNull Builder setStrokeWidth(
+                androidx.wear.tiles.DimensionBuilders.@NonNull DpProp strokeWidth) {
             this.mStrokeWidth = strokeWidth;
             return this;
         }
@@ -189,8 +181,7 @@
          * Sets the stroke width of the {@link CircularProgressIndicator}. Strongly recommended
          * value is {@link ProgressIndicatorDefaults#DEFAULT_STROKE_WIDTH}.
          */
-        @NonNull
-        public Builder setStrokeWidth(@Dimension(unit = DP) float strokeWidth) {
+        public @NonNull Builder setStrokeWidth(@Dimension(unit = DP) float strokeWidth) {
             this.mStrokeWidth = androidx.wear.tiles.DimensionBuilders.dp(strokeWidth);
             return this;
         }
@@ -199,9 +190,8 @@
          * Constructs and returns {@link CircularProgressIndicator} with the provided field and
          * look.
          */
-        @NonNull
         @Override
-        public CircularProgressIndicator build() {
+        public @NonNull CircularProgressIndicator build() {
             checkAngles();
 
             androidx.wear.tiles.DimensionBuilders.DegreesProp length = getLength();
@@ -268,8 +258,7 @@
             }
         }
 
-        @NonNull
-        private androidx.wear.tiles.DimensionBuilders.DegreesProp getLength() {
+        private androidx.wear.tiles.DimensionBuilders.@NonNull DegreesProp getLength() {
             float startAngle = mStartAngle.getValue();
             float endAngle = mEndAngle.getValue();
             if (endAngle <= startAngle) {
@@ -280,26 +269,22 @@
     }
 
     /** Returns angle representing progressed part of this CircularProgressIndicator. */
-    @NonNull
-    public androidx.wear.tiles.DimensionBuilders.DegreesProp getProgress() {
+    public androidx.wear.tiles.DimensionBuilders.@NonNull DegreesProp getProgress() {
         return androidx.wear.tiles.material.Helper.checkNotNull(mProgress.getLength());
     }
 
     /** Returns stroke width of this CircularProgressIndicator. */
-    @NonNull
-    public androidx.wear.tiles.DimensionBuilders.DpProp getStrokeWidth() {
+    public androidx.wear.tiles.DimensionBuilders.@NonNull DpProp getStrokeWidth() {
         return androidx.wear.tiles.material.Helper.checkNotNull(mProgress.getThickness());
     }
 
     /** Returns start angle of this CircularProgressIndicator. */
-    @NonNull
-    public androidx.wear.tiles.DimensionBuilders.DegreesProp getStartAngle() {
+    public androidx.wear.tiles.DimensionBuilders.@NonNull DegreesProp getStartAngle() {
         return androidx.wear.tiles.material.Helper.checkNotNull(mElement.getAnchorAngle());
     }
 
     /** Returns start angle of this CircularProgressIndicator. */
-    @NonNull
-    public androidx.wear.tiles.DimensionBuilders.DegreesProp getEndAngle() {
+    public androidx.wear.tiles.DimensionBuilders.@NonNull DegreesProp getEndAngle() {
         float backArcLength =
                 androidx.wear.tiles.material.Helper.checkNotNull(mBackground.getLength())
                         .getValue();
@@ -308,16 +293,14 @@
     }
 
     /** Returns main arc color of this CircularProgressIndicator. */
-    @NonNull
-    public ProgressIndicatorColors getCircularProgressIndicatorColors() {
+    public @NonNull ProgressIndicatorColors getCircularProgressIndicatorColors() {
         return new ProgressIndicatorColors(
                 androidx.wear.tiles.material.Helper.checkNotNull(mProgress.getColor()),
                 androidx.wear.tiles.material.Helper.checkNotNull(mBackground.getColor()));
     }
 
     /** Returns content description of this CircularProgressIndicator. */
-    @Nullable
-    public CharSequence getContentDescription() {
+    public @Nullable CharSequence getContentDescription() {
         androidx.wear.tiles.ModifiersBuilders.Semantics semantics =
                 androidx.wear.tiles.material.Helper.checkNotNull(mElement.getModifiers())
                         .getSemantics();
@@ -331,8 +314,7 @@
      * Returns metadata tag set to this CircularProgressIndicator, which should be {@link
      * #METADATA_TAG}.
      */
-    @NonNull
-    String getMetadataTag() {
+    @NonNull String getMetadataTag() {
         return androidx.wear.tiles.material.Helper.getMetadataTagName(
                 androidx.wear.tiles.material.Helper.checkNotNull(
                         androidx.wear.tiles.material.Helper.checkNotNull(mElement.getModifiers())
@@ -345,9 +327,8 @@
      * container's content with {@code container.getContents().get(index)}) if that element can be
      * converted to CircularProgressIndicator. Otherwise, it will return null.
      */
-    @Nullable
-    public static CircularProgressIndicator fromLayoutElement(
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement element) {
+    public static @Nullable CircularProgressIndicator fromLayoutElement(
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement element) {
         if (element instanceof CircularProgressIndicator) {
             return (CircularProgressIndicator) element;
         }
@@ -364,17 +345,15 @@
         return new CircularProgressIndicator(arcElement);
     }
 
-    @NonNull
     @Override
     @RestrictTo(Scope.LIBRARY_GROUP)
-    public LayoutElementProto.LayoutElement toLayoutElementProto() {
+    public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
         return mElement.toLayoutElementProto();
     }
 
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @Nullable
     @Override
-    public Fingerprint getFingerprint() {
+    public @Nullable Fingerprint getFingerprint() {
         return mElement.getFingerprint();
     }
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Colors.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Colors.java
index f638b1f..63af19d 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Colors.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Colors.java
@@ -17,10 +17,11 @@
 package androidx.wear.tiles.material;
 
 import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Represent the container for default color scheme in your Tile, that can be used to create color
  * objects for all Material components.
@@ -55,8 +56,8 @@
     public static final int ON_SURFACE = 0xFFFFFFFF;
 
     /** The default color scheme to be used in Tiles Material components. */
-    @NonNull
-    public static final Colors DEFAULT = new Colors(PRIMARY, ON_PRIMARY, SURFACE, ON_SURFACE);
+    public static final @NonNull Colors DEFAULT =
+            new Colors(PRIMARY, ON_PRIMARY, SURFACE, ON_SURFACE);
 
     private @ColorInt final int mPrimary;
     private @ColorInt final int mOnPrimary;
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/CompactChip.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/CompactChip.java
index ef9e6ba..bde902d 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/CompactChip.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/CompactChip.java
@@ -18,13 +18,14 @@
 
 import android.content.Context;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Tiles component {@link CompactChip} that represents clickable object with the text.
  *
@@ -67,10 +68,10 @@
      */
     static final String METADATA_TAG = "CMPCHP";
 
-    @NonNull private final androidx.wear.tiles.LayoutElementBuilders.Box mImpl;
-    @NonNull private final Chip mElement;
+    private final androidx.wear.tiles.LayoutElementBuilders.@NonNull Box mImpl;
+    private final @NonNull Chip mElement;
 
-    CompactChip(@NonNull androidx.wear.tiles.LayoutElementBuilders.Box element) {
+    CompactChip(androidx.wear.tiles.LayoutElementBuilders.@NonNull Box element) {
         this.mImpl = element;
         // We know for sure that content of the androidx.wear.tiles.LayoutElementBuilders.Box is
         // Chip.
@@ -83,15 +84,14 @@
     /** Builder class for {@link androidx.wear.tiles.material.CompactChip}. */
     public static final class Builder
             implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-        @NonNull private final Context mContext;
-        @NonNull private final String mText;
-        @NonNull private final androidx.wear.tiles.ModifiersBuilders.Clickable mClickable;
+        private final @NonNull Context mContext;
+        private final @NonNull String mText;
+        private final androidx.wear.tiles.ModifiersBuilders.@NonNull Clickable mClickable;
 
-        @NonNull
-        private final androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
+        private final androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
                 mDeviceParameters;
 
-        @NonNull private ChipColors mChipColors = ChipDefaults.COMPACT_PRIMARY_COLORS;
+        private @NonNull ChipColors mChipColors = ChipDefaults.COMPACT_PRIMARY_COLORS;
 
         /**
          * Creates a builder for the {@link CompactChip} with associated action and the given text
@@ -105,9 +105,8 @@
         public Builder(
                 @NonNull Context context,
                 @NonNull String text,
-                @NonNull androidx.wear.tiles.ModifiersBuilders.Clickable clickable,
-                @NonNull
-                        androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
+                androidx.wear.tiles.ModifiersBuilders.@NonNull Clickable clickable,
+                androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
                                 deviceParameters) {
             this.mContext = context;
             this.mText = text;
@@ -121,16 +120,14 @@
          * ChipColors#getContentColor()} for the text. If not set, {@link
          * ChipDefaults#COMPACT_PRIMARY_COLORS} will be used.
          */
-        @NonNull
-        public Builder setChipColors(@NonNull ChipColors chipColors) {
+        public @NonNull Builder setChipColors(@NonNull ChipColors chipColors) {
             mChipColors = chipColors;
             return this;
         }
 
         /** Constructs and returns {@link CompactChip} with the provided content and look. */
-        @NonNull
         @Override
-        public CompactChip build() {
+        public @NonNull CompactChip build() {
             Chip.Builder chipBuilder =
                     new Chip.Builder(mContext, mClickable, mDeviceParameters)
                             .setMetadataTag(METADATA_TAG)
@@ -173,26 +170,22 @@
     }
 
     /** Returns click event action associated with this Chip. */
-    @NonNull
-    public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable() {
+    public androidx.wear.tiles.ModifiersBuilders.@NonNull Clickable getClickable() {
         return mElement.getClickable();
     }
 
     /** Returns chip color of this Chip. */
-    @NonNull
-    public ChipColors getChipColors() {
+    public @NonNull ChipColors getChipColors() {
         return mElement.getChipColors();
     }
 
     /** Returns text content of this Chip. */
-    @NonNull
-    public String getText() {
+    public @NonNull String getText() {
         return androidx.wear.tiles.material.Helper.checkNotNull(mElement.getPrimaryLabelContent());
     }
 
     /** Returns metadata tag set to this CompactChip, which should be {@link #METADATA_TAG}. */
-    @NonNull
-    String getMetadataTag() {
+    @NonNull String getMetadataTag() {
         return mElement.getMetadataTag();
     }
 
@@ -202,9 +195,8 @@
      * container's content with {@code container.getContents().get(index)}) if that element can be
      * converted to CompactChip. Otherwise, it will return null.
      */
-    @Nullable
-    public static CompactChip fromLayoutElement(
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement element) {
+    public static @Nullable CompactChip fromLayoutElement(
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement element) {
         if (element instanceof CompactChip) {
             return (CompactChip) element;
         }
@@ -236,16 +228,14 @@
     }
 
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
     @Override
-    public LayoutElementProto.LayoutElement toLayoutElementProto() {
+    public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
         return mImpl.toLayoutElementProto();
     }
 
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @Nullable
     @Override
-    public Fingerprint getFingerprint() {
+    public @Nullable Fingerprint getFingerprint() {
         return mImpl.getFingerprint();
     }
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Helper.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Helper.java
index d81e33f..8253cba 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Helper.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Helper.java
@@ -16,11 +16,12 @@
 
 package androidx.wear.tiles.material;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Collection;
@@ -39,8 +40,7 @@
 
     /** Returns given value if not null or throws {@code NullPointerException} otherwise. */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static <T> T checkNotNull(@Nullable T value) {
+    public static <T> @NonNull T checkNotNull(@Nullable T value) {
         if (value == null) {
             throw new NullPointerException();
         }
@@ -50,8 +50,7 @@
     /**
      * Returns radius in {@link androidx.wear.tiles.DimensionBuilders.DpProp} of the given diameter.
      */
-    @NonNull
-    static androidx.wear.tiles.DimensionBuilders.DpProp radiusOf(
+    static androidx.wear.tiles.DimensionBuilders.@NonNull DpProp radiusOf(
             androidx.wear.tiles.DimensionBuilders.DpProp diameter) {
         return androidx.wear.tiles.DimensionBuilders.dp(diameter.getValue() / 2);
     }
@@ -62,8 +61,7 @@
      */
     @RestrictTo(Scope.LIBRARY_GROUP)
     public static boolean isRoundDevice(
-            @NonNull
-                    androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
+            androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
                             deviceParameters) {
         return deviceParameters.getScreenShape()
                 == androidx.wear.tiles.DeviceParametersBuilders.SCREEN_SHAPE_ROUND;
@@ -71,15 +69,13 @@
 
     /** Returns String representation of tag from byte array. */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static String getTagName(@NonNull byte[] tagData) {
+    public static @NonNull String getTagName(byte @NonNull [] tagData) {
         return new String(tagData, StandardCharsets.UTF_8);
     }
 
     /** Returns byte array representation of tag from String. */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static byte[] getTagBytes(@NonNull String tagName) {
+    public static byte @NonNull [] getTagBytes(@NonNull String tagName) {
         return tagName.getBytes(StandardCharsets.UTF_8);
     }
 
@@ -87,9 +83,8 @@
      * Returns the String representation of metadata tag from the given
      * androidx.wear.tiles.ModifiersBuilders.ElementMetadata.
      */
-    @NonNull
-    public static String getMetadataTagName(
-            @NonNull androidx.wear.tiles.ModifiersBuilders.ElementMetadata metadata) {
+    public static @NonNull String getMetadataTagName(
+            androidx.wear.tiles.ModifiersBuilders.@NonNull ElementMetadata metadata) {
         return getTagName(getMetadataTagBytes(metadata));
     }
 
@@ -97,9 +92,8 @@
      * Returns the metadata tag from the given
      * androidx.wear.tiles.ModifiersBuilders.ElementMetadata.
      */
-    @NonNull
-    public static byte[] getMetadataTagBytes(
-            @NonNull androidx.wear.tiles.ModifiersBuilders.ElementMetadata metadata) {
+    public static byte @NonNull [] getMetadataTagBytes(
+            androidx.wear.tiles.ModifiersBuilders.@NonNull ElementMetadata metadata) {
         return checkNotNull(metadata).getTagData();
     }
 
@@ -108,7 +102,7 @@
      * set to the given String value.
      */
     public static boolean checkTag(
-            @Nullable androidx.wear.tiles.ModifiersBuilders.Modifiers modifiers,
+            androidx.wear.tiles.ModifiersBuilders.@Nullable Modifiers modifiers,
             @NonNull String validTag) {
         return modifiers != null
                 && modifiers.getMetadata() != null
@@ -120,7 +114,7 @@
      * set to any of the value in the given String collection.
      */
     public static boolean checkTag(
-            @Nullable androidx.wear.tiles.ModifiersBuilders.Modifiers modifiers,
+            androidx.wear.tiles.ModifiersBuilders.@Nullable Modifiers modifiers,
             @NonNull Collection<String> validTags) {
         return modifiers != null
                 && modifiers.getMetadata() != null
@@ -132,9 +126,9 @@
      * set with prefix that is equal to the given String and its length is of the given base array.
      */
     public static boolean checkTag(
-            @Nullable androidx.wear.tiles.ModifiersBuilders.Modifiers modifiers,
+            androidx.wear.tiles.ModifiersBuilders.@Nullable Modifiers modifiers,
             @NonNull String validPrefix,
-            @NonNull byte[] validBase) {
+            byte @NonNull [] validBase) {
         if (modifiers == null || modifiers.getMetadata() == null) {
             return false;
         }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ProgressIndicatorColors.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ProgressIndicatorColors.java
index 079f675f..04af668 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ProgressIndicatorColors.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ProgressIndicatorColors.java
@@ -17,7 +17,8 @@
 package androidx.wear.tiles.material;
 
 import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
+
+import org.jspecify.annotations.NonNull;
 
 /**
  * Represents the indicator and track colors used in a progress indicator Tiles component.
@@ -31,8 +32,8 @@
 @Deprecated
 @SuppressWarnings("deprecation")
 public class ProgressIndicatorColors {
-    @NonNull private final androidx.wear.tiles.ColorBuilders.ColorProp mIndicatorColor;
-    @NonNull private final androidx.wear.tiles.ColorBuilders.ColorProp mTrackColor;
+    private final androidx.wear.tiles.ColorBuilders.@NonNull ColorProp mIndicatorColor;
+    private final androidx.wear.tiles.ColorBuilders.@NonNull ColorProp mTrackColor;
 
     /**
      * Constructor for {@link ProgressIndicatorColors} object.
@@ -43,8 +44,8 @@
      *     component.
      */
     public ProgressIndicatorColors(
-            @NonNull androidx.wear.tiles.ColorBuilders.ColorProp indicatorColor,
-            @NonNull androidx.wear.tiles.ColorBuilders.ColorProp trackColor) {
+            androidx.wear.tiles.ColorBuilders.@NonNull ColorProp indicatorColor,
+            androidx.wear.tiles.ColorBuilders.@NonNull ColorProp trackColor) {
         this.mIndicatorColor = indicatorColor;
         this.mTrackColor = trackColor;
     }
@@ -67,20 +68,17 @@
      * indicator color and the current Surface color for the track color from the given {@link
      * Colors}.
      */
-    @NonNull
-    public static ProgressIndicatorColors progressIndicatorColors(@NonNull Colors colors) {
+    public static @NonNull ProgressIndicatorColors progressIndicatorColors(@NonNull Colors colors) {
         return new ProgressIndicatorColors(colors.getPrimary(), colors.getSurface());
     }
 
     /** The indicator color to be used for a progress indicator Tiles component. */
-    @NonNull
-    public androidx.wear.tiles.ColorBuilders.ColorProp getIndicatorColor() {
+    public androidx.wear.tiles.ColorBuilders.@NonNull ColorProp getIndicatorColor() {
         return mIndicatorColor;
     }
 
     /** The background track color to be used for a progress indicator Tiles component. */
-    @NonNull
-    public androidx.wear.tiles.ColorBuilders.ColorProp getTrackColor() {
+    public androidx.wear.tiles.ColorBuilders.@NonNull ColorProp getTrackColor() {
         return mTrackColor;
     }
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ProgressIndicatorDefaults.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ProgressIndicatorDefaults.java
index ef92913..54c2c5b 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ProgressIndicatorDefaults.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/ProgressIndicatorDefaults.java
@@ -16,10 +16,11 @@
 
 package androidx.wear.tiles.material;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Contains the default values used by {@link CircularProgressIndicator} Tiles components.
  *
@@ -33,19 +34,16 @@
     private ProgressIndicatorDefaults() {}
 
     /** The default stroke width for {@link CircularProgressIndicator} */
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_STROKE_WIDTH =
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp DEFAULT_STROKE_WIDTH =
             androidx.wear.tiles.DimensionBuilders.dp(8);
 
     /** The default padding for {@link CircularProgressIndicator} */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_PADDING =
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp DEFAULT_PADDING =
             androidx.wear.tiles.DimensionBuilders.dp(6);
 
     /** The recommended colors for {@link CircularProgressIndicator}. */
-    @NonNull
-    public static final ProgressIndicatorColors DEFAULT_COLORS =
+    public static final @NonNull ProgressIndicatorColors DEFAULT_COLORS =
             ProgressIndicatorColors.progressIndicatorColors(Colors.DEFAULT);
 
     static final float DEFAULT_GAP_LENGTH = 47.8f;
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Text.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Text.java
index 2819794..ed5b641 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Text.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Text.java
@@ -19,14 +19,15 @@
 import android.content.Context;
 
 import androidx.annotation.IntRange;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 import androidx.wear.protolayout.proto.ModifiersProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Tiles component {@link Text} that represents text object holding any information.
  *
@@ -64,20 +65,19 @@
      */
     static final String METADATA_TAG = "TXT";
 
-    @NonNull private final androidx.wear.tiles.LayoutElementBuilders.Text mText;
+    private final androidx.wear.tiles.LayoutElementBuilders.@NonNull Text mText;
 
-    Text(@NonNull androidx.wear.tiles.LayoutElementBuilders.Text mText) {
+    Text(androidx.wear.tiles.LayoutElementBuilders.@NonNull Text mText) {
         this.mText = mText;
     }
 
     /** Builder class for {@link Text}. */
     public static final class Builder
             implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-        @NonNull private final Context mContext;
-        @NonNull private String mTextContent = "";
+        private final @NonNull Context mContext;
+        private @NonNull String mTextContent = "";
 
-        @NonNull
-        private androidx.wear.tiles.ColorBuilders.ColorProp mColor =
+        private androidx.wear.tiles.ColorBuilders.@NonNull ColorProp mColor =
                 androidx.wear.tiles.ColorBuilders.argb(Colors.DEFAULT.getOnPrimary());
 
         private @Typography.TypographyName int mTypographyName = Typography.TYPOGRAPHY_DISPLAY1;
@@ -89,14 +89,13 @@
         private int mMultilineAlignment =
                 androidx.wear.tiles.LayoutElementBuilders.TEXT_ALIGN_CENTER;
 
-        @NonNull
-        private androidx.wear.tiles.ModifiersBuilders.Modifiers mModifiers =
+        private androidx.wear.tiles.ModifiersBuilders.@NonNull Modifiers mModifiers =
                 new androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder().build();
 
         private @androidx.wear.tiles.LayoutElementBuilders.TextOverflow int mOverflow =
                 androidx.wear.tiles.LayoutElementBuilders.TEXT_OVERFLOW_ELLIPSIZE_END;
         private boolean mIsScalable = true;
-        @Nullable private Integer mCustomWeight = null;
+        private @Nullable Integer mCustomWeight = null;
 
         /**
          * Creates a builder for {@link Text}.
@@ -113,12 +112,11 @@
          * Sets the typography for the {@link Text}. If not set, {@link
          * Typography#TYPOGRAPHY_DISPLAY1} will be used.
          */
-        @NonNull
         @SuppressWarnings("MissingGetterMatchingBuilder")
         // There is getFontStyle matching getter for this setter as the serialized format of the
         // Tiles do not allow for a direct reconstruction of the all arguments, but it has
         // androidx.wear.tiles.LayoutElementBuilders.FontStyle object of that text.
-        public Builder setTypography(@Typography.TypographyName int typography) {
+        public @NonNull Builder setTypography(@Typography.TypographyName int typography) {
             this.mTypographyName = typography;
             return this;
         }
@@ -136,29 +134,26 @@
          * Sets the color for the {@link Text}. If not set, onPrimary color from the {@link
          * Colors#DEFAULT} will be used.
          */
-        @NonNull
-        public Builder setColor(@NonNull androidx.wear.tiles.ColorBuilders.ColorProp color) {
+        public @NonNull Builder setColor(
+                androidx.wear.tiles.ColorBuilders.@NonNull ColorProp color) {
             this.mColor = color;
             return this;
         }
 
         /** Sets the text to be italic. If not set, false will be used. */
-        @NonNull
-        public Builder setItalic(boolean italic) {
+        public @NonNull Builder setItalic(boolean italic) {
             this.mItalic = italic;
             return this;
         }
 
         /** Sets the text to be underlined. If not set, false will be used. */
-        @NonNull
-        public Builder setUnderline(boolean underline) {
+        public @NonNull Builder setUnderline(boolean underline) {
             this.mUnderline = underline;
             return this;
         }
 
         /** Sets the maximum lines of text. If not set, 1 will be used. */
-        @NonNull
-        public Builder setMaxLines(@IntRange(from = 1) int maxLines) {
+        public @NonNull Builder setMaxLines(@IntRange(from = 1) int maxLines) {
             this.mMaxLines = maxLines;
             return this;
         }
@@ -169,17 +164,15 @@
          * container should be used. If not set, {@link
          * androidx.wear.tiles.LayoutElementBuilders.TextAlignment#TEXT_ALIGN_CENTER} will be used.
          */
-        @NonNull
-        public Builder setMultilineAlignment(
+        public @NonNull Builder setMultilineAlignment(
                 @androidx.wear.tiles.LayoutElementBuilders.TextAlignment int multilineAlignment) {
             this.mMultilineAlignment = multilineAlignment;
             return this;
         }
 
         /** Sets the modifiers of text. */
-        @NonNull
-        public Builder setModifiers(
-                @NonNull androidx.wear.tiles.ModifiersBuilders.Modifiers modifiers) {
+        public @NonNull Builder setModifiers(
+                androidx.wear.tiles.ModifiersBuilders.@NonNull Modifiers modifiers) {
             this.mModifiers = modifiers;
             return this;
         }
@@ -189,8 +182,7 @@
          * androidx.wear.tiles.LayoutElementBuilders.TextAlignment#TEXT_OVERFLOW_ELLIPSIZE_END} will
          * be used.
          */
-        @NonNull
-        public Builder setOverflow(
+        public @NonNull Builder setOverflow(
                 @androidx.wear.tiles.LayoutElementBuilders.TextOverflow int overflow) {
             this.mOverflow = overflow;
             return this;
@@ -200,16 +192,15 @@
          * Sets the weight of the font. If not set, default weight for the chosen Typography will be
          * used.
          */
-        @NonNull
-        public Builder setWeight(@androidx.wear.tiles.LayoutElementBuilders.FontWeight int weight) {
+        public @NonNull Builder setWeight(
+                @androidx.wear.tiles.LayoutElementBuilders.FontWeight int weight) {
             this.mCustomWeight = weight;
             return this;
         }
 
         /** Constructs and returns {@link Text} with the provided content and look. */
-        @NonNull
         @Override
-        public Text build() {
+        public @NonNull Text build() {
             androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder fontStyleBuilder =
                     Typography.getFontStyleBuilder(mTypographyName, mContext, mIsScalable)
                             .setColor(mColor)
@@ -231,8 +222,7 @@
             return new Text(text.build());
         }
 
-        @NonNull
-        static androidx.wear.tiles.ModifiersBuilders.Modifiers addTagToModifiers(
+        static androidx.wear.tiles.ModifiersBuilders.@NonNull Modifiers addTagToModifiers(
                 androidx.wear.tiles.ModifiersBuilders.Modifiers modifiers) {
             return androidx.wear.tiles.ModifiersBuilders.Modifiers.fromProto(
                     ModifiersProto.Modifiers.newBuilder(modifiers.toProto())
@@ -250,22 +240,19 @@
     }
 
     /** Returns the text of this Text element. */
-    @NonNull
-    public String getText() {
+    public @NonNull String getText() {
         return androidx.wear.tiles.material.Helper.checkNotNull(
                 androidx.wear.tiles.material.Helper.checkNotNull(mText.getText()).getValue());
     }
 
     /** Returns the color of this Text element. */
-    @NonNull
-    public androidx.wear.tiles.ColorBuilders.ColorProp getColor() {
+    public androidx.wear.tiles.ColorBuilders.@NonNull ColorProp getColor() {
         return androidx.wear.tiles.material.Helper.checkNotNull(
                 androidx.wear.tiles.material.Helper.checkNotNull(mText.getFontStyle()).getColor());
     }
 
     /** Returns the font style of this Text element. */
-    @NonNull
-    public androidx.wear.tiles.LayoutElementBuilders.FontStyle getFontStyle() {
+    public androidx.wear.tiles.LayoutElementBuilders.@NonNull FontStyle getFontStyle() {
         return androidx.wear.tiles.material.Helper.checkNotNull(mText.getFontStyle());
     }
 
@@ -287,8 +274,7 @@
     }
 
     /** Returns the modifiers of this Text element. */
-    @NonNull
-    public androidx.wear.tiles.ModifiersBuilders.Modifiers getModifiers() {
+    public androidx.wear.tiles.ModifiersBuilders.@NonNull Modifiers getModifiers() {
         return androidx.wear.tiles.material.Helper.checkNotNull(mText.getModifiers());
     }
 
@@ -324,8 +310,7 @@
     }
 
     /** Returns metadata tag set to this Text, which should be {@link #METADATA_TAG}. */
-    @NonNull
-    String getMetadataTag() {
+    @NonNull String getMetadataTag() {
         return androidx.wear.tiles.material.Helper.getMetadataTagName(
                 androidx.wear.tiles.material.Helper.checkNotNull(
                         androidx.wear.tiles.material.Helper.checkNotNull(getModifiers())
@@ -338,9 +323,8 @@
      * container's content with {@code container.getContents().get(index)}) if that element can be
      * converted to Material Text. Otherwise, it will return null.
      */
-    @Nullable
-    public static Text fromLayoutElement(
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement element) {
+    public static @Nullable Text fromLayoutElement(
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement element) {
         if (element instanceof Text) {
             return (Text) element;
         }
@@ -357,17 +341,15 @@
         return new Text(textElement);
     }
 
-    @NonNull
     @Override
     @RestrictTo(Scope.LIBRARY_GROUP)
-    public LayoutElementProto.LayoutElement toLayoutElementProto() {
+    public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
         return mText.toLayoutElementProto();
     }
 
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @Nullable
     @Override
-    public Fingerprint getFingerprint() {
+    public @Nullable Fingerprint getFingerprint() {
         return mText.getFingerprint();
     }
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/TitleChip.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/TitleChip.java
index 18cd2a1..3622bb2 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/TitleChip.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/TitleChip.java
@@ -21,13 +21,14 @@
 import android.content.Context;
 
 import androidx.annotation.Dimension;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Tiles component {@link TitleChip} that represents clickable object with the text.
  *
@@ -71,7 +72,7 @@
      */
     static final String METADATA_TAG = "TTLCHP";
 
-    @NonNull private final Chip mElement;
+    private final @NonNull Chip mElement;
 
     TitleChip(@NonNull Chip element) {
         this.mElement = element;
@@ -80,15 +81,14 @@
     /** Builder class for {@link TitleChip}. */
     public static final class Builder
             implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-        @NonNull private final Context mContext;
-        @NonNull private final String mText;
-        @NonNull private final androidx.wear.tiles.ModifiersBuilders.Clickable mClickable;
+        private final @NonNull Context mContext;
+        private final @NonNull String mText;
+        private final androidx.wear.tiles.ModifiersBuilders.@NonNull Clickable mClickable;
 
-        @NonNull
-        private final androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
+        private final androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
                 mDeviceParameters;
 
-        @NonNull private ChipColors mChipColors = ChipDefaults.TITLE_PRIMARY_COLORS;
+        private @NonNull ChipColors mChipColors = ChipDefaults.TITLE_PRIMARY_COLORS;
 
         @androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignment
         private int mHorizontalAlign =
@@ -96,7 +96,7 @@
 
         // Indicates that the width isn't set, so it will be automatically set by Chip.Builder
         // constructor.
-        @Nullable private androidx.wear.tiles.DimensionBuilders.ContainerDimension mWidth = null;
+        private androidx.wear.tiles.DimensionBuilders.@Nullable ContainerDimension mWidth = null;
 
         /**
          * Creates a builder for the {@link TitleChip} with associated action and the given text
@@ -111,9 +111,8 @@
         public Builder(
                 @NonNull Context context,
                 @NonNull String text,
-                @NonNull androidx.wear.tiles.ModifiersBuilders.Clickable clickable,
-                @NonNull
-                        androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
+                androidx.wear.tiles.ModifiersBuilders.@NonNull Clickable clickable,
+                androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
                                 deviceParameters) {
             this.mContext = context;
             this.mText = text;
@@ -127,15 +126,13 @@
          * ChipColors#getContentColor()} for the text. If not set, {@link
          * ChipDefaults#TITLE_PRIMARY_COLORS} will be used.
          */
-        @NonNull
-        public Builder setChipColors(@NonNull ChipColors chipColors) {
+        public @NonNull Builder setChipColors(@NonNull ChipColors chipColors) {
             mChipColors = chipColors;
             return this;
         }
 
         /** Sets the horizontal alignment in the chip. If not set, content will be centered. */
-        @NonNull
-        public Builder setHorizontalAlignment(
+        public @NonNull Builder setHorizontalAlignment(
                 @androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignment
                         int horizontalAlignment) {
             mHorizontalAlign = horizontalAlignment;
@@ -146,9 +143,8 @@
          * Sets the width of {@link TitleChip}. If not set, default value will be set to fill the
          * screen.
          */
-        @NonNull
-        public Builder setWidth(
-                @NonNull androidx.wear.tiles.DimensionBuilders.ContainerDimension width) {
+        public @NonNull Builder setWidth(
+                androidx.wear.tiles.DimensionBuilders.@NonNull ContainerDimension width) {
             mWidth = width;
             return this;
         }
@@ -157,16 +153,14 @@
          * Sets the width of {@link TitleChip}. If not set, default value will be set to fill the
          * screen.
          */
-        @NonNull
-        public Builder setWidth(@Dimension(unit = DP) float width) {
+        public @NonNull Builder setWidth(@Dimension(unit = DP) float width) {
             mWidth = androidx.wear.tiles.DimensionBuilders.dp(width);
             return this;
         }
 
         /** Constructs and returns {@link TitleChip} with the provided content and look. */
-        @NonNull
         @Override
-        public TitleChip build() {
+        public @NonNull TitleChip build() {
             Chip.Builder chipBuilder =
                     new Chip.Builder(mContext, mClickable, mDeviceParameters)
                             .setMetadataTag(METADATA_TAG)
@@ -189,26 +183,22 @@
     }
 
     /** Returns width of this Chip. */
-    @NonNull
-    public androidx.wear.tiles.DimensionBuilders.ContainerDimension getWidth() {
+    public androidx.wear.tiles.DimensionBuilders.@NonNull ContainerDimension getWidth() {
         return mElement.getWidth();
     }
 
     /** Returns click event action associated with this Chip. */
-    @NonNull
-    public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable() {
+    public androidx.wear.tiles.ModifiersBuilders.@NonNull Clickable getClickable() {
         return mElement.getClickable();
     }
 
     /** Returns chip color of this Chip. */
-    @NonNull
-    public ChipColors getChipColors() {
+    public @NonNull ChipColors getChipColors() {
         return mElement.getChipColors();
     }
 
     /** Returns text content of this Chip. */
-    @NonNull
-    public String getText() {
+    public @NonNull String getText() {
         return androidx.wear.tiles.material.Helper.checkNotNull(mElement.getPrimaryLabelContent());
     }
 
@@ -219,8 +209,7 @@
     }
 
     /** Returns metadata tag set to this TitleChip, which should be {@link #METADATA_TAG}. */
-    @NonNull
-    String getMetadataTag() {
+    @NonNull String getMetadataTag() {
         return mElement.getMetadataTag();
     }
 
@@ -230,9 +219,8 @@
      * container's content with {@code container.getContents().get(index)}) if that element can be
      * converted to TitleChip. Otherwise, it will return null.
      */
-    @Nullable
-    public static TitleChip fromLayoutElement(
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement element) {
+    public static @Nullable TitleChip fromLayoutElement(
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement element) {
         if (element instanceof TitleChip) {
             return (TitleChip) element;
         }
@@ -250,16 +238,14 @@
     }
 
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
     @Override
-    public LayoutElementProto.LayoutElement toLayoutElementProto() {
+    public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
         return mElement.toLayoutElementProto();
     }
 
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @Nullable
     @Override
-    public Fingerprint getFingerprint() {
+    public @Nullable Fingerprint getFingerprint() {
         return mElement.getFingerprint();
     }
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Typography.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Typography.java
index dd937c9..623b894 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Typography.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/Typography.java
@@ -25,9 +25,10 @@
 
 import androidx.annotation.Dimension;
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.HashMap;
@@ -97,8 +98,8 @@
     @interface TypographyName {}
 
     /** Mapping for line height for different typography. */
-    @NonNull
-    private static final Map<Integer, Float> TYPOGRAPHY_TO_LINE_HEIGHT_SP = new HashMap<>();
+    private static final @NonNull Map<Integer, Float> TYPOGRAPHY_TO_LINE_HEIGHT_SP =
+            new HashMap<>();
 
     static {
         TYPOGRAPHY_TO_LINE_HEIGHT_SP.put(TYPOGRAPHY_DISPLAY1, 46f);
@@ -120,8 +121,7 @@
      * androidx.wear.tiles.LayoutElementBuilders.FontStyle code with the recommended size, weight
      * and letter spacing. Font will be scalable.
      */
-    @NonNull
-    static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder getFontStyleBuilder(
+    static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder getFontStyleBuilder(
             @TypographyName int fontStyleCode, @NonNull Context context) {
         return getFontStyleBuilder(fontStyleCode, context, true);
     }
@@ -133,8 +133,7 @@
      * Typography code with the recommended size, weight and letter spacing, with the option to make
      * this font not scalable.
      */
-    @NonNull
-    static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder getFontStyleBuilder(
+    static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder getFontStyleBuilder(
             @TypographyName int typographyCode, @NonNull Context context, boolean isScalable) {
         switch (typographyCode) {
             case TYPOGRAPHY_BODY1:
@@ -172,8 +171,7 @@
      * Returns the recommended line height for the given Typography to be added to the Text
      * component.
      */
-    @NonNull
-    static androidx.wear.tiles.DimensionBuilders.SpProp getLineHeightForTypography(
+    static androidx.wear.tiles.DimensionBuilders.@NonNull SpProp getLineHeightForTypography(
             @TypographyName int typography) {
         if (!TYPOGRAPHY_TO_LINE_HEIGHT_SP.containsKey(typography)) {
             throw new IllegalArgumentException("Typography " + typography + " doesn't exist.");
@@ -184,7 +182,6 @@
                         .intValue());
     }
 
-    @NonNull
     @SuppressLint("ResourceType")
     // This is a helper function to make the font not scalable. It should interpret in value as DP
     // and convert it to SP which is needed to be passed in as a font size. However, we will pass an
@@ -192,7 +189,7 @@
     // size on device in 1, so the DP is equal to SP.
     // TODO(b/267744228): Remove the warning suppression.
     @SuppressWarnings("deprecation")
-    private static androidx.wear.tiles.DimensionBuilders.SpProp dpToSp(
+    private static androidx.wear.tiles.DimensionBuilders.@NonNull SpProp dpToSp(
             @NonNull Context context, @Dimension(unit = DP) float valueDp) {
         DisplayMetrics metrics = context.getResources().getDisplayMetrics();
         float scaledSp = (valueDp / metrics.scaledDensity) * metrics.density;
@@ -222,8 +219,7 @@
     }
 
     /** Font style for large display text. */
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display1(
+    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder display1(
             boolean isScalable, @NonNull Context context) {
         return createFontStyleBuilder(
                 40,
@@ -235,8 +231,7 @@
     }
 
     /** Font style for medium display text. */
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display2(
+    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder display2(
             boolean isScalable, @NonNull Context context) {
         return createFontStyleBuilder(
                 34,
@@ -248,8 +243,7 @@
     }
 
     /** Font style for small display text. */
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display3(
+    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder display3(
             boolean isScalable, @NonNull Context context) {
         return createFontStyleBuilder(
                 30,
@@ -261,8 +255,7 @@
     }
 
     /** Font style for large title text. */
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title1(
+    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder title1(
             boolean isScalable, @NonNull Context context) {
         return createFontStyleBuilder(
                 24,
@@ -274,8 +267,7 @@
     }
 
     /** Font style for medium title text. */
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title2(
+    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder title2(
             boolean isScalable, @NonNull Context context) {
         return createFontStyleBuilder(
                 20,
@@ -287,8 +279,7 @@
     }
 
     /** Font style for small title text. */
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title3(
+    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder title3(
             boolean isScalable, @NonNull Context context) {
         return createFontStyleBuilder(
                 16,
@@ -300,8 +291,7 @@
     }
 
     /** Font style for normal body text. */
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder body1(
+    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder body1(
             boolean isScalable, @NonNull Context context) {
         return createFontStyleBuilder(
                 16,
@@ -313,8 +303,7 @@
     }
 
     /** Font style for small body text. */
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder body2(
+    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder body2(
             boolean isScalable, @NonNull Context context) {
         return createFontStyleBuilder(
                 14,
@@ -326,8 +315,7 @@
     }
 
     /** Font style for bold button text. */
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder button(
+    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder button(
             boolean isScalable, @NonNull Context context) {
         return createFontStyleBuilder(
                 15,
@@ -339,8 +327,7 @@
     }
 
     /** Font style for large caption text. */
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption1(
+    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder caption1(
             boolean isScalable, @NonNull Context context) {
         return createFontStyleBuilder(
                 14,
@@ -352,8 +339,7 @@
     }
 
     /** Font style for medium caption text. */
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption2(
+    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder caption2(
             boolean isScalable, @NonNull Context context) {
         return createFontStyleBuilder(
                 12,
@@ -365,8 +351,7 @@
     }
 
     /** Font style for small caption text. */
-    @NonNull
-    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption3(
+    private static androidx.wear.tiles.LayoutElementBuilders.FontStyle.@NonNull Builder caption3(
             boolean isScalable, @NonNull Context context) {
         return createFontStyleBuilder(
                 10,
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/EdgeContentLayout.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/EdgeContentLayout.java
index 2f0c55c..c257513 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/EdgeContentLayout.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/EdgeContentLayout.java
@@ -17,13 +17,14 @@
 package androidx.wear.tiles.material.layouts;
 
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.Arrays;
@@ -123,16 +124,16 @@
             })
     @interface ContentBits {}
 
-    @NonNull private final androidx.wear.tiles.LayoutElementBuilders.Box mImpl;
+    private final androidx.wear.tiles.LayoutElementBuilders.@NonNull Box mImpl;
 
     // This contains inner columns and edge content.
-    @NonNull private final List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement> mContents;
+    private final @NonNull List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement> mContents;
 
     // This contains optional labels, spacers and main content.
-    @NonNull
-    private final List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement> mInnerColumn;
+    private final @NonNull List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement>
+            mInnerColumn;
 
-    EdgeContentLayout(@NonNull androidx.wear.tiles.LayoutElementBuilders.Box layoutElement) {
+    EdgeContentLayout(androidx.wear.tiles.LayoutElementBuilders.@NonNull Box layoutElement) {
         this.mImpl = layoutElement;
         this.mContents = mImpl.getContents();
         this.mInnerColumn =
@@ -146,20 +147,19 @@
     /** Builder class for {@link EdgeContentLayout}. */
     public static final class Builder
             implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-        @NonNull
-        private final androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
+        private final androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
                 mDeviceParameters;
 
-        @Nullable
-        private androidx.wear.tiles.LayoutElementBuilders.LayoutElement mEdgeContent = null;
+        private androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement mEdgeContent =
+                null;
 
-        @Nullable
-        private androidx.wear.tiles.LayoutElementBuilders.LayoutElement mPrimaryLabelText = null;
+        private androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+                mPrimaryLabelText = null;
 
-        @Nullable
-        private androidx.wear.tiles.LayoutElementBuilders.LayoutElement mSecondaryLabelText = null;
+        private androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+                mSecondaryLabelText = null;
 
-        @Nullable private androidx.wear.tiles.LayoutElementBuilders.LayoutElement mContent = null;
+        private androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement mContent = null;
         private byte mMetadataContentByte = 0;
 
         /**
@@ -167,8 +167,7 @@
          * later be set with ({@link #setContent}.
          */
         public Builder(
-                @NonNull
-                        androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
+                androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
                                 deviceParameters) {
             this.mDeviceParameters = deviceParameters;
         }
@@ -176,18 +175,16 @@
         /**
          * Sets the content to be around the edges. This can be {@link CircularProgressIndicator}.
          */
-        @NonNull
-        public Builder setEdgeContent(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement edgeContent) {
+        public @NonNull Builder setEdgeContent(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement edgeContent) {
             this.mEdgeContent = edgeContent;
             mMetadataContentByte = (byte) (mMetadataContentByte | EDGE_CONTENT_PRESENT);
             return this;
         }
 
         /** Sets the content in the primary label slot which will be above the main content. */
-        @NonNull
-        public Builder setPrimaryLabelTextContent(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement primaryLabelText) {
+        public @NonNull Builder setPrimaryLabelTextContent(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement primaryLabelText) {
             this.mPrimaryLabelText = primaryLabelText;
             mMetadataContentByte = (byte) (mMetadataContentByte | PRIMARY_LABEL_PRESENT);
             return this;
@@ -197,10 +194,8 @@
          * Sets the content in the secondary label slot which will be below the main content. It is
          * highly recommended to have primary label set when having secondary label.
          */
-        @NonNull
-        public Builder setSecondaryLabelTextContent(
-                @NonNull
-                        androidx.wear.tiles.LayoutElementBuilders.LayoutElement
+        public @NonNull Builder setSecondaryLabelTextContent(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement
                                 secondaryLabelText) {
             this.mSecondaryLabelText = secondaryLabelText;
             mMetadataContentByte = (byte) (mMetadataContentByte | SECONDARY_LABEL_PRESENT);
@@ -208,18 +203,16 @@
         }
 
         /** Sets the additional content to this layout, inside of the screen. */
-        @NonNull
-        public Builder setContent(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement content) {
+        public @NonNull Builder setContent(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement content) {
             this.mContent = content;
             mMetadataContentByte = (byte) (mMetadataContentByte | CONTENT_PRESENT);
             return this;
         }
 
         /** Constructs and returns {@link EdgeContentLayout} with the provided content and look. */
-        @NonNull
         @Override
-        public EdgeContentLayout build() {
+        public @NonNull EdgeContentLayout build() {
             float thicknessDp =
                     mEdgeContent instanceof androidx.wear.tiles.material.CircularProgressIndicator
                             ? ((androidx.wear.tiles.material.CircularProgressIndicator)
@@ -345,8 +338,7 @@
     }
 
     /** Returns metadata tag set to this EdgeContentLayout. */
-    @NonNull
-    byte[] getMetadataTag() {
+    byte @NonNull [] getMetadataTag() {
         return androidx.wear.tiles.material.Helper.getMetadataTagBytes(
                 androidx.wear.tiles.material.Helper.checkNotNull(
                         androidx.wear.tiles.material.Helper.checkNotNull(mImpl.getModifiers())
@@ -354,8 +346,7 @@
     }
 
     /** Returns the inner content from this layout. */
-    @Nullable
-    public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getContent() {
+    public androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement getContent() {
         if (!areElementsPresent(CONTENT_PRESENT)) {
             return null;
         }
@@ -368,8 +359,8 @@
     }
 
     /** Get the primary label content from this layout. */
-    @Nullable
-    public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getPrimaryLabelTextContent() {
+    public androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+            getPrimaryLabelTextContent() {
         if (!areElementsPresent(PRIMARY_LABEL_PRESENT)) {
             return null;
         }
@@ -378,8 +369,8 @@
     }
 
     /** Get the secondary label content from this layout. */
-    @Nullable
-    public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getSecondaryLabelTextContent() {
+    public androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+            getSecondaryLabelTextContent() {
         if (!areElementsPresent(SECONDARY_LABEL_PRESENT)) {
             return null;
         }
@@ -388,8 +379,7 @@
     }
 
     /** Returns the edge content from this layout. */
-    @Nullable
-    public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getEdgeContent() {
+    public androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement getEdgeContent() {
         if (areElementsPresent(EDGE_CONTENT_PRESENT)) {
             return mContents.get(1);
         }
@@ -402,9 +392,8 @@
      * container's content with {@code container.getContents().get(index)}) if that element can be
      * converted to EdgeContentLayout. Otherwise, it will return null.
      */
-    @Nullable
-    public static EdgeContentLayout fromLayoutElement(
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement element) {
+    public static @Nullable EdgeContentLayout fromLayoutElement(
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement element) {
         if (element instanceof EdgeContentLayout) {
             return (EdgeContentLayout) element;
         }
@@ -421,17 +410,15 @@
         return new EdgeContentLayout(boxElement);
     }
 
-    @NonNull
     @Override
     @RestrictTo(Scope.LIBRARY_GROUP)
-    public LayoutElementProto.LayoutElement toLayoutElementProto() {
+    public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
         return mImpl.toLayoutElementProto();
     }
 
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @Nullable
     @Override
-    public Fingerprint getFingerprint() {
+    public @Nullable Fingerprint getFingerprint() {
         return mImpl.getFingerprint();
     }
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/LayoutDefaults.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/LayoutDefaults.java
index 40b9cb8..883114d 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/LayoutDefaults.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/LayoutDefaults.java
@@ -16,7 +16,7 @@
 
 package androidx.wear.tiles.material.layouts;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 /**
  * Contains the default values used by layout templates for Tiles.
@@ -110,13 +110,11 @@
     public static final float EDGE_CONTENT_LAYOUT_PADDING_BELOW_MAIN_CONTENT_DP = 8;
 
     /** The default spacer width for slots in a {@link MultiSlotLayout}. */
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp
             MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH = androidx.wear.tiles.DimensionBuilders.dp(8);
 
     /** The recommended space between the main content and additional labels in layouts. */
-    @NonNull
-    public static final androidx.wear.tiles.DimensionBuilders.DpProp
+    public static final androidx.wear.tiles.DimensionBuilders.@NonNull DpProp
             DEFAULT_VERTICAL_SPACER_HEIGHT = androidx.wear.tiles.DimensionBuilders.dp(8);
 
     /** The maximum number of button that can be added to the {@link MultiButtonLayout}. */
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/MultiButtonLayout.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/MultiButtonLayout.java
index 4f521ce..f476080 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/MultiButtonLayout.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/MultiButtonLayout.java
@@ -17,13 +17,14 @@
 package androidx.wear.tiles.material.layouts;
 
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
@@ -81,17 +82,16 @@
     @IntDef({FIVE_BUTTON_DISTRIBUTION_TOP_HEAVY, FIVE_BUTTON_DISTRIBUTION_BOTTOM_HEAVY})
     public @interface ButtonDistribution {}
 
-    @NonNull private final androidx.wear.tiles.LayoutElementBuilders.Box mElement;
+    private final androidx.wear.tiles.LayoutElementBuilders.@NonNull Box mElement;
 
-    MultiButtonLayout(@NonNull androidx.wear.tiles.LayoutElementBuilders.Box mElement) {
+    MultiButtonLayout(androidx.wear.tiles.LayoutElementBuilders.@NonNull Box mElement) {
         this.mElement = mElement;
     }
 
     /** Builder class for {@link MultiButtonLayout}. */
     public static final class Builder
             implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-        @NonNull
-        private final List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement>
+        private final @NonNull List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement>
                 mButtonsContent = new ArrayList<>();
 
         private @ButtonDistribution int mFiveButtonDistribution =
@@ -109,12 +109,11 @@
          * to add a {@link Button} as the layout is optimized for it. Any button added after {@link
          * LayoutDefaults#MULTI_BUTTON_MAX_NUMBER} is reached will be discarded.
          */
-        @NonNull
         @SuppressWarnings("MissingGetterMatchingBuilder")
         // There is no direct matching getter for this setter, but there is a getter that gets all
         // added buttons.
-        public Builder addButtonContent(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement buttonContent) {
+        public @NonNull Builder addButtonContent(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement buttonContent) {
             mButtonsContent.add(buttonContent);
             return this;
         }
@@ -124,16 +123,15 @@
          * there is 5 buttons in the layout to determine whether the 3 buttons row is at the top or
          * bottom.
          */
-        @NonNull
-        public Builder setFiveButtonDistribution(@ButtonDistribution int fiveButtonDistribution) {
+        public @NonNull Builder setFiveButtonDistribution(
+                @ButtonDistribution int fiveButtonDistribution) {
             this.mFiveButtonDistribution = fiveButtonDistribution;
             return this;
         }
 
         /** Constructs and returns {@link MultiButtonLayout} with the provided content and look. */
-        @NonNull
         @Override
-        public MultiButtonLayout build() {
+        public @NonNull MultiButtonLayout build() {
             int buttonNum = mButtonsContent.size();
             if (buttonNum > LayoutDefaults.MULTI_BUTTON_MAX_NUMBER) {
                 throw new IllegalArgumentException(
@@ -162,8 +160,7 @@
             return new MultiButtonLayout(elementBuilder.build());
         }
 
-        @NonNull
-        private androidx.wear.tiles.LayoutElementBuilders.LayoutElement buildButtons(
+        private androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement buildButtons(
                 int buttonNum) {
             switch (buttonNum) {
                 case 1:
@@ -255,11 +252,10 @@
             return new androidx.wear.tiles.LayoutElementBuilders.Box.Builder().build();
         }
 
-        @NonNull
-        private androidx.wear.tiles.LayoutElementBuilders.Row build3ButtonRow(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement button1,
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement button2,
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement button3) {
+        private androidx.wear.tiles.LayoutElementBuilders.@NonNull Row build3ButtonRow(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement button1,
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement button2,
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement button3) {
             return new androidx.wear.tiles.LayoutElementBuilders.Row.Builder()
                     .setWidth(androidx.wear.tiles.DimensionBuilders.wrap())
                     .setHeight(androidx.wear.tiles.DimensionBuilders.wrap())
@@ -271,11 +267,10 @@
                     .build();
         }
 
-        @NonNull
-        private androidx.wear.tiles.LayoutElementBuilders.Row build2ButtonRow(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement button1,
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement button2,
-                @NonNull androidx.wear.tiles.DimensionBuilders.DpProp size) {
+        private androidx.wear.tiles.LayoutElementBuilders.@NonNull Row build2ButtonRow(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement button1,
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement button2,
+                androidx.wear.tiles.DimensionBuilders.@NonNull DpProp size) {
             return new androidx.wear.tiles.LayoutElementBuilders.Row.Builder()
                     .setWidth(androidx.wear.tiles.DimensionBuilders.wrap())
                     .setHeight(androidx.wear.tiles.DimensionBuilders.wrap())
@@ -285,24 +280,21 @@
                     .build();
         }
 
-        @NonNull
-        private androidx.wear.tiles.LayoutElementBuilders.Spacer buildHorizontalSpacer() {
+        private androidx.wear.tiles.LayoutElementBuilders.@NonNull Spacer buildHorizontalSpacer() {
             return new androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder()
                     .setWidth(LayoutDefaults.MULTI_BUTTON_SPACER_WIDTH)
                     .build();
         }
 
-        @NonNull
-        private androidx.wear.tiles.LayoutElementBuilders.Spacer buildVerticalSpacer() {
+        private androidx.wear.tiles.LayoutElementBuilders.@NonNull Spacer buildVerticalSpacer() {
             return new androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder()
                     .setHeight(LayoutDefaults.MULTI_BUTTON_SPACER_HEIGHT)
                     .build();
         }
 
-        @NonNull
-        private androidx.wear.tiles.LayoutElementBuilders.Box wrapButton(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement button,
-                @NonNull androidx.wear.tiles.DimensionBuilders.DpProp size) {
+        private androidx.wear.tiles.LayoutElementBuilders.@NonNull Box wrapButton(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement button,
+                androidx.wear.tiles.DimensionBuilders.@NonNull DpProp size) {
             return new androidx.wear.tiles.LayoutElementBuilders.Box.Builder()
                     .setWidth(size)
                     .setHeight(size)
@@ -312,8 +304,8 @@
     }
 
     /** Gets the content from this layout, containing all buttons that were added. */
-    @NonNull
-    public List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement> getButtonContents() {
+    public @NonNull List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement>
+            getButtonContents() {
         List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement> buttons = new ArrayList<>();
         List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement> contents =
                 mElement.getContents();
@@ -343,8 +335,7 @@
     }
 
     /** Returns metadata tag set to this MultiButtonLayouts. */
-    @NonNull
-    String getMetadataTag() {
+    @NonNull String getMetadataTag() {
         return androidx.wear.tiles.material.Helper.getMetadataTagName(
                 androidx.wear.tiles.material.Helper.checkNotNull(
                         androidx.wear.tiles.material.Helper.checkNotNull(mElement.getModifiers())
@@ -405,9 +396,8 @@
      * container's content with {@code container.getContents().get(index)}) if that element can be
      * converted to MultiButtonLayout. Otherwise, it will return null.
      */
-    @Nullable
-    public static MultiButtonLayout fromLayoutElement(
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement element) {
+    public static @Nullable MultiButtonLayout fromLayoutElement(
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement element) {
         if (element instanceof MultiButtonLayout) {
             return (MultiButtonLayout) element;
         }
@@ -424,17 +414,15 @@
         return new MultiButtonLayout(boxElement);
     }
 
-    @NonNull
     @Override
     @RestrictTo(Scope.LIBRARY_GROUP)
-    public LayoutElementProto.LayoutElement toLayoutElementProto() {
+    public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
         return mElement.toLayoutElementProto();
     }
 
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @Nullable
     @Override
-    public Fingerprint getFingerprint() {
+    public @Nullable Fingerprint getFingerprint() {
         return mElement.getFingerprint();
     }
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/MultiSlotLayout.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/MultiSlotLayout.java
index 104e75e..7e8fe36d 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/MultiSlotLayout.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/MultiSlotLayout.java
@@ -21,13 +21,14 @@
 import android.annotation.SuppressLint;
 
 import androidx.annotation.Dimension;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -73,9 +74,9 @@
      */
     static final String METADATA_TAG = "MSL";
 
-    @NonNull private final androidx.wear.tiles.LayoutElementBuilders.Row mElement;
+    private final androidx.wear.tiles.LayoutElementBuilders.@NonNull Row mElement;
 
-    MultiSlotLayout(@NonNull androidx.wear.tiles.LayoutElementBuilders.Row mElement) {
+    MultiSlotLayout(androidx.wear.tiles.LayoutElementBuilders.@NonNull Row mElement) {
         this.mElement = mElement;
     }
 
@@ -83,12 +84,10 @@
     public static final class Builder
             implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
 
-        @NonNull
-        private final List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement> mSlotsContent =
-                new ArrayList<>();
+        private final @NonNull List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement>
+                mSlotsContent = new ArrayList<>();
 
-        @NonNull
-        private androidx.wear.tiles.DimensionBuilders.DpProp mHorizontalSpacerWidth =
+        private androidx.wear.tiles.DimensionBuilders.@NonNull DpProp mHorizontalSpacerWidth =
                 LayoutDefaults.MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH;
 
         /**
@@ -98,12 +97,11 @@
         public Builder() {}
 
         /** Add one new slot to the layout with the given content inside. */
-        @NonNull
         @SuppressWarnings("MissingGetterMatchingBuilder")
         // There is no direct matching getter for this setter, but there is a getter that gets all
         // added slots.
-        public Builder addSlotContent(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement slotContent) {
+        public @NonNull Builder addSlotContent(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement slotContent) {
             mSlotsContent.add(slotContent);
             return this;
         }
@@ -113,20 +111,18 @@
          * than one slot. If not set, {@link
          * LayoutDefaults#MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH} will be used.
          */
-        @NonNull
-        public Builder setHorizontalSpacerWidth(@Dimension(unit = DP) float width) {
+        public @NonNull Builder setHorizontalSpacerWidth(@Dimension(unit = DP) float width) {
             this.mHorizontalSpacerWidth = androidx.wear.tiles.DimensionBuilders.dp(width);
             return this;
         }
 
         /** Constructs and returns {@link MultiSlotLayout} with the provided content and look. */
-        @NonNull
         @Override
         // The @Dimension(unit = DP) on mVerticalSpacerHeight.getValue() is seemingly being ignored,
         // so lint complains that we're passing PX to something expecting DP. Just suppress the
         // warning for now.
         @SuppressLint("ResourceType")
-        public MultiSlotLayout build() {
+        public @NonNull MultiSlotLayout build() {
             androidx.wear.tiles.LayoutElementBuilders.Row.Builder rowBuilder =
                     new androidx.wear.tiles.LayoutElementBuilders.Row.Builder()
                             .setHeight(androidx.wear.tiles.DimensionBuilders.wrap())
@@ -170,8 +166,8 @@
     }
 
     /** Gets the content from this layout, containing all slots that were added. */
-    @NonNull
-    public List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement> getSlotContents() {
+    public @NonNull List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement>
+            getSlotContents() {
         List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement> slots = new ArrayList<>();
         for (androidx.wear.tiles.LayoutElementBuilders.LayoutElement slot :
                 mElement.getContents()) {
@@ -206,8 +202,7 @@
     }
 
     /** Returns metadata tag set to this MultiSlotLayout. */
-    @NonNull
-    String getMetadataTag() {
+    @NonNull String getMetadataTag() {
         return androidx.wear.tiles.material.Helper.getMetadataTagName(
                 androidx.wear.tiles.material.Helper.checkNotNull(
                         androidx.wear.tiles.material.Helper.checkNotNull(mElement.getModifiers())
@@ -220,9 +215,8 @@
      * container's content with {@code container.getContents().get(index)}) if that element can be
      * converted to MultiSlotLayout. Otherwise, it will return null.
      */
-    @Nullable
-    public static MultiSlotLayout fromLayoutElement(
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement element) {
+    public static @Nullable MultiSlotLayout fromLayoutElement(
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement element) {
         if (element instanceof MultiSlotLayout) {
             return (MultiSlotLayout) element;
         }
@@ -239,17 +233,15 @@
         return new MultiSlotLayout(rowElement);
     }
 
-    @NonNull
     @Override
     @RestrictTo(Scope.LIBRARY_GROUP)
-    public LayoutElementProto.LayoutElement toLayoutElementProto() {
+    public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
         return mElement.toLayoutElementProto();
     }
 
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @Nullable
     @Override
-    public Fingerprint getFingerprint() {
+    public @Nullable Fingerprint getFingerprint() {
         return mElement.getFingerprint();
     }
 }
diff --git a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/PrimaryLayout.java b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/PrimaryLayout.java
index 037ba46..f3f0e86 100644
--- a/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/PrimaryLayout.java
+++ b/wear/tiles/tiles-material/src/main/java/androidx/wear/tiles/material/layouts/PrimaryLayout.java
@@ -22,13 +22,14 @@
 
 import androidx.annotation.Dimension;
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.Arrays;
@@ -131,22 +132,21 @@
             value = {CHIP_PRESENT, PRIMARY_LABEL_PRESENT, SECONDARY_LABEL_PRESENT, CONTENT_PRESENT})
     @interface ContentBits {}
 
-    @NonNull private final androidx.wear.tiles.LayoutElementBuilders.Box mImpl;
+    private final androidx.wear.tiles.LayoutElementBuilders.@NonNull Box mImpl;
 
     // This contains inner columns and primary chip.
-    @NonNull
-    private final List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement> mAllContent;
+    private final @NonNull List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement>
+            mAllContent;
 
     // This contains optional labels, spacers and main content.
-    @NonNull
-    private final List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement> mPrimaryLabel;
+    private final @NonNull List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement>
+            mPrimaryLabel;
 
     // This contains optional labels, spacers and main content.
-    @NonNull
-    private final List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement>
+    private final @NonNull List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement>
             mContentAndSecondaryLabel;
 
-    PrimaryLayout(@NonNull androidx.wear.tiles.LayoutElementBuilders.Box layoutElement) {
+    PrimaryLayout(androidx.wear.tiles.LayoutElementBuilders.@NonNull Box layoutElement) {
         this.mImpl = layoutElement;
         this.mAllContent =
                 ((androidx.wear.tiles.LayoutElementBuilders.Column)
@@ -170,25 +170,22 @@
     /** Builder class for {@link PrimaryLayout}. */
     public static final class Builder
             implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-        @NonNull
-        private final androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
+        private final androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
                 mDeviceParameters;
 
-        @Nullable
-        private androidx.wear.tiles.LayoutElementBuilders.LayoutElement mPrimaryChip = null;
+        private androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement mPrimaryChip =
+                null;
 
-        @Nullable
-        private androidx.wear.tiles.LayoutElementBuilders.LayoutElement mPrimaryLabelText = null;
+        private androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+                mPrimaryLabelText = null;
 
-        @Nullable
-        private androidx.wear.tiles.LayoutElementBuilders.LayoutElement mSecondaryLabelText = null;
+        private androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+                mSecondaryLabelText = null;
 
-        @NonNull
-        private androidx.wear.tiles.LayoutElementBuilders.LayoutElement mContent =
+        private androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement mContent =
                 new androidx.wear.tiles.LayoutElementBuilders.Box.Builder().build();
 
-        @NonNull
-        private androidx.wear.tiles.DimensionBuilders.DpProp mVerticalSpacerHeight =
+        private androidx.wear.tiles.DimensionBuilders.@NonNull DpProp mVerticalSpacerHeight =
                 LayoutDefaults.DEFAULT_VERTICAL_SPACER_HEIGHT;
 
         private byte mMetadataContentByte = 0;
@@ -199,8 +196,7 @@
          * #setPrimaryLabelTextContent} and {@link #setSecondaryLabelTextContent}.
          */
         public Builder(
-                @NonNull
-                        androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
+                androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
                                 deviceParameters) {
             this.mDeviceParameters = deviceParameters;
         }
@@ -211,18 +207,16 @@
          * but it is strongly recommended to add a {@link CompactChip} as the layout is optimized
          * for it.
          */
-        @NonNull
-        public Builder setPrimaryChipContent(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement compactChip) {
+        public @NonNull Builder setPrimaryChipContent(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement compactChip) {
             this.mPrimaryChip = compactChip;
             mMetadataContentByte = (byte) (mMetadataContentByte | CHIP_PRESENT);
             return this;
         }
 
         /** Sets the content in the primary label slot which will be above the main content. */
-        @NonNull
-        public Builder setPrimaryLabelTextContent(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement primaryLabelText) {
+        public @NonNull Builder setPrimaryLabelTextContent(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement primaryLabelText) {
             this.mPrimaryLabelText = primaryLabelText;
             mMetadataContentByte = (byte) (mMetadataContentByte | PRIMARY_LABEL_PRESENT);
             return this;
@@ -232,10 +226,8 @@
          * Sets the content in the primary label slot which will be below the main content. It is
          * highly recommended to have primary label set when having secondary label.
          */
-        @NonNull
-        public Builder setSecondaryLabelTextContent(
-                @NonNull
-                        androidx.wear.tiles.LayoutElementBuilders.LayoutElement
+        public @NonNull Builder setSecondaryLabelTextContent(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement
                                 secondaryLabelText) {
             this.mSecondaryLabelText = secondaryLabelText;
             mMetadataContentByte = (byte) (mMetadataContentByte | SECONDARY_LABEL_PRESENT);
@@ -252,9 +244,8 @@
          * set to {@code expand} to use all the available space, rather than an explicit width which
          * may lead to clipping.
          */
-        @NonNull
-        public Builder setContent(
-                @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement content) {
+        public @NonNull Builder setContent(
+                androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement content) {
             this.mContent = content;
             mMetadataContentByte = (byte) (mMetadataContentByte | CONTENT_PRESENT);
             return this;
@@ -265,11 +256,10 @@
          * secondary label if there is any. If not set, {@link
          * LayoutDefaults#DEFAULT_VERTICAL_SPACER_HEIGHT} will be used.
          */
-        @NonNull
         // The @Dimension(unit = DP) on dp() is seemingly being ignored, so lint complains that
         // we're passing PX to something expecting DP. Just suppress the warning for now.
         @SuppressLint("ResourceType")
-        public Builder setVerticalSpacerHeight(@Dimension(unit = DP) float height) {
+        public @NonNull Builder setVerticalSpacerHeight(@Dimension(unit = DP) float height) {
             this.mVerticalSpacerHeight = androidx.wear.tiles.DimensionBuilders.dp(height);
             return this;
         }
@@ -278,9 +268,8 @@
         // The @Dimension(unit = DP) on dp() is seemingly being ignored, so lint complains that
         // we're passing DP to something expecting PX. Just suppress the warning for now.
         @SuppressLint("ResourceType")
-        @NonNull
         @Override
-        public PrimaryLayout build() {
+        public @NonNull PrimaryLayout build() {
             float topPadding = getTopPadding();
             float bottomPadding = getBottomPadding();
             float horizontalPadding = getHorizontalPadding();
@@ -497,8 +486,8 @@
         }
 
         /** Returns the spacer height to be placed above primary label to accommodate Tile icon. */
-        @NonNull
-        private androidx.wear.tiles.DimensionBuilders.DpProp getPrimaryLabelTopSpacerHeight() {
+        private androidx.wear.tiles.DimensionBuilders.@NonNull DpProp
+                getPrimaryLabelTopSpacerHeight() {
             return androidx.wear.tiles.material.Helper.isRoundDevice(mDeviceParameters)
                     ? LayoutDefaults.PRIMARY_LAYOUT_PRIMARY_LABEL_SPACER_HEIGHT_ROUND_DP
                     : LayoutDefaults.PRIMARY_LAYOUT_PRIMARY_LABEL_SPACER_HEIGHT_SQUARE_DP;
@@ -506,8 +495,8 @@
     }
 
     /** Get the primary label content from this layout. */
-    @Nullable
-    public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getPrimaryLabelTextContent() {
+    public androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+            getPrimaryLabelTextContent() {
         if (!areElementsPresent(PRIMARY_LABEL_PRESENT)) {
             return null;
         }
@@ -515,8 +504,8 @@
     }
 
     /** Get the secondary label content from this layout. */
-    @Nullable
-    public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getSecondaryLabelTextContent() {
+    public androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+            getSecondaryLabelTextContent() {
         if (!areElementsPresent(SECONDARY_LABEL_PRESENT)) {
             return null;
         }
@@ -525,8 +514,7 @@
     }
 
     /** Get the inner content from this layout. */
-    @Nullable
-    public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getContent() {
+    public androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement getContent() {
         if (!areElementsPresent(CONTENT_PRESENT)) {
             return null;
         }
@@ -537,8 +525,8 @@
     }
 
     /** Get the primary chip content from this layout. */
-    @Nullable
-    public androidx.wear.tiles.LayoutElementBuilders.LayoutElement getPrimaryChipContent() {
+    public androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+            getPrimaryChipContent() {
         if (areElementsPresent(CHIP_PRESENT)) {
             return ((androidx.wear.tiles.LayoutElementBuilders.Box)
                             mAllContent.get(PRIMARY_CHIP_POSITION))
@@ -573,8 +561,7 @@
     }
 
     /** Returns metadata tag set to this PrimaryLayout. */
-    @NonNull
-    byte[] getMetadataTag() {
+    byte @NonNull [] getMetadataTag() {
         return androidx.wear.tiles.material.Helper.getMetadataTagBytes(
                 androidx.wear.tiles.material.Helper.checkNotNull(
                         androidx.wear.tiles.material.Helper.checkNotNull(mImpl.getModifiers())
@@ -587,9 +574,8 @@
      * container's content with {@code container.getContents().get(index)}) if that element can be
      * converted to PrimaryLayout. Otherwise, it will return null.
      */
-    @Nullable
-    public static PrimaryLayout fromLayoutElement(
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.LayoutElement element) {
+    public static @Nullable PrimaryLayout fromLayoutElement(
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull LayoutElement element) {
         if (element instanceof PrimaryLayout) {
             return (PrimaryLayout) element;
         }
@@ -606,17 +592,15 @@
         return new PrimaryLayout(boxElement);
     }
 
-    @NonNull
     @Override
     @RestrictTo(Scope.LIBRARY_GROUP)
-    public LayoutElementProto.LayoutElement toLayoutElementProto() {
+    public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
         return mImpl.toLayoutElementProto();
     }
 
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @Nullable
     @Override
-    public Fingerprint getFingerprint() {
+    public @Nullable Fingerprint getFingerprint() {
         return mImpl.getFingerprint();
     }
 }
diff --git a/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/ButtonTest.java b/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/ButtonTest.java
index 81ac645..7bc6c6a 100644
--- a/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/ButtonTest.java
+++ b/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/ButtonTest.java
@@ -22,11 +22,11 @@
 
 import android.content.Context;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.annotation.internal.DoNotInstrument;
@@ -232,15 +232,15 @@
 
     private void assertButton(
             @NonNull Button actualButton,
-            @NonNull androidx.wear.tiles.DimensionBuilders.DpProp expectedSize,
+            androidx.wear.tiles.DimensionBuilders.@NonNull DpProp expectedSize,
             @NonNull ButtonColors expectedButtonColors,
             @Nullable String expectedContentDescription,
             @NonNull String expectedMetadataTag,
             @Nullable String expectedTextContent,
             @Nullable String expectedIconContent,
             @Nullable String expectedImageContent,
-            @Nullable
-                    androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedCustomContent) {
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+                    expectedCustomContent) {
         assertButtonIsEqual(
                 actualButton,
                 expectedSize,
@@ -268,15 +268,15 @@
 
     private void assertButtonIsEqual(
             @NonNull Button actualButton,
-            @NonNull androidx.wear.tiles.DimensionBuilders.DpProp expectedSize,
+            androidx.wear.tiles.DimensionBuilders.@NonNull DpProp expectedSize,
             @NonNull ButtonColors expectedButtonColors,
             @Nullable String expectedContentDescription,
             @NonNull String expectedMetadataTag,
             @Nullable String expectedTextContent,
             @Nullable String expectedIconContent,
             @Nullable String expectedImageContent,
-            @Nullable
-                    androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedCustomContent) {
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+                    expectedCustomContent) {
         // Mandatory
         assertThat(actualButton.getMetadataTag()).isEqualTo(expectedMetadataTag);
         assertThat(actualButton.getClickable().toProto()).isEqualTo(CLICKABLE.toProto());
@@ -323,15 +323,15 @@
 
     private void assertFromLayoutElementButtonIsEqual(
             @NonNull Button button,
-            @NonNull androidx.wear.tiles.DimensionBuilders.DpProp expectedSize,
+            androidx.wear.tiles.DimensionBuilders.@NonNull DpProp expectedSize,
             @NonNull ButtonColors expectedButtonColors,
             @Nullable String expectedContentDescription,
             @NonNull String expectedMetadataTag,
             @Nullable String expectedTextContent,
             @Nullable String expectedIconContent,
             @Nullable String expectedImageContent,
-            @Nullable
-                    androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedCustomContent) {
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+                    expectedCustomContent) {
         androidx.wear.tiles.LayoutElementBuilders.Box box =
                 new androidx.wear.tiles.LayoutElementBuilders.Box.Builder()
                         .addContent(button)
diff --git a/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/ChipTest.java b/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/ChipTest.java
index 3e96246..808ba0b 100644
--- a/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/ChipTest.java
+++ b/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/ChipTest.java
@@ -23,11 +23,11 @@
 import android.content.Context;
 import android.graphics.Color;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.annotation.internal.DoNotInstrument;
@@ -176,8 +176,8 @@
             @Nullable String expectedPrimaryText,
             @Nullable String expectedLabel,
             @Nullable String expectedIcon,
-            @Nullable
-                    androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedCustomContent) {
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+                    expectedCustomContent) {
         assertChipIsEqual(
                 actualChip,
                 hAlign,
@@ -245,8 +245,8 @@
             @Nullable String expectedPrimaryText,
             @Nullable String expectedLabel,
             @Nullable String expectedIcon,
-            @Nullable
-                    androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedCustomContent) {
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+                    expectedCustomContent) {
         androidx.wear.tiles.LayoutElementBuilders.Box box =
                 new androidx.wear.tiles.LayoutElementBuilders.Box.Builder()
                         .addContent(chip)
@@ -276,8 +276,8 @@
             @Nullable String expectedPrimaryText,
             @Nullable String expectedLabel,
             @Nullable String expectedIcon,
-            @Nullable
-                    androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedCustomContent) {
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
+                    expectedCustomContent) {
         assertThat(actualChip.getMetadataTag()).isEqualTo(expectedMetadata);
         assertThat(actualChip.getClickable().toProto()).isEqualTo(CLICKABLE.toProto());
         assertThat(actualChip.getWidth().toContainerDimensionProto())
diff --git a/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/CircularProgressIndicatorTest.java b/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/CircularProgressIndicatorTest.java
index f6b33f8..738ccf4e 100644
--- a/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/CircularProgressIndicatorTest.java
+++ b/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/CircularProgressIndicatorTest.java
@@ -22,10 +22,10 @@
 
 import android.graphics.Color;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.annotation.internal.DoNotInstrument;
diff --git a/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/layouts/EdgeContentLayoutTest.java b/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/layouts/EdgeContentLayoutTest.java
index f1b5e00..61f0949 100644
--- a/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/layouts/EdgeContentLayoutTest.java
+++ b/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/layouts/EdgeContentLayoutTest.java
@@ -22,11 +22,11 @@
 
 import android.content.Context;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.annotation.internal.DoNotInstrument;
@@ -148,13 +148,11 @@
 
     private void assertLayout(
             @NonNull EdgeContentLayout actualLayout,
-            @Nullable
-                    androidx.wear.tiles.LayoutElementBuilders.LayoutElement
+                                androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
                             expectedProgressIndicator,
-            @Nullable androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedContent,
-            @Nullable androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedPrimaryLabel,
-            @Nullable
-                    androidx.wear.tiles.LayoutElementBuilders.LayoutElement
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement expectedContent,
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement expectedPrimaryLabel,
+                                androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
                             expectedSecondaryLabel) {
         assertLayoutIsEqual(
                 actualLayout,
@@ -183,13 +181,11 @@
 
     private void assertLayoutIsEqual(
             @NonNull EdgeContentLayout actualLayout,
-            @Nullable
-                    androidx.wear.tiles.LayoutElementBuilders.LayoutElement
+                                androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
                             expectedProgressIndicator,
-            @Nullable androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedContent,
-            @Nullable androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedPrimaryLabel,
-            @Nullable
-                    androidx.wear.tiles.LayoutElementBuilders.LayoutElement
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement expectedContent,
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement expectedPrimaryLabel,
+                                androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
                             expectedSecondaryLabel) {
         byte[] expectedMetadata = EdgeContentLayout.METADATA_TAG_BASE.clone();
 
diff --git a/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/layouts/PrimaryLayoutTest.java b/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/layouts/PrimaryLayoutTest.java
index f2e689f..67eb223 100644
--- a/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/layouts/PrimaryLayoutTest.java
+++ b/wear/tiles/tiles-material/src/test/java/androidx/wear/tiles/material/layouts/PrimaryLayoutTest.java
@@ -22,11 +22,11 @@
 
 import android.content.Context;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.annotation.internal.DoNotInstrument;
@@ -194,11 +194,10 @@
     private void assertLayout(
             float height,
             @NonNull PrimaryLayout actualLayout,
-            @Nullable androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedContent,
-            @Nullable androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedPrimaryChip,
-            @Nullable androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedPrimaryLabel,
-            @Nullable
-                    androidx.wear.tiles.LayoutElementBuilders.LayoutElement
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement expectedContent,
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement expectedPrimaryChip,
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement expectedPrimaryLabel,
+                                androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
                             expectedSecondaryLabel) {
         assertLayoutIsEqual(
                 height,
@@ -230,11 +229,10 @@
     private void assertLayoutIsEqual(
             float height,
             @NonNull PrimaryLayout actualLayout,
-            @Nullable androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedContent,
-            @Nullable androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedPrimaryChip,
-            @Nullable androidx.wear.tiles.LayoutElementBuilders.LayoutElement expectedPrimaryLabel,
-            @Nullable
-                    androidx.wear.tiles.LayoutElementBuilders.LayoutElement
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement expectedContent,
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement expectedPrimaryChip,
+            androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement expectedPrimaryLabel,
+                                androidx.wear.tiles.LayoutElementBuilders.@Nullable LayoutElement
                             expectedSecondaryLabel) {
         byte[] expectedMetadata = PrimaryLayout.METADATA_TAG_BASE.clone();
 
diff --git a/wear/tiles/tiles-renderer/build.gradle b/wear/tiles/tiles-renderer/build.gradle
index 5c78299..8c21683 100644
--- a/wear/tiles/tiles-renderer/build.gradle
+++ b/wear/tiles/tiles-renderer/build.gradle
@@ -33,6 +33,7 @@
 }
 
 dependencies {
+    api(libs.jspecify)
     api("androidx.annotation:annotation:1.8.1")
     api(libs.guavaListenableFuture)
 
diff --git a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/client/TileClient.java b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/client/TileClient.java
index bb730a1..cf7f642 100644
--- a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/client/TileClient.java
+++ b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/client/TileClient.java
@@ -18,7 +18,6 @@
 
 import static com.google.common.util.concurrent.MoreExecutors.directExecutor;
 
-import androidx.annotation.NonNull;
 import androidx.wear.protolayout.ResourceBuilders;
 import androidx.wear.tiles.RequestBuilders;
 import androidx.wear.tiles.TileBuilders;
@@ -26,22 +25,21 @@
 import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.ListenableFuture;
 
+import org.jspecify.annotations.NonNull;
+
 /** Client to connect and interact with a TileService. */
 public interface TileClient {
     /** Gets the API version supported by the connected TileService. */
-    @NonNull
-    ListenableFuture<Integer> requestApiVersion();
+    @NonNull ListenableFuture<Integer> requestApiVersion();
 
     /** Request a tile payload from the connected TileService. */
-    @NonNull
-    ListenableFuture<TileBuilders.Tile> requestTile(
-            @NonNull RequestBuilders.TileRequest requestParams);
+    @NonNull ListenableFuture<TileBuilders.Tile> requestTile(
+            RequestBuilders.@NonNull TileRequest requestParams);
 
     /** Request a resource bundle from the connected TileService. */
-    @NonNull
     @SuppressWarnings("deprecation") // For backward compatibility
-    default ListenableFuture<ResourceBuilders.Resources> requestTileResourcesAsync(
-            @NonNull RequestBuilders.ResourcesRequest requestParams) {
+    default @NonNull ListenableFuture<ResourceBuilders.Resources> requestTileResourcesAsync(
+            RequestBuilders.@NonNull ResourcesRequest requestParams) {
         return FluentFuture.from(requestResources(requestParams))
                 .transform(
                         res -> ResourceBuilders.Resources.fromProto(res.toProto()),
@@ -53,24 +51,19 @@
      *
      * @deprecated Use {@link #requestTileResourcesAsync(RequestBuilders.ResourcesRequest)} instead.
      */
-    @NonNull
     @Deprecated
-    ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(
-            @NonNull RequestBuilders.ResourcesRequest requestParams);
+    @NonNull ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(
+            RequestBuilders.@NonNull ResourcesRequest requestParams);
 
     /** Send a Tile Added notification to the connected TileService. */
-    @NonNull
-    ListenableFuture<Void> sendOnTileAddedEvent();
+    @NonNull ListenableFuture<Void> sendOnTileAddedEvent();
 
     /** Send a Tile Removed notification to the connected TileService. */
-    @NonNull
-    ListenableFuture<Void> sendOnTileRemovedEvent();
+    @NonNull ListenableFuture<Void> sendOnTileRemovedEvent();
 
     /** Send a Tile Enter notification to the connected TileService. */
-    @NonNull
-    ListenableFuture<Void> sendOnTileEnterEvent();
+    @NonNull ListenableFuture<Void> sendOnTileEnterEvent();
 
     /** Send a Tile Leave notification to the connected TileService. */
-    @NonNull
-    ListenableFuture<Void> sendOnTileLeaveEvent();
+    @NonNull ListenableFuture<Void> sendOnTileLeaveEvent();
 }
diff --git a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/renderer/TileRenderer.java b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/renderer/TileRenderer.java
index 89f6230..084841d 100644
--- a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/renderer/TileRenderer.java
+++ b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/renderer/TileRenderer.java
@@ -23,8 +23,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.StyleRes;
 import androidx.wear.protolayout.LayoutElementBuilders;
@@ -49,6 +47,9 @@
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -81,24 +82,23 @@
          *
          * @param nextState The state that the next tile should be in.
          */
-        void onClick(@NonNull androidx.wear.tiles.StateBuilders.State nextState);
+        void onClick(androidx.wear.tiles.StateBuilders.@NonNull State nextState);
     }
 
-    @NonNull private final Context mUiContext;
-    @NonNull private final Executor mLoadActionExecutor;
-    @NonNull private final Consumer<StateBuilders.State> mLoadActionListener;
+    private final @NonNull Context mUiContext;
+    private final @NonNull Executor mLoadActionExecutor;
+    private final @NonNull Consumer<StateBuilders.State> mLoadActionListener;
 
     @StyleRes int mTilesTheme = 0; // Default theme.
 
-    @NonNull
-    private final Map<PlatformDataProvider, Set<PlatformDataKey<?>>> mPlatformDataProviders =
-            new ArrayMap<>();
+    private final @NonNull Map<PlatformDataProvider, Set<PlatformDataKey<?>>>
+            mPlatformDataProviders = new ArrayMap<>();
 
-    @NonNull private final ProtoLayoutViewInstance mInstance;
-    @Nullable private final LayoutElementProto.Layout mLayout;
-    @Nullable private final ResourceProto.Resources mResources;
-    @NonNull private final ListeningExecutorService mUiExecutor;
-    @NonNull private final StateStore mStateStore = new StateStore(ImmutableMap.of());
+    private final @NonNull ProtoLayoutViewInstance mInstance;
+    private final LayoutElementProto.@Nullable Layout mLayout;
+    private final ResourceProto.@Nullable Resources mResources;
+    private final @NonNull ListeningExecutorService mUiExecutor;
+    private final @NonNull StateStore mStateStore = new StateStore(ImmutableMap.of());
 
     /**
      * Default constructor.
@@ -115,8 +115,8 @@
     @Deprecated
     public TileRenderer(
             @NonNull Context uiContext,
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.Layout layout,
-            @NonNull androidx.wear.tiles.ResourceBuilders.Resources resources,
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull Layout layout,
+            androidx.wear.tiles.ResourceBuilders.@NonNull Resources resources,
             @NonNull Executor loadActionExecutor,
             @NonNull LoadActionListener loadActionListener) {
         this(
@@ -146,9 +146,9 @@
     @Deprecated
     public TileRenderer(
             @NonNull Context uiContext,
-            @NonNull androidx.wear.tiles.LayoutElementBuilders.Layout layout,
+            androidx.wear.tiles.LayoutElementBuilders.@NonNull Layout layout,
             @StyleRes int tilesTheme,
-            @NonNull androidx.wear.tiles.ResourceBuilders.Resources resources,
+            androidx.wear.tiles.ResourceBuilders.@NonNull Resources resources,
             @NonNull Executor loadActionExecutor,
             @NonNull LoadActionListener loadActionListener) {
         this(
@@ -189,8 +189,8 @@
             @StyleRes int tilesTheme,
             @NonNull Executor loadActionExecutor,
             @NonNull Consumer<StateBuilders.State> loadActionListener,
-            @Nullable LayoutElementProto.Layout layout,
-            @Nullable ResourceProto.Resources resources,
+            LayoutElementProto.@Nullable Layout layout,
+            ResourceProto.@Nullable Resources resources,
             @Nullable Map<PlatformDataProvider, Set<PlatformDataKey<?>>> platformDataProviders) {
 
         this.mUiContext = uiContext;
@@ -227,9 +227,8 @@
         this.mInstance = new ProtoLayoutViewInstance(config.build());
     }
 
-    @NonNull
     @SuppressWarnings("deprecation") // For backward compatibility
-    private static Consumer<StateBuilders.State> toStateConsumer(
+    private static @NonNull Consumer<StateBuilders.State> toStateConsumer(
             @NonNull LoadActionListener loadActionListener) {
         return nextState ->
                 loadActionListener.onClick(
@@ -253,8 +252,7 @@
      *     deprecated constructors that accept Layout and Resources.
      */
     @Deprecated
-    @Nullable
-    public View inflate(@NonNull ViewGroup parent) {
+    public @Nullable View inflate(@NonNull ViewGroup parent) {
         String errorMessage =
                 "This method only works with the deprecated constructors that accept Layout and"
                         + " Resources.";
@@ -298,38 +296,33 @@
      *     empty or the top-level LayoutElement has no inner set, or the top-level LayoutElement
      *     contains an unsupported inner type.
      */
-    @NonNull
-    public ListenableFuture<View> inflateAsync(
-            @NonNull LayoutElementBuilders.Layout layout,
-            @NonNull ResourceBuilders.Resources resources,
+    public @NonNull ListenableFuture<View> inflateAsync(
+            LayoutElementBuilders.@NonNull Layout layout,
+            ResourceBuilders.@NonNull Resources resources,
             @NonNull ViewGroup parent) {
         return inflateLayout(layout.toProto(), resources.toProto(), parent);
     }
 
-    @NonNull
-    private ListenableFuture<View> inflateLayout(
-            @NonNull LayoutElementProto.Layout layout,
-            @NonNull ResourceProto.Resources resources,
+    private @NonNull ListenableFuture<View> inflateLayout(
+            LayoutElementProto.@NonNull Layout layout,
+            ResourceProto.@NonNull Resources resources,
             @NonNull ViewGroup parent) {
         ListenableFuture<Void> result = mInstance.renderAndAttach(layout, resources, parent);
         return FluentFuture.from(result).transform(ignored -> parent.getChildAt(0), mUiExecutor);
     }
 
     /** Returns the {@link Context} suitable for interacting with the UI. */
-    @NonNull
-    public Context getUiContext() {
+    public @NonNull Context getUiContext() {
         return mUiContext;
     }
 
     /** Returns the {@link Executor} for {@code loadActionListener}. */
-    @NonNull
-    public Executor getLoadActionExecutor() {
+    public @NonNull Executor getLoadActionExecutor() {
         return mLoadActionExecutor;
     }
 
     /** Returns the Listener for clicks that will cause the contents to be reloaded. */
-    @NonNull
-    public Consumer<StateBuilders.State> getLoadActionListener() {
+    public @NonNull Consumer<StateBuilders.State> getLoadActionListener() {
         return mLoadActionListener;
     }
 
@@ -343,22 +336,20 @@
     }
 
     /** Returns the platform data providers that will be registered for this Tile instance. */
-    @NonNull
-    public Map<PlatformDataProvider, Set<PlatformDataKey<?>>> getPlatformDataProviders() {
+    public @NonNull Map<PlatformDataProvider, Set<PlatformDataKey<?>>> getPlatformDataProviders() {
         return Collections.unmodifiableMap(mPlatformDataProviders);
     }
 
     /** Builder for {@link TileRenderer}. */
     public static final class Builder {
-        @NonNull private final Context mUiContext;
-        @NonNull private final Executor mLoadActionExecutor;
-        @NonNull private final Consumer<StateBuilders.State> mLoadActionListener;
+        private final @NonNull Context mUiContext;
+        private final @NonNull Executor mLoadActionExecutor;
+        private final @NonNull Consumer<StateBuilders.State> mLoadActionListener;
 
         @StyleRes int mTilesTheme = 0; // Default theme.
 
-        @NonNull
-        private final Map<PlatformDataProvider, Set<PlatformDataKey<?>>> mPlatformDataProviders =
-                new ArrayMap<>();
+        private final @NonNull Map<PlatformDataProvider, Set<PlatformDataKey<?>>>
+                mPlatformDataProviders = new ArrayMap<>();
 
         /**
          * Builder for the {@link TileRenderer} class.
@@ -381,8 +372,7 @@
          * Sets the theme to use for this Tile instance. This can be used to customise things like
          * the default font family. If not set, zero (default theme) will be used.
          */
-        @NonNull
-        public Builder setTilesTheme(@StyleRes int tilesTheme) {
+        public @NonNull Builder setTilesTheme(@StyleRes int tilesTheme) {
             mTilesTheme = tilesTheme;
             return this;
         }
@@ -392,18 +382,16 @@
          * supportedKeys}. Adding the same {@link PlatformDataProvider} several times will override
          * previous entries instead of adding multiple entries.
          */
-        @NonNull
-        public Builder addPlatformDataProvider(
+        public @NonNull Builder addPlatformDataProvider(
                 @NonNull PlatformDataProvider platformDataProvider,
-                @NonNull PlatformDataKey<?>... supportedKeys) {
+                PlatformDataKey<?> @NonNull ... supportedKeys) {
             this.mPlatformDataProviders.put(
                     platformDataProvider, ImmutableSet.copyOf(supportedKeys));
             return this;
         }
 
         /** Builds {@link TileRenderer} object. */
-        @NonNull
-        public TileRenderer build() {
+        public @NonNull TileRenderer build() {
             return new TileRenderer(
                     mUiContext,
                     mTilesTheme,
diff --git a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/TilesTimelineCache.java b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/TilesTimelineCache.java
index edfd08b..8592cae 100644
--- a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/TilesTimelineCache.java
+++ b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/TilesTimelineCache.java
@@ -17,12 +17,13 @@
 package androidx.wear.tiles.timeline;
 
 import androidx.annotation.MainThread;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.wear.protolayout.TimelineBuilders;
 import androidx.wear.protolayout.proto.TimelineProto.TimelineEntry;
 import androidx.wear.tiles.timeline.internal.TilesTimelineCacheInternal;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Timeline cache for Wear Tiles. This will take in a full timeline, and return the appropriate
  * entry for the given time from {@code findTimelineEntryForTime}.
@@ -36,12 +37,12 @@
      * @deprecated Use {@link #TilesTimelineCache(TimelineBuilders.Timeline)} instead.
      */
     @Deprecated
-    public TilesTimelineCache(@NonNull androidx.wear.tiles.TimelineBuilders.Timeline timeline) {
+    public TilesTimelineCache(androidx.wear.tiles.TimelineBuilders.@NonNull Timeline timeline) {
         mCache = new TilesTimelineCacheInternal(timeline.toProto());
     }
 
     /** Default constructor. */
-    public TilesTimelineCache(@NonNull TimelineBuilders.Timeline timeline) {
+    public TilesTimelineCache(TimelineBuilders.@NonNull Timeline timeline) {
         mCache = new TilesTimelineCacheInternal(timeline.toProto());
     }
 
@@ -58,8 +59,7 @@
      */
     @Deprecated
     @MainThread
-    @Nullable
-    public androidx.wear.tiles.TimelineBuilders.TimelineEntry findTimelineEntryForTime(
+    public androidx.wear.tiles.TimelineBuilders.@Nullable TimelineEntry findTimelineEntryForTime(
             long timeMillis) {
         TimelineEntry entry = mCache.findTimelineEntryForTime(timeMillis);
 
@@ -81,8 +81,7 @@
      *     none are valid.
      */
     @MainThread
-    @Nullable
-    public TimelineBuilders.TimelineEntry findTileTimelineEntryForTime(long timeMillis) {
+    public TimelineBuilders.@Nullable TimelineEntry findTileTimelineEntryForTime(long timeMillis) {
         TimelineEntry entry = mCache.findTimelineEntryForTime(timeMillis);
 
         if (entry == null) {
@@ -107,9 +106,8 @@
      * @deprecated Use {@link #findClosestTileTimelineEntry(long)} instead.
      */
     @MainThread
-    @Nullable
     @Deprecated
-    public androidx.wear.tiles.TimelineBuilders.TimelineEntry findClosestTimelineEntry(
+    public androidx.wear.tiles.TimelineBuilders.@Nullable TimelineEntry findClosestTimelineEntry(
             long timeMillis) {
         TimelineEntry entry = mCache.findClosestTimelineEntry(timeMillis);
 
@@ -134,8 +132,7 @@
      * @return The timeline entry with validity period closest to {@code timeMillis}.
      */
     @MainThread
-    @Nullable
-    public TimelineBuilders.TimelineEntry findClosestTileTimelineEntry(long timeMillis) {
+    public TimelineBuilders.@Nullable TimelineEntry findClosestTileTimelineEntry(long timeMillis) {
         TimelineEntry entry = mCache.findClosestTimelineEntry(timeMillis);
 
         if (entry == null) {
@@ -161,7 +158,7 @@
     @Deprecated
     @MainThread
     public long findCurrentTimelineEntryExpiry(
-            @NonNull androidx.wear.tiles.TimelineBuilders.TimelineEntry entry,
+            androidx.wear.tiles.TimelineBuilders.@NonNull TimelineEntry entry,
             long fromTimeMillis) {
         return mCache.findCurrentTimelineEntryExpiry(entry.toProto(), fromTimeMillis);
     }
@@ -179,7 +176,7 @@
      */
     @MainThread
     public long findCurrentTimelineEntryExpiry(
-            @NonNull TimelineBuilders.TimelineEntry entry, long fromTimeMillis) {
+            TimelineBuilders.@NonNull TimelineEntry entry, long fromTimeMillis) {
         return mCache.findCurrentTimelineEntryExpiry(entry.toProto(), fromTimeMillis);
     }
 }
diff --git a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/TilesTimelineManager.java b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/TilesTimelineManager.java
index d3ad277..85e601f 100644
--- a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/TilesTimelineManager.java
+++ b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/TilesTimelineManager.java
@@ -18,12 +18,13 @@
 
 import android.app.AlarmManager;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
 import androidx.wear.protolayout.LayoutElementBuilders;
 import androidx.wear.protolayout.TimelineBuilders;
 import androidx.wear.tiles.timeline.internal.TilesTimelineManagerInternal;
 
+import org.jspecify.annotations.NonNull;
+
 import java.util.concurrent.Executor;
 
 /**
@@ -61,7 +62,7 @@
          */
         @Deprecated
         void onLayoutUpdate(
-                int token, @NonNull androidx.wear.tiles.LayoutElementBuilders.Layout layout);
+                int token, androidx.wear.tiles.LayoutElementBuilders.@NonNull Layout layout);
     }
 
     /** Type to listen for layout updates from a given timeline. */
@@ -73,7 +74,7 @@
          * @param token The token originally passed to {@link TilesTimelineManager}.
          * @param layout The new layout to use.
          */
-        void onLayoutUpdate(int token, @NonNull LayoutElementBuilders.Layout layout);
+        void onLayoutUpdate(int token, LayoutElementBuilders.@NonNull Layout layout);
     }
 
     private final TilesTimelineManagerInternal mManager;
@@ -96,7 +97,7 @@
     public TilesTimelineManager(
             @NonNull AlarmManager alarmManager,
             @NonNull Clock clock,
-            @NonNull androidx.wear.tiles.TimelineBuilders.Timeline timeline,
+            androidx.wear.tiles.TimelineBuilders.@NonNull Timeline timeline,
             int token,
             @NonNull Executor listenerExecutor,
             @NonNull Listener listener) {
@@ -128,7 +129,7 @@
     public TilesTimelineManager(
             @NonNull AlarmManager alarmManager,
             @NonNull Clock clock,
-            @NonNull TimelineBuilders.Timeline timeline,
+            TimelineBuilders.@NonNull Timeline timeline,
             int token,
             @NonNull Executor listenerExecutor,
             @NonNull LayoutUpdateListener listener) {
diff --git a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java
index 4571ad5..fa20027 100644
--- a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java
+++ b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java
@@ -17,12 +17,13 @@
 package androidx.wear.tiles.timeline.internal;
 
 import androidx.annotation.MainThread;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.wear.protolayout.proto.TimelineProto.TimeInterval;
 import androidx.wear.protolayout.proto.TimelineProto.Timeline;
 import androidx.wear.protolayout.proto.TimelineProto.TimelineEntry;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Timeline cache for Tiles. This will take in a full timeline, and return the appropriate entry for
  * the given time from {@code findTimelineEntryForTime}.
@@ -45,8 +46,7 @@
      *     none are valid.
      */
     @MainThread
-    @Nullable
-    public TimelineEntry findTimelineEntryForTime(long timeMillis) {
+    public @Nullable TimelineEntry findTimelineEntryForTime(long timeMillis) {
         TimelineEntry currentEntry = null;
         long currentEntryLength = Long.MAX_VALUE;
 
@@ -93,8 +93,7 @@
      * @return The timeline entry with validity period closest to {@code timeMillis}.
      */
     @MainThread
-    @Nullable
-    public TimelineEntry findClosestTimelineEntry(long timeMillis) {
+    public @Nullable TimelineEntry findClosestTimelineEntry(long timeMillis) {
         long currentEntryError = Long.MAX_VALUE;
         TimelineEntry currentEntry = null;
 
diff --git a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineManagerInternal.java b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineManagerInternal.java
index d25e42d..4dc70ac 100644
--- a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineManagerInternal.java
+++ b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineManagerInternal.java
@@ -23,11 +23,12 @@
 import android.app.AlarmManager.OnAlarmListener;
 import android.util.Log;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.wear.protolayout.proto.TimelineProto.Timeline;
 import androidx.wear.protolayout.proto.TimelineProto.TimelineEntry;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.concurrent.Executor;
 
 /**
@@ -65,7 +66,7 @@
     private final Executor mListenerExecutor;
     private final Listener mListener;
     private final int mToken;
-    @Nullable private OnAlarmListener mAlarmListener = null;
+    private @Nullable OnAlarmListener mAlarmListener = null;
 
     /**
      * Default constructor.
diff --git a/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/timeline/TilesTimelineCacheTest.java b/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/timeline/TilesTimelineCacheTest.java
index e7a1782..5ef39ef 100644
--- a/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/timeline/TilesTimelineCacheTest.java
+++ b/wear/tiles/tiles-renderer/src/test/java/androidx/wear/tiles/timeline/TilesTimelineCacheTest.java
@@ -18,13 +18,13 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import androidx.annotation.Nullable;
 import androidx.wear.protolayout.LayoutElementBuilders;
 import androidx.wear.protolayout.TimelineBuilders;
 import androidx.wear.tiles.TilesTestRunner;
 
 import com.google.common.truth.Expect;
 
+import org.jspecify.annotations.Nullable;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -552,8 +552,8 @@
     }
 
     private void expectTimelineEntryEqual(
-            @Nullable TimelineBuilders.TimelineEntry actual,
-            @Nullable TimelineBuilders.TimelineEntry expected) {
+            TimelineBuilders.@Nullable TimelineEntry actual,
+            TimelineBuilders.@Nullable TimelineEntry expected) {
         if (expected == null) {
             expect.that(actual).isNull();
         } else {
diff --git a/wear/tiles/tiles/build.gradle b/wear/tiles/tiles/build.gradle
index 316a1fa..a69618c 100644
--- a/wear/tiles/tiles/build.gradle
+++ b/wear/tiles/tiles/build.gradle
@@ -29,6 +29,7 @@
 }
 
 dependencies {
+    api(libs.jspecify)
     api("androidx.annotation:annotation:1.8.1")
     api(project(":wear:protolayout:protolayout"))
     api(project(":wear:protolayout:protolayout-expression"))
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ActionBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ActionBuilders.java
index 37ad14f..85f81af 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ActionBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ActionBuilders.java
@@ -22,13 +22,14 @@
 
 import android.annotation.SuppressLint;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.ActionProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.Collections;
 import java.util.Map;
 
@@ -42,39 +43,34 @@
     private ActionBuilders() {}
 
     /** Shortcut for building an {@link AndroidStringExtra}. */
-    @NonNull
-    public static AndroidStringExtra stringExtra(@NonNull String value) {
+    public static @NonNull AndroidStringExtra stringExtra(@NonNull String value) {
         return new AndroidStringExtra.Builder().setValue(value).build();
     }
 
     /** Shortcut for building an {@link AndroidIntExtra}. */
-    @NonNull
-    public static AndroidIntExtra intExtra(int value) {
+    public static @NonNull AndroidIntExtra intExtra(int value) {
         return new AndroidIntExtra.Builder().setValue(value).build();
     }
 
     /** Shortcut for building an {@link AndroidLongExtra}. */
-    @NonNull
-    public static AndroidLongExtra longExtra(long value) {
+    public static @NonNull AndroidLongExtra longExtra(long value) {
         return new AndroidLongExtra.Builder().setValue(value).build();
     }
 
     /** Shortcut for building an {@link AndroidDoubleExtra}. */
-    @NonNull
-    public static AndroidDoubleExtra doubleExtra(double value) {
+    public static @NonNull AndroidDoubleExtra doubleExtra(double value) {
         return new AndroidDoubleExtra.Builder().setValue(value).build();
     }
 
     /** Shortcut for building an {@link AndroidBooleanExtra}. */
-    @NonNull
-    public static AndroidBooleanExtra booleanExtra(boolean value) {
+    public static @NonNull AndroidBooleanExtra booleanExtra(boolean value) {
         return new AndroidBooleanExtra.Builder().setValue(value).build();
     }
 
     /** A string value that can be added to an Android intent's extras. */
     public static final class AndroidStringExtra implements AndroidExtra {
         private final ActionProto.AndroidStringExtra mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         AndroidStringExtra(ActionProto.AndroidStringExtra impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -82,32 +78,28 @@
         }
 
         /** Gets the value. Intended for testing purposes only. */
-        @NonNull
-        public String getValue() {
+        public @NonNull String getValue() {
             return mImpl.getValue();
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static AndroidStringExtra fromProto(@NonNull ActionProto.AndroidStringExtra proto) {
+        static @NonNull AndroidStringExtra fromProto(
+                ActionProto.@NonNull AndroidStringExtra proto) {
             return new AndroidStringExtra(proto, null);
         }
 
-        @NonNull
-        ActionProto.AndroidStringExtra toProto() {
+        ActionProto.@NonNull AndroidStringExtra toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ActionProto.AndroidExtra toAndroidExtraProto() {
+        public ActionProto.@NonNull AndroidExtra toAndroidExtraProto() {
             return ActionProto.AndroidExtra.newBuilder().setStringVal(mImpl).build();
         }
 
@@ -120,16 +112,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(@NonNull String value) {
+            public @NonNull Builder setValue(@NonNull String value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(1, value.hashCode());
                 return this;
             }
 
             @Override
-            @NonNull
-            public AndroidStringExtra build() {
+            public @NonNull AndroidStringExtra build() {
                 return new AndroidStringExtra(mImpl.build(), mFingerprint);
             }
         }
@@ -138,7 +128,7 @@
     /** An integer value that can be added to an Android intent's extras. */
     public static final class AndroidIntExtra implements AndroidExtra {
         private final ActionProto.AndroidIntExtra mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         AndroidIntExtra(ActionProto.AndroidIntExtra impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -152,25 +142,21 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static AndroidIntExtra fromProto(@NonNull ActionProto.AndroidIntExtra proto) {
+        static @NonNull AndroidIntExtra fromProto(ActionProto.@NonNull AndroidIntExtra proto) {
             return new AndroidIntExtra(proto, null);
         }
 
-        @NonNull
-        ActionProto.AndroidIntExtra toProto() {
+        ActionProto.@NonNull AndroidIntExtra toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ActionProto.AndroidExtra toAndroidExtraProto() {
+        public ActionProto.@NonNull AndroidExtra toAndroidExtraProto() {
             return ActionProto.AndroidExtra.newBuilder().setIntVal(mImpl).build();
         }
 
@@ -183,16 +169,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(int value) {
+            public @NonNull Builder setValue(int value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(1, value);
                 return this;
             }
 
             @Override
-            @NonNull
-            public AndroidIntExtra build() {
+            public @NonNull AndroidIntExtra build() {
                 return new AndroidIntExtra(mImpl.build(), mFingerprint);
             }
         }
@@ -201,7 +185,7 @@
     /** A long value that can be added to an Android intent's extras. */
     public static final class AndroidLongExtra implements AndroidExtra {
         private final ActionProto.AndroidLongExtra mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         AndroidLongExtra(ActionProto.AndroidLongExtra impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -215,25 +199,21 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static AndroidLongExtra fromProto(@NonNull ActionProto.AndroidLongExtra proto) {
+        static @NonNull AndroidLongExtra fromProto(ActionProto.@NonNull AndroidLongExtra proto) {
             return new AndroidLongExtra(proto, null);
         }
 
-        @NonNull
-        ActionProto.AndroidLongExtra toProto() {
+        ActionProto.@NonNull AndroidLongExtra toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ActionProto.AndroidExtra toAndroidExtraProto() {
+        public ActionProto.@NonNull AndroidExtra toAndroidExtraProto() {
             return ActionProto.AndroidExtra.newBuilder().setLongVal(mImpl).build();
         }
 
@@ -246,16 +226,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(long value) {
+            public @NonNull Builder setValue(long value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(1, Long.hashCode(value));
                 return this;
             }
 
             @Override
-            @NonNull
-            public AndroidLongExtra build() {
+            public @NonNull AndroidLongExtra build() {
                 return new AndroidLongExtra(mImpl.build(), mFingerprint);
             }
         }
@@ -264,7 +242,7 @@
     /** A double value that can be added to an Android intent's extras. */
     public static final class AndroidDoubleExtra implements AndroidExtra {
         private final ActionProto.AndroidDoubleExtra mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         AndroidDoubleExtra(ActionProto.AndroidDoubleExtra impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -278,25 +256,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static AndroidDoubleExtra fromProto(@NonNull ActionProto.AndroidDoubleExtra proto) {
+        static @NonNull AndroidDoubleExtra fromProto(
+                ActionProto.@NonNull AndroidDoubleExtra proto) {
             return new AndroidDoubleExtra(proto, null);
         }
 
-        @NonNull
-        ActionProto.AndroidDoubleExtra toProto() {
+        ActionProto.@NonNull AndroidDoubleExtra toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ActionProto.AndroidExtra toAndroidExtraProto() {
+        public ActionProto.@NonNull AndroidExtra toAndroidExtraProto() {
             return ActionProto.AndroidExtra.newBuilder().setDoubleVal(mImpl).build();
         }
 
@@ -309,16 +284,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(double value) {
+            public @NonNull Builder setValue(double value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(1, Double.hashCode(value));
                 return this;
             }
 
             @Override
-            @NonNull
-            public AndroidDoubleExtra build() {
+            public @NonNull AndroidDoubleExtra build() {
                 return new AndroidDoubleExtra(mImpl.build(), mFingerprint);
             }
         }
@@ -327,7 +300,7 @@
     /** A boolean value that can be added to an Android intent's extras. */
     public static final class AndroidBooleanExtra implements AndroidExtra {
         private final ActionProto.AndroidBooleanExtra mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         AndroidBooleanExtra(
                 ActionProto.AndroidBooleanExtra impl, @Nullable Fingerprint fingerprint) {
@@ -342,25 +315,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static AndroidBooleanExtra fromProto(@NonNull ActionProto.AndroidBooleanExtra proto) {
+        static @NonNull AndroidBooleanExtra fromProto(
+                ActionProto.@NonNull AndroidBooleanExtra proto) {
             return new AndroidBooleanExtra(proto, null);
         }
 
-        @NonNull
-        ActionProto.AndroidBooleanExtra toProto() {
+        ActionProto.@NonNull AndroidBooleanExtra toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ActionProto.AndroidExtra toAndroidExtraProto() {
+        public ActionProto.@NonNull AndroidExtra toAndroidExtraProto() {
             return ActionProto.AndroidExtra.newBuilder().setBooleanVal(mImpl).build();
         }
 
@@ -374,16 +344,14 @@
 
             /** Sets the value. */
             @SuppressLint("MissingGetterMatchingBuilder")
-            @NonNull
-            public Builder setValue(boolean value) {
+            public @NonNull Builder setValue(boolean value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(1, Boolean.hashCode(value));
                 return this;
             }
 
             @Override
-            @NonNull
-            public AndroidBooleanExtra build() {
+            public @NonNull AndroidBooleanExtra build() {
                 return new AndroidBooleanExtra(mImpl.build(), mFingerprint);
             }
         }
@@ -396,29 +364,25 @@
     public interface AndroidExtra {
         /** Get the protocol buffer representation of this object. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        ActionProto.AndroidExtra toAndroidExtraProto();
+        ActionProto.@NonNull AndroidExtra toAndroidExtraProto();
 
         /** Get the fingerprint for this object or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        Fingerprint getFingerprint();
+        @Nullable Fingerprint getFingerprint();
 
         /** Builder to create {@link AndroidExtra} objects. */
         @SuppressLint("StaticFinalBuilder")
         interface Builder {
 
             /** Builds an instance with values accumulated in this Builder. */
-            @NonNull
-            AndroidExtra build();
+            @NonNull AndroidExtra build();
         }
     }
 
     /**
      * Return an instance of one of this object's subtypes, from the protocol buffer representation.
      */
-    @NonNull
-    static AndroidExtra androidExtraFromProto(@NonNull ActionProto.AndroidExtra proto) {
+    static @NonNull AndroidExtra androidExtraFromProto(ActionProto.@NonNull AndroidExtra proto) {
         if (proto.hasStringVal()) {
             return AndroidStringExtra.fromProto(proto.getStringVal());
         }
@@ -440,7 +404,7 @@
     /** A launch action to send an intent to an Android activity. */
     public static final class AndroidActivity {
         private final ActionProto.AndroidActivity mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         AndroidActivity(ActionProto.AndroidActivity impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -451,8 +415,7 @@
          * Gets the package name to send the intent to, for example, "com.google.weather". Intended
          * for testing purposes only.
          */
-        @NonNull
-        public String getPackageName() {
+        public @NonNull String getPackageName() {
             return mImpl.getPackageName();
         }
 
@@ -461,14 +424,12 @@
          * example, "com.google.weather.WeatherOverviewActivity". Intended for testing purposes
          * only.
          */
-        @NonNull
-        public String getClassName() {
+        public @NonNull String getClassName() {
             return mImpl.getClassName();
         }
 
         /** Gets the extras to be included in the intent. Intended for testing purposes only. */
-        @NonNull
-        public Map<String, AndroidExtra> getKeyToExtraMapping() {
+        public @NonNull Map<String, AndroidExtra> getKeyToExtraMapping() {
             return Collections.unmodifiableMap(
                     mImpl.getKeyToExtraMap().entrySet().stream()
                             .collect(
@@ -479,18 +440,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static AndroidActivity fromProto(@NonNull ActionProto.AndroidActivity proto) {
+        static @NonNull AndroidActivity fromProto(ActionProto.@NonNull AndroidActivity proto) {
             return new AndroidActivity(proto, null);
         }
 
-        @NonNull
-        ActionProto.AndroidActivity toProto() {
+        ActionProto.@NonNull AndroidActivity toProto() {
             return mImpl;
         }
 
@@ -503,8 +461,7 @@
             public Builder() {}
 
             /** Sets the package name to send the intent to, for example, "com.google.weather". */
-            @NonNull
-            public Builder setPackageName(@NonNull String packageName) {
+            public @NonNull Builder setPackageName(@NonNull String packageName) {
                 mImpl.setPackageName(packageName);
                 mFingerprint.recordPropertyUpdate(1, packageName.hashCode());
                 return this;
@@ -514,8 +471,7 @@
              * Sets the fully qualified class name (including the package) to send the intent to,
              * for example, "com.google.weather.WeatherOverviewActivity".
              */
-            @NonNull
-            public Builder setClassName(@NonNull String className) {
+            public @NonNull Builder setClassName(@NonNull String className) {
                 mImpl.setClassName(className);
                 mFingerprint.recordPropertyUpdate(2, className.hashCode());
                 return this;
@@ -523,8 +479,8 @@
 
             /** Adds an entry into the extras to be included in the intent. */
             @SuppressLint("MissingGetterMatchingBuilder")
-            @NonNull
-            public Builder addKeyToExtraMapping(@NonNull String key, @NonNull AndroidExtra extra) {
+            public @NonNull Builder addKeyToExtraMapping(@NonNull String key,
+                    @NonNull AndroidExtra extra) {
                 mImpl.putKeyToExtra(key, extra.toAndroidExtraProto());
                 mFingerprint.recordPropertyUpdate(
                         key.hashCode(), checkNotNull(extra.getFingerprint()).aggregateValueAsInt());
@@ -532,8 +488,7 @@
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public AndroidActivity build() {
+            public @NonNull AndroidActivity build() {
                 return new AndroidActivity(mImpl.build(), mFingerprint);
             }
         }
@@ -546,7 +501,7 @@
      */
     public static final class LaunchAction implements Action {
         private final ActionProto.LaunchAction mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         LaunchAction(ActionProto.LaunchAction impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -554,8 +509,7 @@
         }
 
         /** Gets an action to launch an Android activity. Intended for testing purposes only. */
-        @Nullable
-        public AndroidActivity getAndroidActivity() {
+        public @Nullable AndroidActivity getAndroidActivity() {
             if (mImpl.hasAndroidActivity()) {
                 return AndroidActivity.fromProto(mImpl.getAndroidActivity());
             } else {
@@ -565,25 +519,21 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static LaunchAction fromProto(@NonNull ActionProto.LaunchAction proto) {
+        static @NonNull LaunchAction fromProto(ActionProto.@NonNull LaunchAction proto) {
             return new LaunchAction(proto, null);
         }
 
-        @NonNull
-        ActionProto.LaunchAction toProto() {
+        ActionProto.@NonNull LaunchAction toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ActionProto.Action toActionProto() {
+        public ActionProto.@NonNull Action toActionProto() {
             return ActionProto.Action.newBuilder().setLaunchAction(mImpl).build();
         }
 
@@ -596,8 +546,7 @@
             public Builder() {}
 
             /** Sets an action to launch an Android activity. */
-            @NonNull
-            public Builder setAndroidActivity(@NonNull AndroidActivity androidActivity) {
+            public @NonNull Builder setAndroidActivity(@NonNull AndroidActivity androidActivity) {
                 mImpl.setAndroidActivity(androidActivity.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(androidActivity.getFingerprint()).aggregateValueAsInt());
@@ -605,8 +554,7 @@
             }
 
             @Override
-            @NonNull
-            public LaunchAction build() {
+            public @NonNull LaunchAction build() {
                 return new LaunchAction(mImpl.build(), mFingerprint);
             }
         }
@@ -615,7 +563,7 @@
     /** An action used to load (or reload) the tile contents. */
     public static final class LoadAction implements Action {
         private final ActionProto.LoadAction mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         LoadAction(ActionProto.LoadAction impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -628,8 +576,7 @@
          * {@link androidx.wear.tiles.ModifiersBuilders.Clickable}. Intended for testing purposes
          * only.
          */
-        @Nullable
-        public StateBuilders.State getRequestState() {
+        public StateBuilders.@Nullable State getRequestState() {
             if (mImpl.hasRequestState()) {
                 return StateBuilders.State.fromProto(mImpl.getRequestState());
             } else {
@@ -639,25 +586,21 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static LoadAction fromProto(@NonNull ActionProto.LoadAction proto) {
+        static @NonNull LoadAction fromProto(ActionProto.@NonNull LoadAction proto) {
             return new LoadAction(proto, null);
         }
 
-        @NonNull
-        ActionProto.LoadAction toProto() {
+        ActionProto.@NonNull LoadAction toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ActionProto.Action toActionProto() {
+        public ActionProto.@NonNull Action toActionProto() {
             return ActionProto.Action.newBuilder().setLoadAction(mImpl).build();
         }
 
@@ -674,8 +617,7 @@
              * androidx.wear.tiles.RequestBuilders.TileRequest} sent after this action is invoked by
              * a {@link androidx.wear.tiles.ModifiersBuilders.Clickable}.
              */
-            @NonNull
-            public Builder setRequestState(@NonNull StateBuilders.State requestState) {
+            public @NonNull Builder setRequestState(StateBuilders.@NonNull State requestState) {
                 mImpl.setRequestState(requestState.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(requestState.getFingerprint()).aggregateValueAsInt());
@@ -683,8 +625,7 @@
             }
 
             @Override
-            @NonNull
-            public LoadAction build() {
+            public @NonNull LoadAction build() {
                 return new LoadAction(mImpl.build(), mFingerprint);
             }
         }
@@ -694,29 +635,25 @@
     public interface Action {
         /** Get the protocol buffer representation of this object. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        ActionProto.Action toActionProto();
+        ActionProto.@NonNull Action toActionProto();
 
         /** Get the fingerprint for this object or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        Fingerprint getFingerprint();
+        @Nullable Fingerprint getFingerprint();
 
         /** Builder to create {@link Action} objects. */
         @SuppressLint("StaticFinalBuilder")
         interface Builder {
 
             /** Builds an instance with values accumulated in this Builder. */
-            @NonNull
-            Action build();
+            @NonNull Action build();
         }
     }
 
     /**
      * Return an instance of one of this object's subtypes, from the protocol buffer representation.
      */
-    @NonNull
-    static Action actionFromProto(@NonNull ActionProto.Action proto) {
+    static @NonNull Action actionFromProto(ActionProto.@NonNull Action proto) {
         if (proto.hasLaunchAction()) {
             return LaunchAction.fromProto(proto.getLaunchAction());
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ActiveTileIdentifier.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ActiveTileIdentifier.java
index 419d8f9..9d53721 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ActiveTileIdentifier.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ActiveTileIdentifier.java
@@ -18,7 +18,7 @@
 
 import android.content.ComponentName;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 /**
  * Tile information containing the tile instance ID and component name for identifying a tile
@@ -34,8 +34,7 @@
     }
 
     /** Component name of the tile provider. */
-    @NonNull
-    public ComponentName getComponentName() {
+    public @NonNull ComponentName getComponentName() {
         return mComponentName;
     }
 
@@ -53,8 +52,7 @@
      *     represented as the tileId, concatenated with a ':' and then the component name flattened
      *     to string.
      */
-    @NonNull
-    String flattenToString() {
+    @NonNull String flattenToString() {
         return mInstanceId + ":" + mComponentName.flattenToString();
     }
 
@@ -67,8 +65,7 @@
      * @return Returns a new ActiveTileIdentifier containing the tile id and component name that
      *     were encoded in {@code string}.
      */
-    @NonNull
-    static ActiveTileIdentifier unflattenFromString(@NonNull String string) {
+    static @NonNull ActiveTileIdentifier unflattenFromString(@NonNull String string) {
         int delimiterIndex = string.indexOf(":");
         return new ActiveTileIdentifier(
                 ComponentName.unflattenFromString(string.substring(delimiterIndex + 1)),
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ColorBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ColorBuilders.java
index dd34db9..3e0526a 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ColorBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ColorBuilders.java
@@ -17,13 +17,14 @@
 package androidx.wear.tiles;
 
 import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.ColorProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Builders for color utilities for layout elements.
  *
@@ -34,15 +35,14 @@
     private ColorBuilders() {}
 
     /** Shortcut for building a {@link ColorProp} using an ARGB value. */
-    @NonNull
-    public static ColorProp argb(@ColorInt int colorArgb) {
+    public static @NonNull ColorProp argb(@ColorInt int colorArgb) {
         return new ColorProp.Builder().setArgb(colorArgb).build();
     }
 
     /** A property defining a color. */
     public static final class ColorProp {
         private final ColorProto.ColorProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         ColorProp(ColorProto.ColorProp impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -57,18 +57,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static ColorProp fromProto(@NonNull ColorProto.ColorProp proto) {
+        static @NonNull ColorProp fromProto(ColorProto.@NonNull ColorProp proto) {
             return new ColorProp(proto, null);
         }
 
-        @NonNull
-        ColorProto.ColorProp toProto() {
+        ColorProto.@NonNull ColorProp toProto() {
             return mImpl;
         }
 
@@ -80,16 +77,14 @@
             public Builder() {}
 
             /** Sets the color value, in ARGB format. */
-            @NonNull
-            public Builder setArgb(@ColorInt int argb) {
+            public @NonNull Builder setArgb(@ColorInt int argb) {
                 mImpl.setArgb(argb);
                 mFingerprint.recordPropertyUpdate(1, argb);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public ColorProp build() {
+            public @NonNull ColorProp build() {
                 return new ColorProp(mImpl.build(), mFingerprint);
             }
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/CompositeTileUpdateRequester.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/CompositeTileUpdateRequester.java
index 2233b74..3ac0640 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/CompositeTileUpdateRequester.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/CompositeTileUpdateRequester.java
@@ -16,7 +16,7 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 import java.util.List;
 
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java
index 662d045..fbd4755 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java
@@ -21,10 +21,11 @@
 import androidx.annotation.Dimension;
 import androidx.annotation.FloatRange;
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.wear.protolayout.proto.DeviceParametersProto;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
@@ -108,13 +109,12 @@
             return mImpl.getScreenShape().getNumber();
         }
 
-        @NonNull
-        static DeviceParameters fromProto(@NonNull DeviceParametersProto.DeviceParameters proto) {
+        static @NonNull DeviceParameters fromProto(
+                DeviceParametersProto.@NonNull DeviceParameters proto) {
             return new DeviceParameters(proto);
         }
 
-        @NonNull
-        DeviceParametersProto.DeviceParameters toProto() {
+        DeviceParametersProto.@NonNull DeviceParameters toProto() {
             return mImpl;
         }
 
@@ -126,15 +126,13 @@
             public Builder() {}
 
             /** Sets width of the device's screen in DP. */
-            @NonNull
-            public Builder setScreenWidthDp(@Dimension(unit = DP) int screenWidthDp) {
+            public @NonNull Builder setScreenWidthDp(@Dimension(unit = DP) int screenWidthDp) {
                 mImpl.setScreenWidthDp(screenWidthDp);
                 return this;
             }
 
             /** Sets height of the device's screen in DP. */
-            @NonNull
-            public Builder setScreenHeightDp(@Dimension(unit = DP) int screenHeightDp) {
+            public @NonNull Builder setScreenHeightDp(@Dimension(unit = DP) int screenHeightDp) {
                 mImpl.setScreenHeightDp(screenHeightDp);
                 return this;
             }
@@ -143,8 +141,7 @@
              * Sets density of the display. This value is the scaling factor to get from DP to
              * Pixels (px = dp * density).
              */
-            @NonNull
-            public Builder setScreenDensity(
+            public @NonNull Builder setScreenDensity(
                     @FloatRange(from = 0.0, fromInclusive = false, toInclusive = false)
                             float screenDensity) {
                 mImpl.setScreenDensity(screenDensity);
@@ -152,23 +149,20 @@
             }
 
             /** Sets the platform of the device. */
-            @NonNull
-            public Builder setDevicePlatform(@DevicePlatform int devicePlatform) {
+            public @NonNull Builder setDevicePlatform(@DevicePlatform int devicePlatform) {
                 mImpl.setDevicePlatform(
                         DeviceParametersProto.DevicePlatform.forNumber(devicePlatform));
                 return this;
             }
 
             /** Sets the shape of the device's screen. */
-            @NonNull
-            public Builder setScreenShape(@ScreenShape int screenShape) {
+            public @NonNull Builder setScreenShape(@ScreenShape int screenShape) {
                 mImpl.setScreenShape(DeviceParametersProto.ScreenShape.forNumber(screenShape));
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public DeviceParameters build() {
+            public @NonNull DeviceParameters build() {
                 return DeviceParameters.fromProto(mImpl.build());
             }
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/DimensionBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/DimensionBuilders.java
index e054a94..050de79 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/DimensionBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/DimensionBuilders.java
@@ -23,13 +23,14 @@
 
 import androidx.annotation.Dimension;
 import androidx.annotation.IntRange;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.DimensionProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Builders for dimensions for layout elements.
  *
@@ -43,32 +44,27 @@
     private static final WrappedDimensionProp WRAP = new WrappedDimensionProp.Builder().build();
 
     /** Shortcut for building a {@link DpProp} using a measurement in DP. */
-    @NonNull
-    public static DpProp dp(@Dimension(unit = DP) float valueDp) {
+    public static @NonNull DpProp dp(@Dimension(unit = DP) float valueDp) {
         return new DpProp.Builder().setValue(valueDp).build();
     }
 
     /** Shortcut for building a {@link SpProp} using a measurement in SP. */
-    @NonNull
-    public static SpProp sp(@Dimension(unit = SP) float valueSp) {
+    public static @NonNull SpProp sp(@Dimension(unit = SP) float valueSp) {
         return new SpProp.Builder().setValue(valueSp).build();
     }
 
     /** Shortcut for building a {@link EmProp} using a measurement in EM. */
-    @NonNull
-    public static EmProp em(int valueEm) {
+    public static @NonNull EmProp em(int valueEm) {
         return new EmProp.Builder().setValue(valueEm).build();
     }
 
     /** Shortcut for building a {@link EmProp} using a measurement in EM. */
-    @NonNull
-    public static EmProp em(float valueEm) {
+    public static @NonNull EmProp em(float valueEm) {
         return new EmProp.Builder().setValue(valueEm).build();
     }
 
     /** Shortcut for building an {@link DegreesProp} using a measurement in degrees. */
-    @NonNull
-    public static DegreesProp degrees(float valueDegrees) {
+    public static @NonNull DegreesProp degrees(float valueDegrees) {
         return new DegreesProp.Builder().setValue(valueDegrees).build();
     }
 
@@ -76,8 +72,7 @@
      * Shortcut for building an {@link ExpandedDimensionProp} that will expand to the size of its
      * parent.
      */
-    @NonNull
-    public static ExpandedDimensionProp expand() {
+    public static @NonNull ExpandedDimensionProp expand() {
         return EXPAND;
     }
 
@@ -85,8 +80,7 @@
      * Shortcut for building an {@link WrappedDimensionProp} that will shrink to the size of its
      * children.
      */
-    @NonNull
-    public static WrappedDimensionProp wrap() {
+    public static @NonNull WrappedDimensionProp wrap() {
         return WRAP;
     }
 
@@ -94,7 +88,7 @@
     public static final class DpProp
             implements ContainerDimension, ImageDimension, SpacerDimension {
         private final DimensionProto.DpProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         DpProp(DimensionProto.DpProp impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -109,39 +103,33 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static DpProp fromProto(@NonNull DimensionProto.DpProp proto) {
+        static @NonNull DpProp fromProto(DimensionProto.@NonNull DpProp proto) {
             return new DpProp(proto, null);
         }
 
-        @NonNull
-        DimensionProto.DpProp toProto() {
+        DimensionProto.@NonNull DpProp toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public DimensionProto.ContainerDimension toContainerDimensionProto() {
+        public DimensionProto.@NonNull ContainerDimension toContainerDimensionProto() {
             return DimensionProto.ContainerDimension.newBuilder().setLinearDimension(mImpl).build();
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public DimensionProto.ImageDimension toImageDimensionProto() {
+        public DimensionProto.@NonNull ImageDimension toImageDimensionProto() {
             return DimensionProto.ImageDimension.newBuilder().setLinearDimension(mImpl).build();
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public DimensionProto.SpacerDimension toSpacerDimensionProto() {
+        public DimensionProto.@NonNull SpacerDimension toSpacerDimensionProto() {
             return DimensionProto.SpacerDimension.newBuilder().setLinearDimension(mImpl).build();
         }
 
@@ -156,16 +144,14 @@
             public Builder() {}
 
             /** Sets the value, in dp. */
-            @NonNull
-            public Builder setValue(@Dimension(unit = DP) float value) {
+            public @NonNull Builder setValue(@Dimension(unit = DP) float value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(1, Float.floatToIntBits(value));
                 return this;
             }
 
             @Override
-            @NonNull
-            public DpProp build() {
+            public @NonNull DpProp build() {
                 return new DpProp(mImpl.build(), mFingerprint);
             }
         }
@@ -174,7 +160,7 @@
     /** A type for font sizes, measured in sp. */
     public static final class SpProp {
         private final DimensionProto.SpProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         SpProp(DimensionProto.SpProp impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -189,18 +175,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static SpProp fromProto(@NonNull DimensionProto.SpProp proto) {
+        static @NonNull SpProp fromProto(DimensionProto.@NonNull SpProp proto) {
             return new SpProp(proto, null);
         }
 
-        @NonNull
-        DimensionProto.SpProp toProto() {
+        DimensionProto.@NonNull SpProp toProto() {
             return mImpl;
         }
 
@@ -212,16 +195,14 @@
             public Builder() {}
 
             /** Sets the value, in sp. */
-            @NonNull
-            public Builder setValue(@Dimension(unit = SP) float value) {
+            public @NonNull Builder setValue(@Dimension(unit = SP) float value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(2, Float.floatToIntBits(value));
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public SpProp build() {
+            public @NonNull SpProp build() {
                 return new SpProp(mImpl.build(), mFingerprint);
             }
         }
@@ -230,7 +211,7 @@
     /** A type for font spacing, measured in em. */
     public static final class EmProp {
         private final DimensionProto.EmProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         EmProp(DimensionProto.EmProp impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -244,18 +225,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static EmProp fromProto(@NonNull DimensionProto.EmProp proto) {
+        static @NonNull EmProp fromProto(DimensionProto.@NonNull EmProp proto) {
             return new EmProp(proto, null);
         }
 
-        @NonNull
-        DimensionProto.EmProp toProto() {
+        DimensionProto.@NonNull EmProp toProto() {
             return mImpl;
         }
 
@@ -267,16 +245,14 @@
             public Builder() {}
 
             /** Sets the value, in em. */
-            @NonNull
-            public Builder setValue(float value) {
+            public @NonNull Builder setValue(float value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(1, Float.floatToIntBits(value));
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public EmProp build() {
+            public @NonNull EmProp build() {
                 return new EmProp(mImpl.build(), mFingerprint);
             }
         }
@@ -285,7 +261,7 @@
     /** A type for angular dimensions, measured in degrees. */
     public static final class DegreesProp {
         private final DimensionProto.DegreesProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         DegreesProp(DimensionProto.DegreesProp impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -299,18 +275,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static DegreesProp fromProto(@NonNull DimensionProto.DegreesProp proto) {
+        static @NonNull DegreesProp fromProto(DimensionProto.@NonNull DegreesProp proto) {
             return new DegreesProp(proto, null);
         }
 
-        @NonNull
-        DimensionProto.DegreesProp toProto() {
+        DimensionProto.@NonNull DegreesProp toProto() {
             return mImpl;
         }
 
@@ -323,16 +296,14 @@
             public Builder() {}
 
             /** Sets the value, in degrees. */
-            @NonNull
-            public Builder setValue(float value) {
+            public @NonNull Builder setValue(float value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(1, Float.floatToIntBits(value));
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public DegreesProp build() {
+            public @NonNull DegreesProp build() {
                 return new DegreesProp(mImpl.build(), mFingerprint);
             }
         }
@@ -344,7 +315,7 @@
      */
     public static final class ExpandedDimensionProp implements ContainerDimension, ImageDimension {
         private final DimensionProto.ExpandedDimensionProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         ExpandedDimensionProp(
                 DimensionProto.ExpandedDimensionProp impl, @Nullable Fingerprint fingerprint) {
@@ -354,26 +325,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static ExpandedDimensionProp fromProto(
-                @NonNull DimensionProto.ExpandedDimensionProp proto) {
+        static @NonNull ExpandedDimensionProp fromProto(
+                DimensionProto.@NonNull ExpandedDimensionProp proto) {
             return new ExpandedDimensionProp(proto, null);
         }
 
-        @NonNull
-        DimensionProto.ExpandedDimensionProp toProto() {
+        DimensionProto.@NonNull ExpandedDimensionProp toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public DimensionProto.ContainerDimension toContainerDimensionProto() {
+        public DimensionProto.@NonNull ContainerDimension toContainerDimensionProto() {
             return DimensionProto.ContainerDimension.newBuilder()
                     .setExpandedDimension(mImpl)
                     .build();
@@ -381,8 +348,7 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public DimensionProto.ImageDimension toImageDimensionProto() {
+        public DimensionProto.@NonNull ImageDimension toImageDimensionProto() {
             return DimensionProto.ImageDimension.newBuilder().setExpandedDimension(mImpl).build();
         }
 
@@ -396,8 +362,7 @@
             public Builder() {}
 
             @Override
-            @NonNull
-            public ExpandedDimensionProp build() {
+            public @NonNull ExpandedDimensionProp build() {
                 return new ExpandedDimensionProp(mImpl.build(), mFingerprint);
             }
         }
@@ -409,7 +374,7 @@
      */
     public static final class WrappedDimensionProp implements ContainerDimension {
         private final DimensionProto.WrappedDimensionProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         WrappedDimensionProp(
                 DimensionProto.WrappedDimensionProp impl, @Nullable Fingerprint fingerprint) {
@@ -419,25 +384,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static WrappedDimensionProp fromProto(@NonNull DimensionProto.WrappedDimensionProp proto) {
+        static @NonNull WrappedDimensionProp fromProto(
+                DimensionProto.@NonNull WrappedDimensionProp proto) {
             return new WrappedDimensionProp(proto, null);
         }
 
-        @NonNull
-        DimensionProto.WrappedDimensionProp toProto() {
+        DimensionProto.@NonNull WrappedDimensionProp toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public DimensionProto.ContainerDimension toContainerDimensionProto() {
+        public DimensionProto.@NonNull ContainerDimension toContainerDimensionProto() {
             return DimensionProto.ContainerDimension.newBuilder()
                     .setWrappedDimension(mImpl)
                     .build();
@@ -452,8 +414,7 @@
             public Builder() {}
 
             @Override
-            @NonNull
-            public WrappedDimensionProp build() {
+            public @NonNull WrappedDimensionProp build() {
                 return new WrappedDimensionProp(mImpl.build(), mFingerprint);
             }
         }
@@ -470,7 +431,7 @@
      */
     public static final class ProportionalDimensionProp implements ImageDimension {
         private final DimensionProto.ProportionalDimensionProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         ProportionalDimensionProp(
                 DimensionProto.ProportionalDimensionProp impl, @Nullable Fingerprint fingerprint) {
@@ -498,26 +459,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static ProportionalDimensionProp fromProto(
-                @NonNull DimensionProto.ProportionalDimensionProp proto) {
+        static @NonNull ProportionalDimensionProp fromProto(
+                DimensionProto.@NonNull ProportionalDimensionProp proto) {
             return new ProportionalDimensionProp(proto, null);
         }
 
-        @NonNull
-        DimensionProto.ProportionalDimensionProp toProto() {
+        DimensionProto.@NonNull ProportionalDimensionProp toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public DimensionProto.ImageDimension toImageDimensionProto() {
+        public DimensionProto.@NonNull ImageDimension toImageDimensionProto() {
             return DimensionProto.ImageDimension.newBuilder()
                     .setProportionalDimension(mImpl)
                     .build();
@@ -532,24 +489,22 @@
             public Builder() {}
 
             /** Sets the width to be used when calculating the aspect ratio to preserve. */
-            @NonNull
-            public Builder setAspectRatioWidth(@IntRange(from = 0) int aspectRatioWidth) {
+            public @NonNull Builder setAspectRatioWidth(@IntRange(from = 0) int aspectRatioWidth) {
                 mImpl.setAspectRatioWidth(aspectRatioWidth);
                 mFingerprint.recordPropertyUpdate(1, aspectRatioWidth);
                 return this;
             }
 
             /** Sets the height to be used when calculating the aspect ratio ratio to preserve. */
-            @NonNull
-            public Builder setAspectRatioHeight(@IntRange(from = 0) int aspectRatioHeight) {
+            public @NonNull Builder setAspectRatioHeight(
+                    @IntRange(from = 0) int aspectRatioHeight) {
                 mImpl.setAspectRatioHeight(aspectRatioHeight);
                 mFingerprint.recordPropertyUpdate(2, aspectRatioHeight);
                 return this;
             }
 
             @Override
-            @NonNull
-            public ProportionalDimensionProp build() {
+            public @NonNull ProportionalDimensionProp build() {
                 return new ProportionalDimensionProp(mImpl.build(), mFingerprint);
             }
         }
@@ -559,30 +514,26 @@
     public interface ContainerDimension {
         /** Get the protocol buffer representation of this object. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        DimensionProto.ContainerDimension toContainerDimensionProto();
+        DimensionProto.@NonNull ContainerDimension toContainerDimensionProto();
 
         /** Get the fingerprint for this object or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        Fingerprint getFingerprint();
+        @Nullable Fingerprint getFingerprint();
 
         /** Builder to create {@link ContainerDimension} objects. */
         @SuppressLint("StaticFinalBuilder")
         interface Builder {
 
             /** Builds an instance with values accumulated in this Builder. */
-            @NonNull
-            ContainerDimension build();
+            @NonNull ContainerDimension build();
         }
     }
 
     /**
      * Return an instance of one of this object's subtypes, from the protocol buffer representation.
      */
-    @NonNull
-    static ContainerDimension containerDimensionFromProto(
-            @NonNull DimensionProto.ContainerDimension proto) {
+    static @NonNull ContainerDimension containerDimensionFromProto(
+            DimensionProto.@NonNull ContainerDimension proto) {
         if (proto.hasLinearDimension()) {
             return DpProp.fromProto(proto.getLinearDimension());
         }
@@ -600,29 +551,26 @@
     public interface ImageDimension {
         /** Get the protocol buffer representation of this object. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        DimensionProto.ImageDimension toImageDimensionProto();
+        DimensionProto.@NonNull ImageDimension toImageDimensionProto();
 
         /** Get the fingerprint for this object or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        Fingerprint getFingerprint();
+        @Nullable Fingerprint getFingerprint();
 
         /** Builder to create {@link ImageDimension} objects. */
         @SuppressLint("StaticFinalBuilder")
         interface Builder {
 
             /** Builds an instance with values accumulated in this Builder. */
-            @NonNull
-            ImageDimension build();
+            @NonNull ImageDimension build();
         }
     }
 
     /**
      * Return an instance of one of this object's subtypes, from the protocol buffer representation.
      */
-    @NonNull
-    static ImageDimension imageDimensionFromProto(@NonNull DimensionProto.ImageDimension proto) {
+    static @NonNull ImageDimension imageDimensionFromProto(
+            DimensionProto.@NonNull ImageDimension proto) {
         if (proto.hasLinearDimension()) {
             return DpProp.fromProto(proto.getLinearDimension());
         }
@@ -639,26 +587,23 @@
     public interface SpacerDimension {
         /** Get the protocol buffer representation of this object. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        DimensionProto.SpacerDimension toSpacerDimensionProto();
+        DimensionProto.@NonNull SpacerDimension toSpacerDimensionProto();
 
         /** Get the fingerprint for this object or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        Fingerprint getFingerprint();
+        @Nullable Fingerprint getFingerprint();
 
         /** Builder to create {@link SpacerDimension} objects. */
         @SuppressLint("StaticFinalBuilder")
         interface Builder {
 
             /** Builds an instance with values accumulated in this Builder. */
-            @NonNull
-            SpacerDimension build();
+            @NonNull SpacerDimension build();
         }
     }
 
-    @NonNull
-    static SpacerDimension spacerDimensionFromProto(@NonNull DimensionProto.SpacerDimension proto) {
+    static @NonNull SpacerDimension spacerDimensionFromProto(
+            DimensionProto.@NonNull SpacerDimension proto) {
         if (proto.hasLinearDimension()) {
             return DpProp.fromProto(proto.getLinearDimension());
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/DiskAccessAllowedPrefs.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/DiskAccessAllowedPrefs.java
index 7928651..884becd 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/DiskAccessAllowedPrefs.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/DiskAccessAllowedPrefs.java
@@ -21,18 +21,19 @@
 import android.os.StrictMode;
 import android.os.StrictMode.ThreadPolicy;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.Map;
 
 /** Get versions of shared prefs that ignore strict mode and allows disk reads and writes. */
 @RestrictTo(Scope.LIBRARY_GROUP)
 final class DiskAccessAllowedPrefs {
 
-    @NonNull private final SharedPreferences preferences;
+    private final @NonNull SharedPreferences preferences;
 
     private DiskAccessAllowedPrefs(@NonNull SharedPreferences preferences) {
         this.preferences = preferences;
@@ -42,8 +43,7 @@
      * Returns a simplified version of {@link SharedPreferences} wrapped to ignore disk read and
      * write StrictMode violations.
      */
-    @Nullable
-    static DiskAccessAllowedPrefs wrap(@NonNull Context context, @NonNull String name) {
+    static @Nullable DiskAccessAllowedPrefs wrap(@NonNull Context context, @NonNull String name) {
         ThreadPolicy policy = StrictMode.allowThreadDiskReads();
         try {
             SharedPreferences sharedPref = context.getSharedPreferences(name, Context.MODE_PRIVATE);
@@ -53,8 +53,7 @@
         }
     }
 
-    @Nullable
-    Map<String, ?> getAll() {
+    @Nullable Map<String, ?> getAll() {
         ThreadPolicy policy = StrictMode.allowThreadDiskReads();
         try {
             return preferences.getAll();
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/EventBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/EventBuilders.java
index 7e72ffb..0e71b08 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/EventBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/EventBuilders.java
@@ -17,13 +17,14 @@
 package androidx.wear.tiles;
 
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.annotation.VisibleForTesting;
 import androidx.wear.protolayout.expression.RequiresSchemaVersion;
 import androidx.wear.tiles.proto.EventProto;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.time.Instant;
@@ -52,21 +53,18 @@
 
         /** Creates a new wrapper instance from the proto. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static TileAddEvent fromProto(@NonNull EventProto.TileAddEvent proto) {
+        public static @NonNull TileAddEvent fromProto(EventProto.@NonNull TileAddEvent proto) {
             return new TileAddEvent(proto);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public EventProto.TileAddEvent toProto() {
+        public EventProto.@NonNull TileAddEvent toProto() {
             return mImpl;
         }
 
         @Override
-        @NonNull
-        public String toString() {
+        public @NonNull String toString() {
             return "TileAddEvent{" + "tileId=" + getTileId() + "}";
         }
 
@@ -84,15 +82,13 @@
              * carousel. This ID will remain the same for this tile instance as long it is not
              * removed from the carousel.
              */
-            @NonNull
-            public Builder setTileId(int tileId) {
+            public @NonNull Builder setTileId(int tileId) {
                 mImpl.setTileId(tileId);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public TileAddEvent build() {
+            public @NonNull TileAddEvent build() {
                 return TileAddEvent.fromProto(mImpl.build());
             }
         }
@@ -118,21 +114,19 @@
 
         /** Creates a new wrapper instance from the proto. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static TileRemoveEvent fromProto(@NonNull EventProto.TileRemoveEvent proto) {
+        public static @NonNull TileRemoveEvent fromProto(
+                EventProto.@NonNull TileRemoveEvent proto) {
             return new TileRemoveEvent(proto);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public EventProto.TileRemoveEvent toProto() {
+        public EventProto.@NonNull TileRemoveEvent toProto() {
             return mImpl;
         }
 
         @Override
-        @NonNull
-        public String toString() {
+        public @NonNull String toString() {
             return "TileRemoveEvent{" + "tileId=" + getTileId() + "}";
         }
 
@@ -149,15 +143,13 @@
              * Sets instance ID of the removed tile, allocated when the tile instance was added to
              * the carousel.
              */
-            @NonNull
-            public Builder setTileId(int tileId) {
+            public @NonNull Builder setTileId(int tileId) {
                 mImpl.setTileId(tileId);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public TileRemoveEvent build() {
+            public @NonNull TileRemoveEvent build() {
                 return TileRemoveEvent.fromProto(mImpl.build());
             }
         }
@@ -183,21 +175,18 @@
 
         /** Creates a new wrapper instance from the proto. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static TileEnterEvent fromProto(@NonNull EventProto.TileEnterEvent proto) {
+        public static @NonNull TileEnterEvent fromProto(EventProto.@NonNull TileEnterEvent proto) {
             return new TileEnterEvent(proto);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public EventProto.TileEnterEvent toProto() {
+        public EventProto.@NonNull TileEnterEvent toProto() {
             return mImpl;
         }
 
         @Override
-        @NonNull
-        public String toString() {
+        public @NonNull String toString() {
             return "TileEnterEvent{" + "tileId=" + getTileId() + "}";
         }
 
@@ -215,15 +204,13 @@
              * carousel. This ID will remain the same for this tile instance as long it is not
              * removed from the carousel.
              */
-            @NonNull
-            public Builder setTileId(int tileId) {
+            public @NonNull Builder setTileId(int tileId) {
                 mImpl.setTileId(tileId);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public TileEnterEvent build() {
+            public @NonNull TileEnterEvent build() {
                 return TileEnterEvent.fromProto(mImpl.build());
             }
         }
@@ -252,21 +239,18 @@
 
         /** Creates a new wrapper instance from the proto. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static TileLeaveEvent fromProto(@NonNull EventProto.TileLeaveEvent proto) {
+        public static @NonNull TileLeaveEvent fromProto(EventProto.@NonNull TileLeaveEvent proto) {
             return new TileLeaveEvent(proto);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public EventProto.TileLeaveEvent toProto() {
+        public EventProto.@NonNull TileLeaveEvent toProto() {
             return mImpl;
         }
 
         @Override
-        @NonNull
-        public String toString() {
+        public @NonNull String toString() {
             return "TileLeaveEvent{" + "tileId=" + getTileId() + "}";
         }
 
@@ -284,15 +268,13 @@
              * carousel. This ID will remain the same for this tile instance as long it is not
              * removed from the carousel.
              */
-            @NonNull
-            public Builder setTileId(int tileId) {
+            public @NonNull Builder setTileId(int tileId) {
                 mImpl.setTileId(tileId);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public TileLeaveEvent build() {
+            public @NonNull TileLeaveEvent build() {
                 return TileLeaveEvent.fromProto(mImpl.build());
             }
         }
@@ -347,29 +329,25 @@
          * Instant#now()} (Created at the time of {@link
          * TileInteractionEvent.Builder#Builder(int,int)} constructor call) if not provided.
          */
-        @NonNull
-        public Instant getTimestamp() {
+        public @NonNull Instant getTimestamp() {
             return Instant.ofEpochMilli(mImpl.getTimestampEpochMillis());
         }
 
         /** Creates a new wrapper instance from the proto. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static TileInteractionEvent fromProto(
-                @NonNull EventProto.TileInteractionEvent proto) {
+        public static @NonNull TileInteractionEvent fromProto(
+                EventProto.@NonNull TileInteractionEvent proto) {
             return new TileInteractionEvent(proto);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public EventProto.TileInteractionEvent toProto() {
+        public EventProto.@NonNull TileInteractionEvent toProto() {
             return mImpl;
         }
 
         @Override
-        @NonNull
-        public String toString() {
+        public @NonNull String toString() {
             return "TileInteractionEvent{"
                     + "tileId="
                     + getTileId()
@@ -382,8 +360,7 @@
 
         /** Builder for {@link TileInteractionEvent} */
         public static final class Builder {
-            @NonNull
-            private final EventProto.TileInteractionEvent.Builder mImpl =
+            private final EventProto.TileInteractionEvent.@NonNull Builder mImpl =
                     EventProto.TileInteractionEvent.newBuilder();
 
             /** Interface so this Builder can retrieve the current time. */
@@ -441,15 +418,13 @@
              * call) if not provided.
              */
             @RequiresSchemaVersion(major = 1, minor = 400)
-            @NonNull
-            public Builder setTimestamp(@NonNull Instant instant) {
+            public @NonNull Builder setTimestamp(@NonNull Instant instant) {
                 mImpl.setTimestampEpochMillis(instant.toEpochMilli());
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public TileInteractionEvent build() {
+            public @NonNull TileInteractionEvent build() {
                 return TileInteractionEvent.fromProto(mImpl.build());
             }
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/LayoutElementBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/LayoutElementBuilders.java
index 259bddf..eca36c9 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/LayoutElementBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/LayoutElementBuilders.java
@@ -24,8 +24,6 @@
 
 import androidx.annotation.IntDef;
 import androidx.annotation.IntRange;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.OptIn;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
@@ -38,6 +36,9 @@
 import androidx.wear.protolayout.proto.TypesProto;
 import androidx.wear.protolayout.protobuf.InvalidProtocolBufferException;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.Collections;
@@ -316,7 +317,7 @@
     /** An extensible {@code HorizontalAlignment} property. */
     public static final class HorizontalAlignmentProp {
         private final AlignmentProto.HorizontalAlignmentProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         private HorizontalAlignmentProp(
                 AlignmentProto.HorizontalAlignmentProp impl, @Nullable Fingerprint fingerprint) {
@@ -332,19 +333,16 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static HorizontalAlignmentProp fromProto(
-                @NonNull AlignmentProto.HorizontalAlignmentProp proto) {
+        static @NonNull HorizontalAlignmentProp fromProto(
+                AlignmentProto.@NonNull HorizontalAlignmentProp proto) {
             return new HorizontalAlignmentProp(proto, null);
         }
 
-        @NonNull
-        AlignmentProto.HorizontalAlignmentProp toProto() {
+        AlignmentProto.@NonNull HorizontalAlignmentProp toProto() {
             return mImpl;
         }
 
@@ -357,16 +355,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(@HorizontalAlignment int value) {
+            public @NonNull Builder setValue(@HorizontalAlignment int value) {
                 mImpl.setValue(AlignmentProto.HorizontalAlignment.forNumber(value));
                 mFingerprint.recordPropertyUpdate(1, value);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public HorizontalAlignmentProp build() {
+            public @NonNull HorizontalAlignmentProp build() {
                 return HorizontalAlignmentProp.fromProto(mImpl.build());
             }
         }
@@ -375,7 +371,7 @@
     /** An extensible {@code VerticalAlignment} property. */
     public static final class VerticalAlignmentProp {
         private final AlignmentProto.VerticalAlignmentProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         VerticalAlignmentProp(
                 AlignmentProto.VerticalAlignmentProp impl, @Nullable Fingerprint fingerprint) {
@@ -391,19 +387,16 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static VerticalAlignmentProp fromProto(
-                @NonNull AlignmentProto.VerticalAlignmentProp proto) {
+        static @NonNull VerticalAlignmentProp fromProto(
+                AlignmentProto.@NonNull VerticalAlignmentProp proto) {
             return new VerticalAlignmentProp(proto, null);
         }
 
-        @NonNull
-        AlignmentProto.VerticalAlignmentProp toProto() {
+        AlignmentProto.@NonNull VerticalAlignmentProp toProto() {
             return mImpl;
         }
 
@@ -416,16 +409,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(@VerticalAlignment int value) {
+            public @NonNull Builder setValue(@VerticalAlignment int value) {
                 mImpl.setValue(AlignmentProto.VerticalAlignment.forNumber(value));
                 mFingerprint.recordPropertyUpdate(1, value);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public VerticalAlignmentProp build() {
+            public @NonNull VerticalAlignmentProp build() {
                 return new VerticalAlignmentProp(mImpl.build(), mFingerprint);
             }
         }
@@ -434,7 +425,7 @@
     /** An extensible {@code FontWeight} property. */
     public static final class FontWeightProp {
         private final LayoutElementProto.FontWeightProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         FontWeightProp(LayoutElementProto.FontWeightProp impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -449,18 +440,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static FontWeightProp fromProto(@NonNull LayoutElementProto.FontWeightProp proto) {
+        static @NonNull FontWeightProp fromProto(LayoutElementProto.@NonNull FontWeightProp proto) {
             return new FontWeightProp(proto, null);
         }
 
-        @NonNull
-        LayoutElementProto.FontWeightProp toProto() {
+        LayoutElementProto.@NonNull FontWeightProp toProto() {
             return mImpl;
         }
 
@@ -473,16 +461,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(@FontWeight int value) {
+            public @NonNull Builder setValue(@FontWeight int value) {
                 mImpl.setValue(LayoutElementProto.FontWeight.forNumber(value));
                 mFingerprint.recordPropertyUpdate(1, value);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public FontWeightProp build() {
+            public @NonNull FontWeightProp build() {
                 return new FontWeightProp(mImpl.build(), mFingerprint);
             }
         }
@@ -492,7 +478,7 @@
     @TilesExperimental
     public static final class FontVariantProp {
         private final LayoutElementProto.FontVariantProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         FontVariantProp(
                 LayoutElementProto.FontVariantProp impl, @Nullable Fingerprint fingerprint) {
@@ -508,18 +494,16 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static FontVariantProp fromProto(@NonNull LayoutElementProto.FontVariantProp proto) {
+        static @NonNull FontVariantProp fromProto(
+                LayoutElementProto.@NonNull FontVariantProp proto) {
             return new FontVariantProp(proto, null);
         }
 
-        @NonNull
-        LayoutElementProto.FontVariantProp toProto() {
+        LayoutElementProto.@NonNull FontVariantProp toProto() {
             return mImpl;
         }
 
@@ -532,16 +516,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(@FontVariant int value) {
+            public @NonNull Builder setValue(@FontVariant int value) {
                 mImpl.setValue(LayoutElementProto.FontVariant.forNumber(value));
                 mFingerprint.recordPropertyUpdate(1, value);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public FontVariantProp build() {
+            public @NonNull FontVariantProp build() {
                 return new FontVariantProp(mImpl.build(), mFingerprint);
             }
         }
@@ -550,7 +532,7 @@
     /** An extensible {@code SpanVerticalAlignment} property. */
     public static final class SpanVerticalAlignmentProp {
         private final LayoutElementProto.SpanVerticalAlignmentProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         SpanVerticalAlignmentProp(
                 LayoutElementProto.SpanVerticalAlignmentProp impl,
@@ -567,19 +549,16 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static SpanVerticalAlignmentProp fromProto(
-                @NonNull LayoutElementProto.SpanVerticalAlignmentProp proto) {
+        static @NonNull SpanVerticalAlignmentProp fromProto(
+                LayoutElementProto.@NonNull SpanVerticalAlignmentProp proto) {
             return new SpanVerticalAlignmentProp(proto, null);
         }
 
-        @NonNull
-        LayoutElementProto.SpanVerticalAlignmentProp toProto() {
+        LayoutElementProto.@NonNull SpanVerticalAlignmentProp toProto() {
             return mImpl;
         }
 
@@ -592,16 +571,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(@SpanVerticalAlignment int value) {
+            public @NonNull Builder setValue(@SpanVerticalAlignment int value) {
                 mImpl.setValue(LayoutElementProto.SpanVerticalAlignment.forNumber(value));
                 mFingerprint.recordPropertyUpdate(1, value);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public SpanVerticalAlignmentProp build() {
+            public @NonNull SpanVerticalAlignmentProp build() {
                 return new SpanVerticalAlignmentProp(mImpl.build(), mFingerprint);
             }
         }
@@ -610,7 +587,7 @@
     /** The styling of a font (e.g. font size, and metrics). */
     public static final class FontStyle {
         private final LayoutElementProto.FontStyle mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         FontStyle(LayoutElementProto.FontStyle impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -621,8 +598,7 @@
          * Gets the size of the font, in scaled pixels (sp). If not specified, defaults to the size
          * of the system's "body" font. Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.SpProp getSize() {
+        public DimensionBuilders.@Nullable SpProp getSize() {
             List<DimensionProto.SpProp> sizes = mImpl.getSizeList();
             if (!sizes.isEmpty()) {
                 return DimensionBuilders.SpProp.fromProto(sizes.get(0));
@@ -635,8 +611,7 @@
          * Gets whether the text should be rendered in a italic typeface. If not specified, defaults
          * to "false". Intended for testing purposes only.
          */
-        @Nullable
-        public TypeBuilders.BoolProp getItalic() {
+        public TypeBuilders.@Nullable BoolProp getItalic() {
             if (mImpl.hasItalic()) {
                 return TypeBuilders.BoolProp.fromProto(mImpl.getItalic());
             } else {
@@ -648,8 +623,7 @@
          * Gets whether the text should be rendered with an underline. If not specified, defaults to
          * "false". Intended for testing purposes only.
          */
-        @Nullable
-        public TypeBuilders.BoolProp getUnderline() {
+        public TypeBuilders.@Nullable BoolProp getUnderline() {
             if (mImpl.hasUnderline()) {
                 return TypeBuilders.BoolProp.fromProto(mImpl.getUnderline());
             } else {
@@ -661,8 +635,7 @@
          * Gets the text color. If not defined, defaults to white. Intended for testing purposes
          * only.
          */
-        @Nullable
-        public ColorBuilders.ColorProp getColor() {
+        public ColorBuilders.@Nullable ColorProp getColor() {
             if (mImpl.hasColor()) {
                 return ColorBuilders.ColorProp.fromProto(mImpl.getColor());
             } else {
@@ -675,8 +648,7 @@
          * nearest supported value will be used. If not defined, or when set to an invalid value,
          * defaults to "normal". Intended for testing purposes only.
          */
-        @Nullable
-        public FontWeightProp getWeight() {
+        public @Nullable FontWeightProp getWeight() {
             if (mImpl.hasWeight()) {
                 return FontWeightProp.fromProto(mImpl.getWeight());
             } else {
@@ -689,8 +661,7 @@
          * negative numbers tighten the space. If not specified, defaults to 0. Intended for testing
          * purposes only.
          */
-        @Nullable
-        public DimensionBuilders.EmProp getLetterSpacing() {
+        public DimensionBuilders.@Nullable EmProp getLetterSpacing() {
             if (mImpl.hasLetterSpacing()) {
                 return DimensionBuilders.EmProp.fromProto(mImpl.getLetterSpacing());
             } else {
@@ -704,8 +675,7 @@
          * Intended for testing purposes only.
          */
         @TilesExperimental
-        @Nullable
-        public FontVariantProp getVariant() {
+        public @Nullable FontVariantProp getVariant() {
             if (mImpl.hasVariant()) {
                 return FontVariantProp.fromProto(mImpl.getVariant());
             } else {
@@ -715,20 +685,17 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static FontStyle fromProto(@NonNull LayoutElementProto.FontStyle proto) {
+        static @NonNull FontStyle fromProto(LayoutElementProto.@NonNull FontStyle proto) {
             return new FontStyle(proto, null);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.FontStyle toProto() {
+        public LayoutElementProto.@NonNull FontStyle toProto() {
             return mImpl;
         }
 
@@ -744,8 +711,7 @@
              * Sets the size of the font, in scaled pixels (sp). If not specified, defaults to the
              * size of the system's "body" font.
              */
-            @NonNull
-            public Builder setSize(@NonNull DimensionBuilders.SpProp size) {
+            public @NonNull Builder setSize(DimensionBuilders.@NonNull SpProp size) {
                 mImpl.clearSize();
                 mImpl.addSize(size.toProto());
                 mFingerprint.recordPropertyUpdate(
@@ -757,8 +723,7 @@
              * Sets whether the text should be rendered in a italic typeface. If not specified,
              * defaults to "false".
              */
-            @NonNull
-            public Builder setItalic(@NonNull TypeBuilders.BoolProp italic) {
+            public @NonNull Builder setItalic(TypeBuilders.@NonNull BoolProp italic) {
                 mImpl.setItalic(italic.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(italic.getFingerprint()).aggregateValueAsInt());
@@ -770,8 +735,7 @@
              * defaults to "false".
              */
             @SuppressLint("MissingGetterMatchingBuilder")
-            @NonNull
-            public Builder setItalic(boolean italic) {
+            public @NonNull Builder setItalic(boolean italic) {
                 mImpl.setItalic(TypesProto.BoolProp.newBuilder().setValue(italic));
                 mFingerprint.recordPropertyUpdate(2, Boolean.hashCode(italic));
                 return this;
@@ -781,8 +745,7 @@
              * Sets whether the text should be rendered with an underline. If not specified,
              * defaults to "false".
              */
-            @NonNull
-            public Builder setUnderline(@NonNull TypeBuilders.BoolProp underline) {
+            public @NonNull Builder setUnderline(TypeBuilders.@NonNull BoolProp underline) {
                 mImpl.setUnderline(underline.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(underline.getFingerprint()).aggregateValueAsInt());
@@ -794,16 +757,14 @@
              * defaults to "false".
              */
             @SuppressLint("MissingGetterMatchingBuilder")
-            @NonNull
-            public Builder setUnderline(boolean underline) {
+            public @NonNull Builder setUnderline(boolean underline) {
                 mImpl.setUnderline(TypesProto.BoolProp.newBuilder().setValue(underline));
                 mFingerprint.recordPropertyUpdate(3, Boolean.hashCode(underline));
                 return this;
             }
 
             /** Sets the text color. If not defined, defaults to white. */
-            @NonNull
-            public Builder setColor(@NonNull ColorBuilders.ColorProp color) {
+            public @NonNull Builder setColor(ColorBuilders.@NonNull ColorProp color) {
                 mImpl.setColor(color.toProto());
                 mFingerprint.recordPropertyUpdate(
                         4, checkNotNull(color.getFingerprint()).aggregateValueAsInt());
@@ -815,8 +776,7 @@
              * the nearest supported value will be used. If not defined, or when set to an invalid
              * value, defaults to "normal".
              */
-            @NonNull
-            public Builder setWeight(@NonNull FontWeightProp weight) {
+            public @NonNull Builder setWeight(@NonNull FontWeightProp weight) {
                 mImpl.setWeight(weight.toProto());
                 mFingerprint.recordPropertyUpdate(
                         5, checkNotNull(weight.getFingerprint()).aggregateValueAsInt());
@@ -828,8 +788,7 @@
              * the nearest supported value will be used. If not defined, or when set to an invalid
              * value, defaults to "normal".
              */
-            @NonNull
-            public Builder setWeight(@FontWeight int weight) {
+            public @NonNull Builder setWeight(@FontWeight int weight) {
                 mImpl.setWeight(
                         LayoutElementProto.FontWeightProp.newBuilder()
                                 .setValue(LayoutElementProto.FontWeight.forNumber(weight)));
@@ -841,8 +800,8 @@
              * Sets the text letter-spacing. Positive numbers increase the space between letters
              * while negative numbers tighten the space. If not specified, defaults to 0.
              */
-            @NonNull
-            public Builder setLetterSpacing(@NonNull DimensionBuilders.EmProp letterSpacing) {
+            public @NonNull Builder setLetterSpacing(
+                    DimensionBuilders.@NonNull EmProp letterSpacing) {
                 mImpl.setLetterSpacing(letterSpacing.toProto());
                 mFingerprint.recordPropertyUpdate(
                         6, checkNotNull(letterSpacing.getFingerprint()).aggregateValueAsInt());
@@ -854,8 +813,7 @@
              * text, which can be selected using this field. If not specified, defaults to "body".
              */
             @TilesExperimental
-            @NonNull
-            public Builder setVariant(@NonNull FontVariantProp variant) {
+            public @NonNull Builder setVariant(@NonNull FontVariantProp variant) {
                 mImpl.setVariant(variant.toProto());
                 mFingerprint.recordPropertyUpdate(
                         7, checkNotNull(variant.getFingerprint()).aggregateValueAsInt());
@@ -867,8 +825,7 @@
              * text, which can be selected using this field. If not specified, defaults to "body".
              */
             @TilesExperimental
-            @NonNull
-            public Builder setVariant(@FontVariant int variant) {
+            public @NonNull Builder setVariant(@FontVariant int variant) {
                 mImpl.setVariant(
                         LayoutElementProto.FontVariantProp.newBuilder()
                                 .setValue(LayoutElementProto.FontVariant.forNumber(variant)));
@@ -877,8 +834,7 @@
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public FontStyle build() {
+            public @NonNull FontStyle build() {
                 return new FontStyle(mImpl.build(), mFingerprint);
             }
         }
@@ -887,7 +843,7 @@
     /** An extensible {@code TextAlignment} property. */
     public static final class TextAlignmentProp {
         private final AlignmentProto.TextAlignmentProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         TextAlignmentProp(
                 AlignmentProto.TextAlignmentProp impl, @Nullable Fingerprint fingerprint) {
@@ -903,18 +859,16 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static TextAlignmentProp fromProto(@NonNull AlignmentProto.TextAlignmentProp proto) {
+        static @NonNull TextAlignmentProp fromProto(
+                AlignmentProto.@NonNull TextAlignmentProp proto) {
             return new TextAlignmentProp(proto, null);
         }
 
-        @NonNull
-        AlignmentProto.TextAlignmentProp toProto() {
+        AlignmentProto.@NonNull TextAlignmentProp toProto() {
             return mImpl;
         }
 
@@ -927,16 +881,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(@TextAlignment int value) {
+            public @NonNull Builder setValue(@TextAlignment int value) {
                 mImpl.setValue(AlignmentProto.TextAlignment.forNumber(value));
                 mFingerprint.recordPropertyUpdate(1, value);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public TextAlignmentProp build() {
+            public @NonNull TextAlignmentProp build() {
                 return new TextAlignmentProp(mImpl.build(), mFingerprint);
             }
         }
@@ -945,7 +897,7 @@
     /** An extensible {@code TextOverflow} property. */
     public static final class TextOverflowProp {
         private final LayoutElementProto.TextOverflowProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         TextOverflowProp(
                 LayoutElementProto.TextOverflowProp impl, @Nullable Fingerprint fingerprint) {
@@ -961,18 +913,16 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static TextOverflowProp fromProto(@NonNull LayoutElementProto.TextOverflowProp proto) {
+        static @NonNull TextOverflowProp fromProto(
+                LayoutElementProto.@NonNull TextOverflowProp proto) {
             return new TextOverflowProp(proto, null);
         }
 
-        @NonNull
-        LayoutElementProto.TextOverflowProp toProto() {
+        LayoutElementProto.@NonNull TextOverflowProp toProto() {
             return mImpl;
         }
 
@@ -985,16 +935,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(@TextOverflow int value) {
+            public @NonNull Builder setValue(@TextOverflow int value) {
                 mImpl.setValue(LayoutElementProto.TextOverflow.forNumber(value));
                 mFingerprint.recordPropertyUpdate(1, value);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public TextOverflowProp build() {
+            public @NonNull TextOverflowProp build() {
                 return new TextOverflowProp(mImpl.build(), mFingerprint);
             }
         }
@@ -1003,7 +951,7 @@
     /** An extensible {@code ArcAnchorType} property. */
     public static final class ArcAnchorTypeProp {
         private final AlignmentProto.ArcAnchorTypeProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         ArcAnchorTypeProp(
                 AlignmentProto.ArcAnchorTypeProp impl, @Nullable Fingerprint fingerprint) {
@@ -1019,18 +967,16 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static ArcAnchorTypeProp fromProto(@NonNull AlignmentProto.ArcAnchorTypeProp proto) {
+        static @NonNull ArcAnchorTypeProp fromProto(
+                AlignmentProto.@NonNull ArcAnchorTypeProp proto) {
             return new ArcAnchorTypeProp(proto, null);
         }
 
-        @NonNull
-        AlignmentProto.ArcAnchorTypeProp toProto() {
+        AlignmentProto.@NonNull ArcAnchorTypeProp toProto() {
             return mImpl;
         }
 
@@ -1043,16 +989,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(@ArcAnchorType int value) {
+            public @NonNull Builder setValue(@ArcAnchorType int value) {
                 mImpl.setValue(AlignmentProto.ArcAnchorType.forNumber(value));
                 mFingerprint.recordPropertyUpdate(1, value);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public ArcAnchorTypeProp build() {
+            public @NonNull ArcAnchorTypeProp build() {
                 return new ArcAnchorTypeProp(mImpl.build(), mFingerprint);
             }
         }
@@ -1061,7 +1005,7 @@
     /** A text string. */
     public static final class Text implements LayoutElement {
         private final LayoutElementProto.Text mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Text(LayoutElementProto.Text impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -1069,8 +1013,7 @@
         }
 
         /** Gets the text to render. Intended for testing purposes only. */
-        @Nullable
-        public TypeBuilders.StringProp getText() {
+        public TypeBuilders.@Nullable StringProp getText() {
             if (mImpl.hasText()) {
                 return TypeBuilders.StringProp.fromProto(mImpl.getText());
             } else {
@@ -1082,8 +1025,7 @@
          * Gets the style of font to use (size, bold etc). If not specified, defaults to the
          * platform's default body font. Intended for testing purposes only.
          */
-        @Nullable
-        public FontStyle getFontStyle() {
+        public @Nullable FontStyle getFontStyle() {
             if (mImpl.hasFontStyle()) {
                 return FontStyle.fromProto(mImpl.getFontStyle());
             } else {
@@ -1095,8 +1037,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.Modifiers getModifiers() {
+        public ModifiersBuilders.@Nullable Modifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -1109,8 +1050,7 @@
          * not defined, the {@link Text} element will be treated as a single-line element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public TypeBuilders.Int32Prop getMaxLines() {
+        public TypeBuilders.@Nullable Int32Prop getMaxLines() {
             if (mImpl.hasMaxLines()) {
                 return TypeBuilders.Int32Prop.fromProto(mImpl.getMaxLines());
             } else {
@@ -1125,8 +1065,7 @@
          * the alignment of lines relative to the {@link Text} element bounds. If not defined,
          * defaults to TEXT_ALIGN_CENTER. Intended for testing purposes only.
          */
-        @Nullable
-        public TextAlignmentProp getMultilineAlignment() {
+        public @Nullable TextAlignmentProp getMultilineAlignment() {
             if (mImpl.hasMultilineAlignment()) {
                 return TextAlignmentProp.fromProto(mImpl.getMultilineAlignment());
             } else {
@@ -1141,8 +1080,7 @@
          * which cannot fit inside its container will be truncated. If not defined, defaults to
          * TEXT_OVERFLOW_TRUNCATE. Intended for testing purposes only.
          */
-        @Nullable
-        public TextOverflowProp getOverflow() {
+        public @Nullable TextOverflowProp getOverflow() {
             if (mImpl.hasOverflow()) {
                 return TextOverflowProp.fromProto(mImpl.getOverflow());
             } else {
@@ -1155,8 +1093,7 @@
          * distance between subsequent baselines. If not specified, defaults the font's recommended
          * interline spacing. Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.SpProp getLineHeight() {
+        public DimensionBuilders.@Nullable SpProp getLineHeight() {
             if (mImpl.hasLineHeight()) {
                 return DimensionBuilders.SpProp.fromProto(mImpl.getLineHeight());
             } else {
@@ -1166,26 +1103,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Text fromProto(
-                @NonNull LayoutElementProto.Text proto, @Nullable Fingerprint fingerprint) {
+        static @NonNull Text fromProto(
+                LayoutElementProto.@NonNull Text proto, @Nullable Fingerprint fingerprint) {
             return new Text(proto, fingerprint);
         }
 
-        @NonNull
-        LayoutElementProto.Text toProto() {
+        LayoutElementProto.@NonNull Text toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.LayoutElement toLayoutElementProto() {
+        public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
             return LayoutElementProto.LayoutElement.newBuilder().setText(mImpl).build();
         }
 
@@ -1198,8 +1131,7 @@
             public Builder() {}
 
             /** Sets the text to render. */
-            @NonNull
-            public Builder setText(@NonNull TypeBuilders.StringProp text) {
+            public @NonNull Builder setText(TypeBuilders.@NonNull StringProp text) {
                 mImpl.setText(text.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(text.getFingerprint()).aggregateValueAsInt());
@@ -1207,8 +1139,7 @@
             }
 
             /** Sets the text to render. */
-            @NonNull
-            public Builder setText(@NonNull String text) {
+            public @NonNull Builder setText(@NonNull String text) {
                 mImpl.mergeText(TypesProto.StringProp.newBuilder().setValue(text).build());
                 mFingerprint.recordPropertyUpdate(1, text.hashCode());
                 return this;
@@ -1218,8 +1149,7 @@
              * Sets the style of font to use (size, bold etc). If not specified, defaults to the
              * platform's default body font.
              */
-            @NonNull
-            public Builder setFontStyle(@NonNull FontStyle fontStyle) {
+            public @NonNull Builder setFontStyle(@NonNull FontStyle fontStyle) {
                 mImpl.setFontStyle(fontStyle.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(fontStyle.getFingerprint()).aggregateValueAsInt());
@@ -1227,8 +1157,7 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.Modifiers modifiers) {
+            public @NonNull Builder setModifiers(ModifiersBuilders.@NonNull Modifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -1239,8 +1168,7 @@
              * Sets the maximum number of lines that can be represented by the {@link Text} element.
              * If not defined, the {@link Text} element will be treated as a single-line element.
              */
-            @NonNull
-            public Builder setMaxLines(@NonNull TypeBuilders.Int32Prop maxLines) {
+            public @NonNull Builder setMaxLines(TypeBuilders.@NonNull Int32Prop maxLines) {
                 mImpl.setMaxLines(maxLines.toProto());
                 mFingerprint.recordPropertyUpdate(
                         4, checkNotNull(maxLines.getFingerprint()).aggregateValueAsInt());
@@ -1251,8 +1179,7 @@
              * Sets the maximum number of lines that can be represented by the {@link Text} element.
              * If not defined, the {@link Text} element will be treated as a single-line element.
              */
-            @NonNull
-            public Builder setMaxLines(@IntRange(from = 1) int maxLines) {
+            public @NonNull Builder setMaxLines(@IntRange(from = 1) int maxLines) {
                 mImpl.setMaxLines(TypesProto.Int32Prop.newBuilder().setValue(maxLines));
                 mFingerprint.recordPropertyUpdate(4, maxLines);
                 return this;
@@ -1265,8 +1192,8 @@
              * will set the alignment of lines relative to the {@link Text} element bounds. If not
              * defined, defaults to TEXT_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setMultilineAlignment(@NonNull TextAlignmentProp multilineAlignment) {
+            public @NonNull Builder setMultilineAlignment(
+                    @NonNull TextAlignmentProp multilineAlignment) {
                 mImpl.setMultilineAlignment(multilineAlignment.toProto());
                 mFingerprint.recordPropertyUpdate(
                         5, checkNotNull(multilineAlignment.getFingerprint()).aggregateValueAsInt());
@@ -1280,8 +1207,7 @@
              * will set the alignment of lines relative to the {@link Text} element bounds. If not
              * defined, defaults to TEXT_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setMultilineAlignment(@TextAlignment int multilineAlignment) {
+            public @NonNull Builder setMultilineAlignment(@TextAlignment int multilineAlignment) {
                 mImpl.setMultilineAlignment(
                         AlignmentProto.TextAlignmentProp.newBuilder()
                                 .setValue(
@@ -1298,8 +1224,7 @@
              * its text, the text which cannot fit inside its container will be truncated. If not
              * defined, defaults to TEXT_OVERFLOW_TRUNCATE.
              */
-            @NonNull
-            public Builder setOverflow(@NonNull TextOverflowProp overflow) {
+            public @NonNull Builder setOverflow(@NonNull TextOverflowProp overflow) {
                 mImpl.setOverflow(overflow.toProto());
                 mFingerprint.recordPropertyUpdate(
                         6, checkNotNull(overflow.getFingerprint()).aggregateValueAsInt());
@@ -1313,8 +1238,7 @@
              * its text, the text which cannot fit inside its container will be truncated. If not
              * defined, defaults to TEXT_OVERFLOW_TRUNCATE.
              */
-            @NonNull
-            public Builder setOverflow(@TextOverflow int overflow) {
+            public @NonNull Builder setOverflow(@TextOverflow int overflow) {
                 mImpl.setOverflow(
                         LayoutElementProto.TextOverflowProp.newBuilder()
                                 .setValue(LayoutElementProto.TextOverflow.forNumber(overflow)));
@@ -1327,8 +1251,7 @@
              * distance between subsequent baselines. If not specified, defaults the font's
              * recommended interline spacing.
              */
-            @NonNull
-            public Builder setLineHeight(@NonNull DimensionBuilders.SpProp lineHeight) {
+            public @NonNull Builder setLineHeight(DimensionBuilders.@NonNull SpProp lineHeight) {
                 mImpl.setLineHeight(lineHeight.toProto());
                 mFingerprint.recordPropertyUpdate(
                         7, checkNotNull(lineHeight.getFingerprint()).aggregateValueAsInt());
@@ -1336,8 +1259,7 @@
             }
 
             @Override
-            @NonNull
-            public Text build() {
+            public @NonNull Text build() {
                 return new Text(mImpl.build(), mFingerprint);
             }
         }
@@ -1346,7 +1268,7 @@
     /** An extensible {@code ContentScaleMode} property. */
     public static final class ContentScaleModeProp {
         private final LayoutElementProto.ContentScaleModeProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         ContentScaleModeProp(
                 LayoutElementProto.ContentScaleModeProp impl, @Nullable Fingerprint fingerprint) {
@@ -1362,19 +1284,16 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static ContentScaleModeProp fromProto(
-                @NonNull LayoutElementProto.ContentScaleModeProp proto) {
+        static @NonNull ContentScaleModeProp fromProto(
+                LayoutElementProto.@NonNull ContentScaleModeProp proto) {
             return new ContentScaleModeProp(proto, null);
         }
 
-        @NonNull
-        LayoutElementProto.ContentScaleModeProp toProto() {
+        LayoutElementProto.@NonNull ContentScaleModeProp toProto() {
             return mImpl;
         }
 
@@ -1387,16 +1306,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(@ContentScaleMode int value) {
+            public @NonNull Builder setValue(@ContentScaleMode int value) {
                 mImpl.setValue(LayoutElementProto.ContentScaleMode.forNumber(value));
                 mFingerprint.recordPropertyUpdate(1, value);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public ContentScaleModeProp build() {
+            public @NonNull ContentScaleModeProp build() {
                 return new ContentScaleModeProp(mImpl.build(), mFingerprint);
             }
         }
@@ -1405,7 +1322,7 @@
     /** Filtering parameters used for images. This can be used to apply a color tint to images. */
     public static final class ColorFilter {
         private final LayoutElementProto.ColorFilter mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         ColorFilter(LayoutElementProto.ColorFilter impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -1420,8 +1337,7 @@
          * <p>Note that only Android image resources can be tinted; Inline images will not be
          * tinted, and this property will have no effect. Intended for testing purposes only.
          */
-        @Nullable
-        public ColorBuilders.ColorProp getTint() {
+        public ColorBuilders.@Nullable ColorProp getTint() {
             if (mImpl.hasTint()) {
                 return ColorBuilders.ColorProp.fromProto(mImpl.getTint());
             } else {
@@ -1431,18 +1347,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static ColorFilter fromProto(@NonNull LayoutElementProto.ColorFilter proto) {
+        static @NonNull ColorFilter fromProto(LayoutElementProto.@NonNull ColorFilter proto) {
             return new ColorFilter(proto, null);
         }
 
-        @NonNull
-        LayoutElementProto.ColorFilter toProto() {
+        LayoutElementProto.@NonNull ColorFilter toProto() {
             return mImpl;
         }
 
@@ -1462,9 +1375,8 @@
              * <p>Note that only Android image resources can be tinted; Inline images will not be
              * tinted, and this property will have no effect.
              */
-            @NonNull
-            public LayoutElementBuilders.ColorFilter.Builder setTint(
-                    @NonNull ColorBuilders.ColorProp tint) {
+            public LayoutElementBuilders.ColorFilter.@NonNull Builder setTint(
+                    ColorBuilders.@NonNull ColorProp tint) {
                 mImpl.setTint(tint.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(tint.getFingerprint()).aggregateValueAsInt());
@@ -1472,8 +1384,7 @@
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public ColorFilter build() {
+            public @NonNull ColorFilter build() {
                 return new ColorFilter(mImpl.build(), mFingerprint);
             }
         }
@@ -1488,7 +1399,7 @@
      */
     public static final class Image implements LayoutElement {
         private final LayoutElementProto.Image mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Image(LayoutElementProto.Image impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -1499,8 +1410,7 @@
          * Gets the resource_id of the image to render. This must exist in the supplied resource
          * bundle. Intended for testing purposes only.
          */
-        @Nullable
-        public TypeBuilders.StringProp getResourceId() {
+        public TypeBuilders.@Nullable StringProp getResourceId() {
             if (mImpl.hasResourceId()) {
                 return TypeBuilders.StringProp.fromProto(mImpl.getResourceId());
             } else {
@@ -1512,8 +1422,7 @@
          * Gets the width of this image. If not defined, the image will not be rendered. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.ImageDimension getWidth() {
+        public DimensionBuilders.@Nullable ImageDimension getWidth() {
             if (mImpl.hasWidth()) {
                 return DimensionBuilders.imageDimensionFromProto(mImpl.getWidth());
             } else {
@@ -1525,8 +1434,7 @@
          * Gets the height of this image. If not defined, the image will not be rendered. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.ImageDimension getHeight() {
+        public DimensionBuilders.@Nullable ImageDimension getHeight() {
             if (mImpl.hasHeight()) {
                 return DimensionBuilders.imageDimensionFromProto(mImpl.getHeight());
             } else {
@@ -1539,8 +1447,7 @@
          * size does not match those bounds. Defaults to CONTENT_SCALE_MODE_FIT. Intended for
          * testing purposes only.
          */
-        @Nullable
-        public ContentScaleModeProp getContentScaleMode() {
+        public @Nullable ContentScaleModeProp getContentScaleMode() {
             if (mImpl.hasContentScaleMode()) {
                 return ContentScaleModeProp.fromProto(mImpl.getContentScaleMode());
             } else {
@@ -1552,8 +1459,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.Modifiers getModifiers() {
+        public ModifiersBuilders.@Nullable Modifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -1562,8 +1468,7 @@
         }
 
         /** Gets filtering parameters for this image. If not specified, defaults to no filtering. */
-        @Nullable
-        public ColorFilter getColorFilter() {
+        public @Nullable ColorFilter getColorFilter() {
             if (mImpl.hasColorFilter()) {
                 return ColorFilter.fromProto(mImpl.getColorFilter());
             } else {
@@ -1573,26 +1478,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Image fromProto(
-                @NonNull LayoutElementProto.Image proto, @Nullable Fingerprint fingerprint) {
+        static @NonNull Image fromProto(
+                LayoutElementProto.@NonNull Image proto, @Nullable Fingerprint fingerprint) {
             return new Image(proto, fingerprint);
         }
 
-        @NonNull
-        LayoutElementProto.Image toProto() {
+        LayoutElementProto.@NonNull Image toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.LayoutElement toLayoutElementProto() {
+        public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
             return LayoutElementProto.LayoutElement.newBuilder().setImage(mImpl).build();
         }
 
@@ -1608,8 +1509,7 @@
              * Sets the resource_id of the image to render. This must exist in the supplied resource
              * bundle.
              */
-            @NonNull
-            public Builder setResourceId(@NonNull TypeBuilders.StringProp resourceId) {
+            public @NonNull Builder setResourceId(TypeBuilders.@NonNull StringProp resourceId) {
                 mImpl.setResourceId(resourceId.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(resourceId.getFingerprint()).aggregateValueAsInt());
@@ -1620,16 +1520,14 @@
              * Sets the resource_id of the image to render. This must exist in the supplied resource
              * bundle.
              */
-            @NonNull
-            public Builder setResourceId(@NonNull String resourceId) {
+            public @NonNull Builder setResourceId(@NonNull String resourceId) {
                 mImpl.setResourceId(TypesProto.StringProp.newBuilder().setValue(resourceId));
                 mFingerprint.recordPropertyUpdate(1, resourceId.hashCode());
                 return this;
             }
 
             /** Sets the width of this image. If not defined, the image will not be rendered. */
-            @NonNull
-            public Builder setWidth(@NonNull DimensionBuilders.ImageDimension width) {
+            public @NonNull Builder setWidth(DimensionBuilders.@NonNull ImageDimension width) {
                 mImpl.setWidth(width.toImageDimensionProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(width.getFingerprint()).aggregateValueAsInt());
@@ -1637,8 +1535,7 @@
             }
 
             /** Sets the height of this image. If not defined, the image will not be rendered. */
-            @NonNull
-            public Builder setHeight(@NonNull DimensionBuilders.ImageDimension height) {
+            public @NonNull Builder setHeight(DimensionBuilders.@NonNull ImageDimension height) {
                 mImpl.setHeight(height.toImageDimensionProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(height.getFingerprint()).aggregateValueAsInt());
@@ -1649,8 +1546,8 @@
              * Sets how to scale the image resource inside the bounds specified by width/height if
              * its size does not match those bounds. Defaults to CONTENT_SCALE_MODE_FIT.
              */
-            @NonNull
-            public Builder setContentScaleMode(@NonNull ContentScaleModeProp contentScaleMode) {
+            public @NonNull Builder setContentScaleMode(
+                    @NonNull ContentScaleModeProp contentScaleMode) {
                 mImpl.setContentScaleMode(contentScaleMode.toProto());
                 mFingerprint.recordPropertyUpdate(
                         4, checkNotNull(contentScaleMode.getFingerprint()).aggregateValueAsInt());
@@ -1661,8 +1558,7 @@
              * Sets how to scale the image resource inside the bounds specified by width/height if
              * its size does not match those bounds. Defaults to CONTENT_SCALE_MODE_FIT.
              */
-            @NonNull
-            public Builder setContentScaleMode(@ContentScaleMode int contentScaleMode) {
+            public @NonNull Builder setContentScaleMode(@ContentScaleMode int contentScaleMode) {
                 mImpl.setContentScaleMode(
                         LayoutElementProto.ContentScaleModeProp.newBuilder()
                                 .setValue(
@@ -1673,8 +1569,7 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.Modifiers modifiers) {
+            public @NonNull Builder setModifiers(ModifiersBuilders.@NonNull Modifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -1684,8 +1579,7 @@
             /**
              * Sets filtering parameters for this image. If not specified, defaults to no filtering.
              */
-            @NonNull
-            public Builder setColorFilter(@NonNull ColorFilter colorFilter) {
+            public @NonNull Builder setColorFilter(@NonNull ColorFilter colorFilter) {
                 mImpl.setColorFilter(colorFilter.toProto());
                 mFingerprint.recordPropertyUpdate(
                         6, checkNotNull(colorFilter.getFingerprint()).aggregateValueAsInt());
@@ -1693,8 +1587,7 @@
             }
 
             @Override
-            @NonNull
-            public Image build() {
+            public @NonNull Image build() {
                 return new Image(mImpl.build(), mFingerprint);
             }
         }
@@ -1703,7 +1596,7 @@
     /** A simple spacer, typically used to provide padding between adjacent elements. */
     public static final class Spacer implements LayoutElement {
         private final LayoutElementProto.Spacer mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Spacer(LayoutElementProto.Spacer impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -1715,8 +1608,7 @@
          * {@link Arc}, this must be specified as an angular dimension, otherwise a linear dimension
          * must be used. If not defined, defaults to 0. Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.SpacerDimension getWidth() {
+        public DimensionBuilders.@Nullable SpacerDimension getWidth() {
             if (mImpl.hasWidth()) {
                 return DimensionBuilders.spacerDimensionFromProto(mImpl.getWidth());
             } else {
@@ -1728,8 +1620,7 @@
          * Gets the height of this spacer. If not defined, defaults to 0. Intended for testing
          * purposes only.
          */
-        @Nullable
-        public DimensionBuilders.SpacerDimension getHeight() {
+        public DimensionBuilders.@Nullable SpacerDimension getHeight() {
             if (mImpl.hasHeight()) {
                 return DimensionBuilders.spacerDimensionFromProto(mImpl.getHeight());
             } else {
@@ -1741,8 +1632,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.Modifiers getModifiers() {
+        public ModifiersBuilders.@Nullable Modifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -1752,26 +1642,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Spacer fromProto(
-                @NonNull LayoutElementProto.Spacer proto, @Nullable Fingerprint fingerprint) {
+        static @NonNull Spacer fromProto(
+                LayoutElementProto.@NonNull Spacer proto, @Nullable Fingerprint fingerprint) {
             return new Spacer(proto, fingerprint);
         }
 
-        @NonNull
-        LayoutElementProto.Spacer toProto() {
+        LayoutElementProto.@NonNull Spacer toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.LayoutElement toLayoutElementProto() {
+        public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
             return LayoutElementProto.LayoutElement.newBuilder().setSpacer(mImpl).build();
         }
 
@@ -1788,8 +1674,7 @@
              * {@link Arc}, this must be specified as an angular dimension, otherwise a linear
              * dimension must be used. If not defined, defaults to 0.
              */
-            @NonNull
-            public Builder setWidth(@NonNull DimensionBuilders.SpacerDimension width) {
+            public @NonNull Builder setWidth(DimensionBuilders.@NonNull SpacerDimension width) {
                 mImpl.setWidth(width.toSpacerDimensionProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(width.getFingerprint()).aggregateValueAsInt());
@@ -1797,8 +1682,7 @@
             }
 
             /** Sets the height of this spacer. If not defined, defaults to 0. */
-            @NonNull
-            public Builder setHeight(@NonNull DimensionBuilders.SpacerDimension height) {
+            public @NonNull Builder setHeight(DimensionBuilders.@NonNull SpacerDimension height) {
                 mImpl.setHeight(height.toSpacerDimensionProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(height.getFingerprint()).aggregateValueAsInt());
@@ -1806,8 +1690,7 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.Modifiers modifiers) {
+            public @NonNull Builder setModifiers(ModifiersBuilders.@NonNull Modifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -1815,8 +1698,7 @@
             }
 
             @Override
-            @NonNull
-            public Spacer build() {
+            public @NonNull Spacer build() {
                 return new Spacer(mImpl.build(), mFingerprint);
             }
         }
@@ -1828,7 +1710,7 @@
      */
     public static final class Box implements LayoutElement {
         private final LayoutElementProto.Box mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Box(LayoutElementProto.Box impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -1836,8 +1718,7 @@
         }
 
         /** Gets the child element(s) to wrap. Intended for testing purposes only. */
-        @NonNull
-        public List<LayoutElement> getContents() {
+        public @NonNull List<LayoutElement> getContents() {
             return Collections.unmodifiableList(
                     mImpl.getContentsList().stream()
                             .map(LayoutElementBuilders::layoutElementFromProto)
@@ -1848,8 +1729,7 @@
          * Gets the height of this {@link Box}. If not defined, this will size itself to fit all of
          * its children (i.e. a WrappedDimension). Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.ContainerDimension getHeight() {
+        public DimensionBuilders.@Nullable ContainerDimension getHeight() {
             if (mImpl.hasHeight()) {
                 return DimensionBuilders.containerDimensionFromProto(mImpl.getHeight());
             } else {
@@ -1861,8 +1741,7 @@
          * Gets the width of this {@link Box}. If not defined, this will size itself to fit all of
          * its children (i.e. a WrappedDimension). Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.ContainerDimension getWidth() {
+        public DimensionBuilders.@Nullable ContainerDimension getWidth() {
             if (mImpl.hasWidth()) {
                 return DimensionBuilders.containerDimensionFromProto(mImpl.getWidth());
             } else {
@@ -1874,8 +1753,7 @@
          * Gets the horizontal alignment of the element inside this {@link Box}. If not defined,
          * defaults to HORIZONTAL_ALIGN_CENTER. Intended for testing purposes only.
          */
-        @Nullable
-        public HorizontalAlignmentProp getHorizontalAlignment() {
+        public @Nullable HorizontalAlignmentProp getHorizontalAlignment() {
             if (mImpl.hasHorizontalAlignment()) {
                 return HorizontalAlignmentProp.fromProto(mImpl.getHorizontalAlignment());
             } else {
@@ -1887,8 +1765,7 @@
          * Gets the vertical alignment of the element inside this {@link Box}. If not defined,
          * defaults to VERTICAL_ALIGN_CENTER. Intended for testing purposes only.
          */
-        @Nullable
-        public VerticalAlignmentProp getVerticalAlignment() {
+        public @Nullable VerticalAlignmentProp getVerticalAlignment() {
             if (mImpl.hasVerticalAlignment()) {
                 return VerticalAlignmentProp.fromProto(mImpl.getVerticalAlignment());
             } else {
@@ -1900,8 +1777,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.Modifiers getModifiers() {
+        public ModifiersBuilders.@Nullable Modifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -1911,26 +1787,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Box fromProto(
-                @NonNull LayoutElementProto.Box proto, @Nullable Fingerprint fingerprint) {
+        static @NonNull Box fromProto(
+                LayoutElementProto.@NonNull Box proto, @Nullable Fingerprint fingerprint) {
             return new Box(proto, fingerprint);
         }
 
-        @NonNull
-        LayoutElementProto.Box toProto() {
+        LayoutElementProto.@NonNull Box toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.LayoutElement toLayoutElementProto() {
+        public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
             return LayoutElementProto.LayoutElement.newBuilder().setBox(mImpl).build();
         }
 
@@ -1943,8 +1815,7 @@
             public Builder() {}
 
             /** Adds one item to the child element(s) to wrap. */
-            @NonNull
-            public Builder addContent(@NonNull LayoutElement content) {
+            public @NonNull Builder addContent(@NonNull LayoutElement content) {
                 mImpl.addContents(content.toLayoutElementProto());
                 mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));
                 return this;
@@ -1954,8 +1825,8 @@
              * Sets the height of this {@link Box}. If not defined, this will size itself to fit all
              * of its children (i.e. a WrappedDimension).
              */
-            @NonNull
-            public Builder setHeight(@NonNull DimensionBuilders.ContainerDimension height) {
+            public @NonNull Builder setHeight(
+                    DimensionBuilders.@NonNull ContainerDimension height) {
                 mImpl.setHeight(height.toContainerDimensionProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(height.getFingerprint()).aggregateValueAsInt());
@@ -1966,8 +1837,7 @@
              * Sets the width of this {@link Box}. If not defined, this will size itself to fit all
              * of its children (i.e. a WrappedDimension).
              */
-            @NonNull
-            public Builder setWidth(@NonNull DimensionBuilders.ContainerDimension width) {
+            public @NonNull Builder setWidth(DimensionBuilders.@NonNull ContainerDimension width) {
                 mImpl.setWidth(width.toContainerDimensionProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(width.getFingerprint()).aggregateValueAsInt());
@@ -1978,8 +1848,7 @@
              * Sets the horizontal alignment of the element inside this {@link Box}. If not defined,
              * defaults to HORIZONTAL_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setHorizontalAlignment(
+            public @NonNull Builder setHorizontalAlignment(
                     @NonNull HorizontalAlignmentProp horizontalAlignment) {
                 mImpl.setHorizontalAlignment(horizontalAlignment.toProto());
                 mFingerprint.recordPropertyUpdate(
@@ -1992,8 +1861,8 @@
              * Sets the horizontal alignment of the element inside this {@link Box}. If not defined,
              * defaults to HORIZONTAL_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setHorizontalAlignment(@HorizontalAlignment int horizontalAlignment) {
+            public @NonNull Builder setHorizontalAlignment(
+                    @HorizontalAlignment int horizontalAlignment) {
                 mImpl.setHorizontalAlignment(
                         AlignmentProto.HorizontalAlignmentProp.newBuilder()
                                 .setValue(
@@ -2007,8 +1876,8 @@
              * Sets the vertical alignment of the element inside this {@link Box}. If not defined,
              * defaults to VERTICAL_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setVerticalAlignment(@NonNull VerticalAlignmentProp verticalAlignment) {
+            public @NonNull Builder setVerticalAlignment(
+                    @NonNull VerticalAlignmentProp verticalAlignment) {
                 mImpl.setVerticalAlignment(verticalAlignment.toProto());
                 mFingerprint.recordPropertyUpdate(
                         5, checkNotNull(verticalAlignment.getFingerprint()).aggregateValueAsInt());
@@ -2019,8 +1888,7 @@
              * Sets the vertical alignment of the element inside this {@link Box}. If not defined,
              * defaults to VERTICAL_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setVerticalAlignment(@VerticalAlignment int verticalAlignment) {
+            public @NonNull Builder setVerticalAlignment(@VerticalAlignment int verticalAlignment) {
                 mImpl.setVerticalAlignment(
                         AlignmentProto.VerticalAlignmentProp.newBuilder()
                                 .setValue(
@@ -2031,8 +1899,7 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.Modifiers modifiers) {
+            public @NonNull Builder setModifiers(ModifiersBuilders.@NonNull Modifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         6, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -2040,8 +1907,7 @@
             }
 
             @Override
-            @NonNull
-            public Box build() {
+            public @NonNull Box build() {
                 return new Box(mImpl.build(), mFingerprint);
             }
         }
@@ -2054,7 +1920,7 @@
      */
     public static final class SpanText implements Span {
         private final LayoutElementProto.SpanText mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         SpanText(LayoutElementProto.SpanText impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -2062,8 +1928,7 @@
         }
 
         /** Gets the text to render. Intended for testing purposes only. */
-        @Nullable
-        public TypeBuilders.StringProp getText() {
+        public TypeBuilders.@Nullable StringProp getText() {
             if (mImpl.hasText()) {
                 return TypeBuilders.StringProp.fromProto(mImpl.getText());
             } else {
@@ -2075,8 +1940,7 @@
          * Gets the style of font to use (size, bold etc). If not specified, defaults to the
          * platform's default body font. Intended for testing purposes only.
          */
-        @Nullable
-        public FontStyle getFontStyle() {
+        public @Nullable FontStyle getFontStyle() {
             if (mImpl.hasFontStyle()) {
                 return FontStyle.fromProto(mImpl.getFontStyle());
             } else {
@@ -2088,8 +1952,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.SpanModifiers getModifiers() {
+        public ModifiersBuilders.@Nullable SpanModifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.SpanModifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -2099,25 +1962,21 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static SpanText fromProto(@NonNull LayoutElementProto.SpanText proto) {
+        static @NonNull SpanText fromProto(LayoutElementProto.@NonNull SpanText proto) {
             return new SpanText(proto, null);
         }
 
-        @NonNull
-        LayoutElementProto.SpanText toProto() {
+        LayoutElementProto.@NonNull SpanText toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.Span toSpanProto() {
+        public LayoutElementProto.@NonNull Span toSpanProto() {
             return LayoutElementProto.Span.newBuilder().setText(mImpl).build();
         }
 
@@ -2130,8 +1989,7 @@
             public Builder() {}
 
             /** Sets the text to render. */
-            @NonNull
-            public Builder setText(@NonNull TypeBuilders.StringProp text) {
+            public @NonNull Builder setText(TypeBuilders.@NonNull StringProp text) {
                 mImpl.setText(text.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(text.getFingerprint()).aggregateValueAsInt());
@@ -2139,8 +1997,7 @@
             }
 
             /** Sets the text to render. */
-            @NonNull
-            public Builder setText(@NonNull String text) {
+            public @NonNull Builder setText(@NonNull String text) {
                 mImpl.setText(TypesProto.StringProp.newBuilder().setValue(text));
                 mFingerprint.recordPropertyUpdate(1, text.hashCode());
                 return this;
@@ -2150,8 +2007,7 @@
              * Sets the style of font to use (size, bold etc). If not specified, defaults to the
              * platform's default body font.
              */
-            @NonNull
-            public Builder setFontStyle(@NonNull FontStyle fontStyle) {
+            public @NonNull Builder setFontStyle(@NonNull FontStyle fontStyle) {
                 mImpl.setFontStyle(fontStyle.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(fontStyle.getFingerprint()).aggregateValueAsInt());
@@ -2159,8 +2015,8 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.SpanModifiers modifiers) {
+            public @NonNull Builder setModifiers(
+                    ModifiersBuilders.@NonNull SpanModifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -2168,8 +2024,7 @@
             }
 
             @Override
-            @NonNull
-            public SpanText build() {
+            public @NonNull SpanText build() {
                 return new SpanText(mImpl.build(), mFingerprint);
             }
         }
@@ -2178,7 +2033,7 @@
     /** An image which can be added to a {@link Span}. */
     public static final class SpanImage implements Span {
         private final LayoutElementProto.SpanImage mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         SpanImage(LayoutElementProto.SpanImage impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -2189,8 +2044,7 @@
          * Gets the resource_id of the image to render. This must exist in the supplied resource
          * bundle. Intended for testing purposes only.
          */
-        @Nullable
-        public TypeBuilders.StringProp getResourceId() {
+        public TypeBuilders.@Nullable StringProp getResourceId() {
             if (mImpl.hasResourceId()) {
                 return TypeBuilders.StringProp.fromProto(mImpl.getResourceId());
             } else {
@@ -2202,8 +2056,7 @@
          * Gets the width of this image. If not defined, the image will not be rendered. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.DpProp getWidth() {
+        public DimensionBuilders.@Nullable DpProp getWidth() {
             if (mImpl.hasWidth()) {
                 return DimensionBuilders.DpProp.fromProto(mImpl.getWidth());
             } else {
@@ -2215,8 +2068,7 @@
          * Gets the height of this image. If not defined, the image will not be rendered. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.DpProp getHeight() {
+        public DimensionBuilders.@Nullable DpProp getHeight() {
             if (mImpl.hasHeight()) {
                 return DimensionBuilders.DpProp.fromProto(mImpl.getHeight());
             } else {
@@ -2228,8 +2080,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.SpanModifiers getModifiers() {
+        public ModifiersBuilders.@Nullable SpanModifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.SpanModifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -2241,8 +2092,7 @@
          * Gets alignment of this image within the line height of the surrounding {@link Spannable}.
          * If undefined, defaults to SPAN_VERTICAL_ALIGN_BOTTOM. Intended for testing purposes only.
          */
-        @Nullable
-        public SpanVerticalAlignmentProp getAlignment() {
+        public @Nullable SpanVerticalAlignmentProp getAlignment() {
             if (mImpl.hasAlignment()) {
                 return SpanVerticalAlignmentProp.fromProto(mImpl.getAlignment());
             } else {
@@ -2252,25 +2102,21 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static SpanImage fromProto(@NonNull LayoutElementProto.SpanImage proto) {
+        static @NonNull SpanImage fromProto(LayoutElementProto.@NonNull SpanImage proto) {
             return new SpanImage(proto, null);
         }
 
-        @NonNull
-        LayoutElementProto.SpanImage toProto() {
+        LayoutElementProto.@NonNull SpanImage toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.Span toSpanProto() {
+        public LayoutElementProto.@NonNull Span toSpanProto() {
             return LayoutElementProto.Span.newBuilder().setImage(mImpl).build();
         }
 
@@ -2286,8 +2132,7 @@
              * Sets the resource_id of the image to render. This must exist in the supplied resource
              * bundle.
              */
-            @NonNull
-            public Builder setResourceId(@NonNull TypeBuilders.StringProp resourceId) {
+            public @NonNull Builder setResourceId(TypeBuilders.@NonNull StringProp resourceId) {
                 mImpl.setResourceId(resourceId.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(resourceId.getFingerprint()).aggregateValueAsInt());
@@ -2298,16 +2143,14 @@
              * Sets the resource_id of the image to render. This must exist in the supplied resource
              * bundle.
              */
-            @NonNull
-            public Builder setResourceId(@NonNull String resourceId) {
+            public @NonNull Builder setResourceId(@NonNull String resourceId) {
                 mImpl.setResourceId(TypesProto.StringProp.newBuilder().setValue(resourceId));
                 mFingerprint.recordPropertyUpdate(1, resourceId.hashCode());
                 return this;
             }
 
             /** Sets the width of this image. If not defined, the image will not be rendered. */
-            @NonNull
-            public Builder setWidth(@NonNull DimensionBuilders.DpProp width) {
+            public @NonNull Builder setWidth(DimensionBuilders.@NonNull DpProp width) {
                 mImpl.setWidth(width.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(width.getFingerprint()).aggregateValueAsInt());
@@ -2315,8 +2158,7 @@
             }
 
             /** Sets the height of this image. If not defined, the image will not be rendered. */
-            @NonNull
-            public Builder setHeight(@NonNull DimensionBuilders.DpProp height) {
+            public @NonNull Builder setHeight(DimensionBuilders.@NonNull DpProp height) {
                 mImpl.setHeight(height.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(height.getFingerprint()).aggregateValueAsInt());
@@ -2324,8 +2166,8 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.SpanModifiers modifiers) {
+            public @NonNull Builder setModifiers(
+                    ModifiersBuilders.@NonNull SpanModifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         4, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -2336,8 +2178,7 @@
              * Sets alignment of this image within the line height of the surrounding {@link
              * Spannable}. If undefined, defaults to SPAN_VERTICAL_ALIGN_BOTTOM.
              */
-            @NonNull
-            public Builder setAlignment(@NonNull SpanVerticalAlignmentProp alignment) {
+            public @NonNull Builder setAlignment(@NonNull SpanVerticalAlignmentProp alignment) {
                 mImpl.setAlignment(alignment.toProto());
                 mFingerprint.recordPropertyUpdate(
                         5, checkNotNull(alignment.getFingerprint()).aggregateValueAsInt());
@@ -2348,8 +2189,7 @@
              * Sets alignment of this image within the line height of the surrounding {@link
              * Spannable}. If undefined, defaults to SPAN_VERTICAL_ALIGN_BOTTOM.
              */
-            @NonNull
-            public Builder setAlignment(@SpanVerticalAlignment int alignment) {
+            public @NonNull Builder setAlignment(@SpanVerticalAlignment int alignment) {
                 mImpl.setAlignment(
                         LayoutElementProto.SpanVerticalAlignmentProp.newBuilder()
                                 .setValue(
@@ -2360,8 +2200,7 @@
             }
 
             @Override
-            @NonNull
-            public SpanImage build() {
+            public @NonNull SpanImage build() {
                 return new SpanImage(mImpl.build(), mFingerprint);
             }
         }
@@ -2375,29 +2214,25 @@
     public interface Span {
         /** Get the protocol buffer representation of this object. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        LayoutElementProto.Span toSpanProto();
+        LayoutElementProto.@NonNull Span toSpanProto();
 
         /** Get the fingerprint for this object or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        Fingerprint getFingerprint();
+        @Nullable Fingerprint getFingerprint();
 
         /** Builder to create {@link Span} objects. */
         @SuppressLint("StaticFinalBuilder")
         interface Builder {
 
             /** Builds an instance with values accumulated in this Builder. */
-            @NonNull
-            Span build();
+            @NonNull Span build();
         }
     }
 
     /**
      * Return an instance of one of this object's subtypes, from the protocol buffer representation.
      */
-    @NonNull
-    static Span spanFromProto(@NonNull LayoutElementProto.Span proto) {
+    static @NonNull Span spanFromProto(LayoutElementProto.@NonNull Span proto) {
         if (proto.hasText()) {
             return SpanText.fromProto(proto.getText());
         }
@@ -2415,7 +2250,7 @@
      */
     public static final class Spannable implements LayoutElement {
         private final LayoutElementProto.Spannable mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Spannable(LayoutElementProto.Spannable impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -2426,8 +2261,7 @@
          * Gets the {@link Span} elements that form this {@link Spannable}. Intended for testing
          * purposes only.
          */
-        @NonNull
-        public List<Span> getSpans() {
+        public @NonNull List<Span> getSpans() {
             return Collections.unmodifiableList(
                     mImpl.getSpansList().stream()
                             .map(LayoutElementBuilders::spanFromProto)
@@ -2438,8 +2272,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.Modifiers getModifiers() {
+        public ModifiersBuilders.@Nullable Modifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -2452,8 +2285,7 @@
          * element. If not defined, the {@link Spannable} element will be treated as a single-line
          * element. Intended for testing purposes only.
          */
-        @Nullable
-        public TypeBuilders.Int32Prop getMaxLines() {
+        public TypeBuilders.@Nullable Int32Prop getMaxLines() {
             if (mImpl.hasMaxLines()) {
                 return TypeBuilders.Int32Prop.fromProto(mImpl.getMaxLines());
             } else {
@@ -2469,8 +2301,7 @@
          * element bounds. If not defined, defaults to TEXT_ALIGN_CENTER. Intended for testing
          * purposes only.
          */
-        @Nullable
-        public HorizontalAlignmentProp getMultilineAlignment() {
+        public @Nullable HorizontalAlignmentProp getMultilineAlignment() {
             if (mImpl.hasMultilineAlignment()) {
                 return HorizontalAlignmentProp.fromProto(mImpl.getMultilineAlignment());
             } else {
@@ -2485,8 +2316,7 @@
          * content, the content which cannot fit inside its container will be truncated. If not
          * defined, defaults to TEXT_OVERFLOW_TRUNCATE. Intended for testing purposes only.
          */
-        @Nullable
-        public TextOverflowProp getOverflow() {
+        public @Nullable TextOverflowProp getOverflow() {
             if (mImpl.hasOverflow()) {
                 return TextOverflowProp.fromProto(mImpl.getOverflow());
             } else {
@@ -2499,8 +2329,7 @@
          * distance between subsequent baselines. If not specified, defaults the font's recommended
          * interline spacing. Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.SpProp getLineHeight() {
+        public DimensionBuilders.@Nullable SpProp getLineHeight() {
             if (mImpl.hasLineHeight()) {
                 return DimensionBuilders.SpProp.fromProto(mImpl.getLineHeight());
             } else {
@@ -2510,26 +2339,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Spannable fromProto(
-                @NonNull LayoutElementProto.Spannable proto, @Nullable Fingerprint fingerprint) {
+        static @NonNull Spannable fromProto(
+                LayoutElementProto.@NonNull Spannable proto, @Nullable Fingerprint fingerprint) {
             return new Spannable(proto, fingerprint);
         }
 
-        @NonNull
-        LayoutElementProto.Spannable toProto() {
+        LayoutElementProto.@NonNull Spannable toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.LayoutElement toLayoutElementProto() {
+        public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
             return LayoutElementProto.LayoutElement.newBuilder().setSpannable(mImpl).build();
         }
 
@@ -2542,8 +2367,7 @@
             public Builder() {}
 
             /** Adds one item to the {@link Span} elements that form this {@link Spannable}. */
-            @NonNull
-            public Builder addSpan(@NonNull Span span) {
+            public @NonNull Builder addSpan(@NonNull Span span) {
                 mImpl.addSpans(span.toSpanProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(span.getFingerprint()).aggregateValueAsInt());
@@ -2551,8 +2375,7 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.Modifiers modifiers) {
+            public @NonNull Builder setModifiers(ModifiersBuilders.@NonNull Modifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -2564,8 +2387,7 @@
              * element. If not defined, the {@link Spannable} element will be treated as a
              * single-line element.
              */
-            @NonNull
-            public Builder setMaxLines(@NonNull TypeBuilders.Int32Prop maxLines) {
+            public @NonNull Builder setMaxLines(TypeBuilders.@NonNull Int32Prop maxLines) {
                 mImpl.setMaxLines(maxLines.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(maxLines.getFingerprint()).aggregateValueAsInt());
@@ -2577,8 +2399,7 @@
              * element. If not defined, the {@link Spannable} element will be treated as a
              * single-line element.
              */
-            @NonNull
-            public Builder setMaxLines(@IntRange(from = 1) int maxLines) {
+            public @NonNull Builder setMaxLines(@IntRange(from = 1) int maxLines) {
                 mImpl.setMaxLines(TypesProto.Int32Prop.newBuilder().setValue(maxLines));
                 mFingerprint.recordPropertyUpdate(3, maxLines);
                 return this;
@@ -2591,8 +2412,7 @@
              * For multi-line content, however, this will set the alignment of lines relative to the
              * {@link Spannable} element bounds. If not defined, defaults to TEXT_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setMultilineAlignment(
+            public @NonNull Builder setMultilineAlignment(
                     @NonNull HorizontalAlignmentProp multilineAlignment) {
                 mImpl.setMultilineAlignment(multilineAlignment.toProto());
                 mFingerprint.recordPropertyUpdate(
@@ -2607,8 +2427,8 @@
              * For multi-line content, however, this will set the alignment of lines relative to the
              * {@link Spannable} element bounds. If not defined, defaults to TEXT_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setMultilineAlignment(@HorizontalAlignment int multilineAlignment) {
+            public @NonNull Builder setMultilineAlignment(
+                    @HorizontalAlignment int multilineAlignment) {
                 mImpl.setMultilineAlignment(
                         AlignmentProto.HorizontalAlignmentProp.newBuilder()
                                 .setValue(
@@ -2625,8 +2445,7 @@
              * render all of its content, the content which cannot fit inside its container will be
              * truncated. If not defined, defaults to TEXT_OVERFLOW_TRUNCATE.
              */
-            @NonNull
-            public Builder setOverflow(@NonNull TextOverflowProp overflow) {
+            public @NonNull Builder setOverflow(@NonNull TextOverflowProp overflow) {
                 mImpl.setOverflow(overflow.toProto());
                 mFingerprint.recordPropertyUpdate(
                         5, checkNotNull(overflow.getFingerprint()).aggregateValueAsInt());
@@ -2640,8 +2459,7 @@
              * render all of its content, the content which cannot fit inside its container will be
              * truncated. If not defined, defaults to TEXT_OVERFLOW_TRUNCATE.
              */
-            @NonNull
-            public Builder setOverflow(@TextOverflow int overflow) {
+            public @NonNull Builder setOverflow(@TextOverflow int overflow) {
                 mImpl.setOverflow(
                         LayoutElementProto.TextOverflowProp.newBuilder()
                                 .setValue(LayoutElementProto.TextOverflow.forNumber(overflow)));
@@ -2654,8 +2472,7 @@
              * distance between subsequent baselines. If not specified, defaults the font's
              * recommended interline spacing.
              */
-            @NonNull
-            public Builder setLineHeight(@NonNull DimensionBuilders.SpProp lineHeight) {
+            public @NonNull Builder setLineHeight(DimensionBuilders.@NonNull SpProp lineHeight) {
                 mImpl.setLineHeight(lineHeight.toProto());
                 mFingerprint.recordPropertyUpdate(
                         7, checkNotNull(lineHeight.getFingerprint()).aggregateValueAsInt());
@@ -2663,8 +2480,7 @@
             }
 
             @Override
-            @NonNull
-            public Spannable build() {
+            public @NonNull Spannable build() {
                 return new Spannable(mImpl.build(), mFingerprint);
             }
         }
@@ -2682,7 +2498,7 @@
      */
     public static final class Column implements LayoutElement {
         private final LayoutElementProto.Column mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Column(LayoutElementProto.Column impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -2693,8 +2509,7 @@
          * Gets the list of child elements to place inside this {@link Column}. Intended for testing
          * purposes only.
          */
-        @NonNull
-        public List<LayoutElement> getContents() {
+        public @NonNull List<LayoutElement> getContents() {
             return Collections.unmodifiableList(
                     mImpl.getContentsList().stream()
                             .map(LayoutElementBuilders::layoutElementFromProto)
@@ -2706,8 +2521,7 @@
          * the resulting width of the column. If not defined, defaults to HORIZONTAL_ALIGN_CENTER.
          * Intended for testing purposes only.
          */
-        @Nullable
-        public HorizontalAlignmentProp getHorizontalAlignment() {
+        public @Nullable HorizontalAlignmentProp getHorizontalAlignment() {
             if (mImpl.hasHorizontalAlignment()) {
                 return HorizontalAlignmentProp.fromProto(mImpl.getHorizontalAlignment());
             } else {
@@ -2719,8 +2533,7 @@
          * Gets the width of this column. If not defined, this will size itself to fit all of its
          * children (i.e. a WrappedDimension). Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.ContainerDimension getWidth() {
+        public DimensionBuilders.@Nullable ContainerDimension getWidth() {
             if (mImpl.hasWidth()) {
                 return DimensionBuilders.containerDimensionFromProto(mImpl.getWidth());
             } else {
@@ -2732,8 +2545,7 @@
          * Gets the height of this column. If not defined, this will size itself to fit all of its
          * children (i.e. a WrappedDimension). Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.ContainerDimension getHeight() {
+        public DimensionBuilders.@Nullable ContainerDimension getHeight() {
             if (mImpl.hasHeight()) {
                 return DimensionBuilders.containerDimensionFromProto(mImpl.getHeight());
             } else {
@@ -2745,8 +2557,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.Modifiers getModifiers() {
+        public ModifiersBuilders.@Nullable Modifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -2756,26 +2567,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Column fromProto(
-                @NonNull LayoutElementProto.Column proto, @Nullable Fingerprint fingerprint) {
+        static @NonNull Column fromProto(
+                LayoutElementProto.@NonNull Column proto, @Nullable Fingerprint fingerprint) {
             return new Column(proto, fingerprint);
         }
 
-        @NonNull
-        LayoutElementProto.Column toProto() {
+        LayoutElementProto.@NonNull Column toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.LayoutElement toLayoutElementProto() {
+        public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
             return LayoutElementProto.LayoutElement.newBuilder().setColumn(mImpl).build();
         }
 
@@ -2788,8 +2595,7 @@
             public Builder() {}
 
             /** Adds one item to the list of child elements to place inside this {@link Column}. */
-            @NonNull
-            public Builder addContent(@NonNull LayoutElement content) {
+            public @NonNull Builder addContent(@NonNull LayoutElement content) {
                 mImpl.addContents(content.toLayoutElementProto());
                 mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));
                 return this;
@@ -2800,8 +2606,7 @@
              * than the resulting width of the column. If not defined, defaults to
              * HORIZONTAL_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setHorizontalAlignment(
+            public @NonNull Builder setHorizontalAlignment(
                     @NonNull HorizontalAlignmentProp horizontalAlignment) {
                 mImpl.setHorizontalAlignment(horizontalAlignment.toProto());
                 mFingerprint.recordPropertyUpdate(
@@ -2815,8 +2620,8 @@
              * than the resulting width of the column. If not defined, defaults to
              * HORIZONTAL_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setHorizontalAlignment(@HorizontalAlignment int horizontalAlignment) {
+            public @NonNull Builder setHorizontalAlignment(
+                    @HorizontalAlignment int horizontalAlignment) {
                 mImpl.setHorizontalAlignment(
                         AlignmentProto.HorizontalAlignmentProp.newBuilder()
                                 .setValue(
@@ -2830,8 +2635,7 @@
              * Sets the width of this column. If not defined, this will size itself to fit all of
              * its children (i.e. a WrappedDimension).
              */
-            @NonNull
-            public Builder setWidth(@NonNull DimensionBuilders.ContainerDimension width) {
+            public @NonNull Builder setWidth(DimensionBuilders.@NonNull ContainerDimension width) {
                 mImpl.setWidth(width.toContainerDimensionProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(width.getFingerprint()).aggregateValueAsInt());
@@ -2842,8 +2646,8 @@
              * Sets the height of this column. If not defined, this will size itself to fit all of
              * its children (i.e. a WrappedDimension).
              */
-            @NonNull
-            public Builder setHeight(@NonNull DimensionBuilders.ContainerDimension height) {
+            public @NonNull Builder setHeight(
+                    DimensionBuilders.@NonNull ContainerDimension height) {
                 mImpl.setHeight(height.toContainerDimensionProto());
                 mFingerprint.recordPropertyUpdate(
                         4, checkNotNull(height.getFingerprint()).aggregateValueAsInt());
@@ -2851,8 +2655,7 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.Modifiers modifiers) {
+            public @NonNull Builder setModifiers(ModifiersBuilders.@NonNull Modifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -2860,8 +2663,7 @@
             }
 
             @Override
-            @NonNull
-            public Column build() {
+            public @NonNull Column build() {
                 return new Column(mImpl.build(), mFingerprint);
             }
         }
@@ -2879,7 +2681,7 @@
      */
     public static final class Row implements LayoutElement {
         private final LayoutElementProto.Row mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Row(LayoutElementProto.Row impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -2890,8 +2692,7 @@
          * Gets the list of child elements to place inside this {@link Row}. Intended for testing
          * purposes only.
          */
-        @NonNull
-        public List<LayoutElement> getContents() {
+        public @NonNull List<LayoutElement> getContents() {
             return Collections.unmodifiableList(
                     mImpl.getContentsList().stream()
                             .map(LayoutElementBuilders::layoutElementFromProto)
@@ -2903,8 +2704,7 @@
          * resulting height of the row. If not defined, defaults to VERTICAL_ALIGN_CENTER. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public VerticalAlignmentProp getVerticalAlignment() {
+        public @Nullable VerticalAlignmentProp getVerticalAlignment() {
             if (mImpl.hasVerticalAlignment()) {
                 return VerticalAlignmentProp.fromProto(mImpl.getVerticalAlignment());
             } else {
@@ -2916,8 +2716,7 @@
          * Gets the width of this row. If not defined, this will size itself to fit all of its
          * children (i.e. a WrappedDimension). Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.ContainerDimension getWidth() {
+        public DimensionBuilders.@Nullable ContainerDimension getWidth() {
             if (mImpl.hasWidth()) {
                 return DimensionBuilders.containerDimensionFromProto(mImpl.getWidth());
             } else {
@@ -2929,8 +2728,7 @@
          * Gets the height of this row. If not defined, this will size itself to fit all of its
          * children (i.e. a WrappedDimension). Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.ContainerDimension getHeight() {
+        public DimensionBuilders.@Nullable ContainerDimension getHeight() {
             if (mImpl.hasHeight()) {
                 return DimensionBuilders.containerDimensionFromProto(mImpl.getHeight());
             } else {
@@ -2942,8 +2740,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.Modifiers getModifiers() {
+        public ModifiersBuilders.@Nullable Modifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -2953,26 +2750,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Row fromProto(
-                @NonNull LayoutElementProto.Row proto, @Nullable Fingerprint fingerprint) {
+        static @NonNull Row fromProto(
+                LayoutElementProto.@NonNull Row proto, @Nullable Fingerprint fingerprint) {
             return new Row(proto, fingerprint);
         }
 
-        @NonNull
-        LayoutElementProto.Row toProto() {
+        LayoutElementProto.@NonNull Row toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.LayoutElement toLayoutElementProto() {
+        public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
             return LayoutElementProto.LayoutElement.newBuilder().setRow(mImpl).build();
         }
 
@@ -2985,8 +2778,7 @@
             public Builder() {}
 
             /** Adds one item to the list of child elements to place inside this {@link Row}. */
-            @NonNull
-            public Builder addContent(@NonNull LayoutElement content) {
+            public @NonNull Builder addContent(@NonNull LayoutElement content) {
                 mImpl.addContents(content.toLayoutElementProto());
                 mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));
                 return this;
@@ -2996,8 +2788,8 @@
              * Sets the vertical alignment of elements inside this row, if they are narrower than
              * the resulting height of the row. If not defined, defaults to VERTICAL_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setVerticalAlignment(@NonNull VerticalAlignmentProp verticalAlignment) {
+            public @NonNull Builder setVerticalAlignment(
+                    @NonNull VerticalAlignmentProp verticalAlignment) {
                 mImpl.setVerticalAlignment(verticalAlignment.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(verticalAlignment.getFingerprint()).aggregateValueAsInt());
@@ -3008,8 +2800,7 @@
              * Sets the vertical alignment of elements inside this row, if they are narrower than
              * the resulting height of the row. If not defined, defaults to VERTICAL_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setVerticalAlignment(@VerticalAlignment int verticalAlignment) {
+            public @NonNull Builder setVerticalAlignment(@VerticalAlignment int verticalAlignment) {
                 mImpl.setVerticalAlignment(
                         AlignmentProto.VerticalAlignmentProp.newBuilder()
                                 .setValue(
@@ -3023,8 +2814,7 @@
              * Sets the width of this row. If not defined, this will size itself to fit all of its
              * children (i.e. a WrappedDimension).
              */
-            @NonNull
-            public Builder setWidth(@NonNull DimensionBuilders.ContainerDimension width) {
+            public @NonNull Builder setWidth(DimensionBuilders.@NonNull ContainerDimension width) {
                 mImpl.setWidth(width.toContainerDimensionProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(width.getFingerprint()).aggregateValueAsInt());
@@ -3035,8 +2825,8 @@
              * Sets the height of this row. If not defined, this will size itself to fit all of its
              * children (i.e. a WrappedDimension).
              */
-            @NonNull
-            public Builder setHeight(@NonNull DimensionBuilders.ContainerDimension height) {
+            public @NonNull Builder setHeight(
+                    DimensionBuilders.@NonNull ContainerDimension height) {
                 mImpl.setHeight(height.toContainerDimensionProto());
                 mFingerprint.recordPropertyUpdate(
                         4, checkNotNull(height.getFingerprint()).aggregateValueAsInt());
@@ -3044,8 +2834,7 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.Modifiers modifiers) {
+            public @NonNull Builder setModifiers(ModifiersBuilders.@NonNull Modifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -3053,8 +2842,7 @@
             }
 
             @Override
-            @NonNull
-            public Row build() {
+            public @NonNull Row build() {
                 return new Row(mImpl.build(), mFingerprint);
             }
         }
@@ -3067,7 +2855,7 @@
      */
     public static final class Arc implements LayoutElement {
         private final LayoutElementProto.Arc mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Arc(LayoutElementProto.Arc impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -3075,8 +2863,7 @@
         }
 
         /** Gets contents of this container. Intended for testing purposes only. */
-        @NonNull
-        public List<ArcLayoutElement> getContents() {
+        public @NonNull List<ArcLayoutElement> getContents() {
             return Collections.unmodifiableList(
                     mImpl.getContentsList().stream()
                             .map(LayoutElementBuilders::arcLayoutElementFromProto)
@@ -3092,8 +2879,7 @@
          * sweep anti-clockwise (i.e. -90 degrees is equivalent to 270 degrees), and values >360
          * will be be placed at X mod 360 degrees. Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.DegreesProp getAnchorAngle() {
+        public DimensionBuilders.@Nullable DegreesProp getAnchorAngle() {
             if (mImpl.hasAnchorAngle()) {
                 return DimensionBuilders.DegreesProp.fromProto(mImpl.getAnchorAngle());
             } else {
@@ -3105,8 +2891,7 @@
          * Gets how to align the contents of this container relative to anchor_angle. If not
          * defined, defaults to ARC_ANCHOR_CENTER. Intended for testing purposes only.
          */
-        @Nullable
-        public ArcAnchorTypeProp getAnchorType() {
+        public @Nullable ArcAnchorTypeProp getAnchorType() {
             if (mImpl.hasAnchorType()) {
                 return ArcAnchorTypeProp.fromProto(mImpl.getAnchorType());
             } else {
@@ -3120,8 +2905,7 @@
          * should be drawn towards the inner or outer edge of the arc, or drawn in the center. If
          * not defined, defaults to VERTICAL_ALIGN_CENTER. Intended for testing purposes only.
          */
-        @Nullable
-        public VerticalAlignmentProp getVerticalAlign() {
+        public @Nullable VerticalAlignmentProp getVerticalAlign() {
             if (mImpl.hasVerticalAlign()) {
                 return VerticalAlignmentProp.fromProto(mImpl.getVerticalAlign());
             } else {
@@ -3133,8 +2917,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.Modifiers getModifiers() {
+        public ModifiersBuilders.@Nullable Modifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -3144,26 +2927,22 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Arc fromProto(
-                @NonNull LayoutElementProto.Arc proto, @Nullable Fingerprint fingerprint) {
+        static @NonNull Arc fromProto(
+                LayoutElementProto.@NonNull Arc proto, @Nullable Fingerprint fingerprint) {
             return new Arc(proto, fingerprint);
         }
 
-        @NonNull
-        LayoutElementProto.Arc toProto() {
+        LayoutElementProto.@NonNull Arc toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.LayoutElement toLayoutElementProto() {
+        public LayoutElementProto.@NonNull LayoutElement toLayoutElementProto() {
             return LayoutElementProto.LayoutElement.newBuilder().setArc(mImpl).build();
         }
 
@@ -3176,8 +2955,7 @@
             public Builder() {}
 
             /** Adds one item to contents of this container. */
-            @NonNull
-            public Builder addContent(@NonNull ArcLayoutElement content) {
+            public @NonNull Builder addContent(@NonNull ArcLayoutElement content) {
                 mImpl.addContents(content.toArcLayoutElementProto());
                 mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));
                 return this;
@@ -3192,8 +2970,8 @@
              * will sweep anti-clockwise (i.e. -90 degrees is equivalent to 270 degrees), and values
              * >360 will be be placed at X mod 360 degrees.
              */
-            @NonNull
-            public Builder setAnchorAngle(@NonNull DimensionBuilders.DegreesProp anchorAngle) {
+            public @NonNull Builder setAnchorAngle(
+                    DimensionBuilders.@NonNull DegreesProp anchorAngle) {
                 mImpl.setAnchorAngle(anchorAngle.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(anchorAngle.getFingerprint()).aggregateValueAsInt());
@@ -3204,8 +2982,7 @@
              * Sets how to align the contents of this container relative to anchor_angle. If not
              * defined, defaults to ARC_ANCHOR_CENTER.
              */
-            @NonNull
-            public Builder setAnchorType(@NonNull ArcAnchorTypeProp anchorType) {
+            public @NonNull Builder setAnchorType(@NonNull ArcAnchorTypeProp anchorType) {
                 mImpl.setAnchorType(anchorType.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(anchorType.getFingerprint()).aggregateValueAsInt());
@@ -3216,8 +2993,7 @@
              * Sets how to align the contents of this container relative to anchor_angle. If not
              * defined, defaults to ARC_ANCHOR_CENTER.
              */
-            @NonNull
-            public Builder setAnchorType(@ArcAnchorType int anchorType) {
+            public @NonNull Builder setAnchorType(@ArcAnchorType int anchorType) {
                 mImpl.setAnchorType(
                         AlignmentProto.ArcAnchorTypeProp.newBuilder()
                                 .setValue(AlignmentProto.ArcAnchorType.forNumber(anchorType)));
@@ -3231,8 +3007,7 @@
              * element should be drawn towards the inner or outer edge of the arc, or drawn in the
              * center. If not defined, defaults to VERTICAL_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setVerticalAlign(@NonNull VerticalAlignmentProp verticalAlign) {
+            public @NonNull Builder setVerticalAlign(@NonNull VerticalAlignmentProp verticalAlign) {
                 mImpl.setVerticalAlign(verticalAlign.toProto());
                 mFingerprint.recordPropertyUpdate(
                         4, checkNotNull(verticalAlign.getFingerprint()).aggregateValueAsInt());
@@ -3245,8 +3020,7 @@
              * element should be drawn towards the inner or outer edge of the arc, or drawn in the
              * center. If not defined, defaults to VERTICAL_ALIGN_CENTER.
              */
-            @NonNull
-            public Builder setVerticalAlign(@VerticalAlignment int verticalAlign) {
+            public @NonNull Builder setVerticalAlign(@VerticalAlignment int verticalAlign) {
                 mImpl.setVerticalAlign(
                         AlignmentProto.VerticalAlignmentProp.newBuilder()
                                 .setValue(
@@ -3256,8 +3030,7 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.Modifiers modifiers) {
+            public @NonNull Builder setModifiers(ModifiersBuilders.@NonNull Modifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -3265,8 +3038,7 @@
             }
 
             @Override
-            @NonNull
-            public Arc build() {
+            public @NonNull Arc build() {
                 return new Arc(mImpl.build(), mFingerprint);
             }
         }
@@ -3275,7 +3047,7 @@
     /** A text element that can be used in an {@link Arc}. */
     public static final class ArcText implements ArcLayoutElement {
         private final LayoutElementProto.ArcText mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         ArcText(LayoutElementProto.ArcText impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -3283,8 +3055,7 @@
         }
 
         /** Gets the text to render. Intended for testing purposes only. */
-        @Nullable
-        public TypeBuilders.StringProp getText() {
+        public TypeBuilders.@Nullable StringProp getText() {
             if (mImpl.hasText()) {
                 return TypeBuilders.StringProp.fromProto(mImpl.getText());
             } else {
@@ -3296,8 +3067,7 @@
          * Gets the style of font to use (size, bold etc). If not specified, defaults to the
          * platform's default body font. Intended for testing purposes only.
          */
-        @Nullable
-        public FontStyle getFontStyle() {
+        public @Nullable FontStyle getFontStyle() {
             if (mImpl.hasFontStyle()) {
                 return FontStyle.fromProto(mImpl.getFontStyle());
             } else {
@@ -3309,8 +3079,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.ArcModifiers getModifiers() {
+        public ModifiersBuilders.@Nullable ArcModifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.ArcModifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -3320,25 +3089,21 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static ArcText fromProto(@NonNull LayoutElementProto.ArcText proto) {
+        static @NonNull ArcText fromProto(LayoutElementProto.@NonNull ArcText proto) {
             return new ArcText(proto, null);
         }
 
-        @NonNull
-        LayoutElementProto.ArcText toProto() {
+        LayoutElementProto.@NonNull ArcText toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.ArcLayoutElement toArcLayoutElementProto() {
+        public LayoutElementProto.@NonNull ArcLayoutElement toArcLayoutElementProto() {
             return LayoutElementProto.ArcLayoutElement.newBuilder().setText(mImpl).build();
         }
 
@@ -3351,8 +3116,7 @@
             public Builder() {}
 
             /** Sets the text to render. */
-            @NonNull
-            public Builder setText(@NonNull TypeBuilders.StringProp text) {
+            public @NonNull Builder setText(TypeBuilders.@NonNull StringProp text) {
                 mImpl.setText(text.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(text.getFingerprint()).aggregateValueAsInt());
@@ -3360,8 +3124,7 @@
             }
 
             /** Sets the text to render. */
-            @NonNull
-            public Builder setText(@NonNull String text) {
+            public @NonNull Builder setText(@NonNull String text) {
                 mImpl.setText(TypesProto.StringProp.newBuilder().setValue(text));
                 mFingerprint.recordPropertyUpdate(1, text.hashCode());
                 return this;
@@ -3371,8 +3134,7 @@
              * Sets the style of font to use (size, bold etc). If not specified, defaults to the
              * platform's default body font.
              */
-            @NonNull
-            public Builder setFontStyle(@NonNull FontStyle fontStyle) {
+            public @NonNull Builder setFontStyle(@NonNull FontStyle fontStyle) {
                 mImpl.setFontStyle(fontStyle.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(fontStyle.getFingerprint()).aggregateValueAsInt());
@@ -3380,8 +3142,8 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.ArcModifiers modifiers) {
+            public @NonNull Builder setModifiers(
+                    ModifiersBuilders.@NonNull ArcModifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -3389,8 +3151,7 @@
             }
 
             @Override
-            @NonNull
-            public ArcText build() {
+            public @NonNull ArcText build() {
                 return new ArcText(mImpl.build(), mFingerprint);
             }
         }
@@ -3399,7 +3160,7 @@
     /** A line that can be used in an {@link Arc} and renders as a round progress bar. */
     public static final class ArcLine implements ArcLayoutElement {
         private final LayoutElementProto.ArcLine mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         ArcLine(LayoutElementProto.ArcLine impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -3410,8 +3171,7 @@
          * Gets the length of this line, in degrees. If not defined, defaults to 0. Intended for
          * testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.DegreesProp getLength() {
+        public DimensionBuilders.@Nullable DegreesProp getLength() {
             if (mImpl.hasLength()) {
                 return DimensionBuilders.DegreesProp.fromProto(mImpl.getLength());
             } else {
@@ -3423,8 +3183,7 @@
          * Gets the thickness of this line. If not defined, defaults to 0. Intended for testing
          * purposes only.
          */
-        @Nullable
-        public DimensionBuilders.DpProp getThickness() {
+        public DimensionBuilders.@Nullable DpProp getThickness() {
             if (mImpl.hasThickness()) {
                 return DimensionBuilders.DpProp.fromProto(mImpl.getThickness());
             } else {
@@ -3433,8 +3192,7 @@
         }
 
         /** Gets the color of this line. Intended for testing purposes only. */
-        @Nullable
-        public ColorBuilders.ColorProp getColor() {
+        public ColorBuilders.@Nullable ColorProp getColor() {
             if (mImpl.hasColor()) {
                 return ColorBuilders.ColorProp.fromProto(mImpl.getColor());
             } else {
@@ -3446,8 +3204,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.ArcModifiers getModifiers() {
+        public ModifiersBuilders.@Nullable ArcModifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.ArcModifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -3457,25 +3214,21 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static ArcLine fromProto(@NonNull LayoutElementProto.ArcLine proto) {
+        static @NonNull ArcLine fromProto(LayoutElementProto.@NonNull ArcLine proto) {
             return new ArcLine(proto, null);
         }
 
-        @NonNull
-        LayoutElementProto.ArcLine toProto() {
+        LayoutElementProto.@NonNull ArcLine toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.ArcLayoutElement toArcLayoutElementProto() {
+        public LayoutElementProto.@NonNull ArcLayoutElement toArcLayoutElementProto() {
             return LayoutElementProto.ArcLayoutElement.newBuilder().setLine(mImpl).build();
         }
 
@@ -3488,8 +3241,7 @@
             public Builder() {}
 
             /** Sets the length of this line, in degrees. If not defined, defaults to 0. */
-            @NonNull
-            public Builder setLength(@NonNull DimensionBuilders.DegreesProp length) {
+            public @NonNull Builder setLength(DimensionBuilders.@NonNull DegreesProp length) {
                 mImpl.setLength(length.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(length.getFingerprint()).aggregateValueAsInt());
@@ -3497,8 +3249,7 @@
             }
 
             /** Sets the thickness of this line. If not defined, defaults to 0. */
-            @NonNull
-            public Builder setThickness(@NonNull DimensionBuilders.DpProp thickness) {
+            public @NonNull Builder setThickness(DimensionBuilders.@NonNull DpProp thickness) {
                 mImpl.setThickness(thickness.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(thickness.getFingerprint()).aggregateValueAsInt());
@@ -3506,8 +3257,7 @@
             }
 
             /** Sets the color of this line. */
-            @NonNull
-            public Builder setColor(@NonNull ColorBuilders.ColorProp color) {
+            public @NonNull Builder setColor(ColorBuilders.@NonNull ColorProp color) {
                 mImpl.setColor(color.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(color.getFingerprint()).aggregateValueAsInt());
@@ -3515,8 +3265,8 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.ArcModifiers modifiers) {
+            public @NonNull Builder setModifiers(
+                    ModifiersBuilders.@NonNull ArcModifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         4, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -3524,8 +3274,7 @@
             }
 
             @Override
-            @NonNull
-            public ArcLine build() {
+            public @NonNull ArcLine build() {
                 return new ArcLine(mImpl.build(), mFingerprint);
             }
         }
@@ -3534,7 +3283,7 @@
     /** A simple spacer used to provide padding between adjacent elements in an {@link Arc}. */
     public static final class ArcSpacer implements ArcLayoutElement {
         private final LayoutElementProto.ArcSpacer mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         ArcSpacer(LayoutElementProto.ArcSpacer impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -3545,8 +3294,7 @@
          * Gets the length of this spacer, in degrees. If not defined, defaults to 0. Intended for
          * testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.DegreesProp getLength() {
+        public DimensionBuilders.@Nullable DegreesProp getLength() {
             if (mImpl.hasLength()) {
                 return DimensionBuilders.DegreesProp.fromProto(mImpl.getLength());
             } else {
@@ -3558,8 +3306,7 @@
          * Gets the thickness of this spacer, in DP. If not defined, defaults to 0. Intended for
          * testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.DpProp getThickness() {
+        public DimensionBuilders.@Nullable DpProp getThickness() {
             if (mImpl.hasThickness()) {
                 return DimensionBuilders.DpProp.fromProto(mImpl.getThickness());
             } else {
@@ -3571,8 +3318,7 @@
          * Gets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. Intended
          * for testing purposes only.
          */
-        @Nullable
-        public ModifiersBuilders.ArcModifiers getModifiers() {
+        public ModifiersBuilders.@Nullable ArcModifiers getModifiers() {
             if (mImpl.hasModifiers()) {
                 return ModifiersBuilders.ArcModifiers.fromProto(mImpl.getModifiers());
             } else {
@@ -3582,25 +3328,21 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static ArcSpacer fromProto(@NonNull LayoutElementProto.ArcSpacer proto) {
+        static @NonNull ArcSpacer fromProto(LayoutElementProto.@NonNull ArcSpacer proto) {
             return new ArcSpacer(proto, null);
         }
 
-        @NonNull
-        LayoutElementProto.ArcSpacer toProto() {
+        LayoutElementProto.@NonNull ArcSpacer toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.ArcLayoutElement toArcLayoutElementProto() {
+        public LayoutElementProto.@NonNull ArcLayoutElement toArcLayoutElementProto() {
             return LayoutElementProto.ArcLayoutElement.newBuilder().setSpacer(mImpl).build();
         }
 
@@ -3613,8 +3355,7 @@
             public Builder() {}
 
             /** Sets the length of this spacer, in degrees. If not defined, defaults to 0. */
-            @NonNull
-            public Builder setLength(@NonNull DimensionBuilders.DegreesProp length) {
+            public @NonNull Builder setLength(DimensionBuilders.@NonNull DegreesProp length) {
                 mImpl.setLength(length.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(length.getFingerprint()).aggregateValueAsInt());
@@ -3622,8 +3363,7 @@
             }
 
             /** Sets the thickness of this spacer, in DP. If not defined, defaults to 0. */
-            @NonNull
-            public Builder setThickness(@NonNull DimensionBuilders.DpProp thickness) {
+            public @NonNull Builder setThickness(DimensionBuilders.@NonNull DpProp thickness) {
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(thickness.getFingerprint()).aggregateValueAsInt());
                 mImpl.setThickness(thickness.toProto());
@@ -3631,8 +3371,8 @@
             }
 
             /** Sets {@link androidx.wear.tiles.ModifiersBuilders.Modifiers} for this element. */
-            @NonNull
-            public Builder setModifiers(@NonNull ModifiersBuilders.ArcModifiers modifiers) {
+            public @NonNull Builder setModifiers(
+                    ModifiersBuilders.@NonNull ArcModifiers modifiers) {
                 mImpl.setModifiers(modifiers.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());
@@ -3640,8 +3380,7 @@
             }
 
             @Override
-            @NonNull
-            public ArcSpacer build() {
+            public @NonNull ArcSpacer build() {
                 return new ArcSpacer(mImpl.build(), mFingerprint);
             }
         }
@@ -3650,7 +3389,7 @@
     /** A container that allows a standard {@link LayoutElement} to be added to an {@link Arc}. */
     public static final class ArcAdapter implements ArcLayoutElement {
         private final LayoutElementProto.ArcAdapter mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         ArcAdapter(LayoutElementProto.ArcAdapter impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -3658,8 +3397,7 @@
         }
 
         /** Gets the element to adapt to an {@link Arc}. Intended for testing purposes only. */
-        @Nullable
-        public LayoutElement getContent() {
+        public @Nullable LayoutElement getContent() {
             if (mImpl.hasContent()) {
                 return LayoutElementBuilders.layoutElementFromProto(mImpl.getContent());
             } else {
@@ -3676,8 +3414,7 @@
          * will not be rotated. If not defined, defaults to false. Intended for testing purposes
          * only.
          */
-        @Nullable
-        public TypeBuilders.BoolProp getRotateContents() {
+        public TypeBuilders.@Nullable BoolProp getRotateContents() {
             if (mImpl.hasRotateContents()) {
                 return TypeBuilders.BoolProp.fromProto(mImpl.getRotateContents());
             } else {
@@ -3687,25 +3424,21 @@
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static ArcAdapter fromProto(@NonNull LayoutElementProto.ArcAdapter proto) {
+        static @NonNull ArcAdapter fromProto(LayoutElementProto.@NonNull ArcAdapter proto) {
             return new ArcAdapter(proto, null);
         }
 
-        @NonNull
-        LayoutElementProto.ArcAdapter toProto() {
+        LayoutElementProto.@NonNull ArcAdapter toProto() {
             return mImpl;
         }
 
         @Override
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.ArcLayoutElement toArcLayoutElementProto() {
+        public LayoutElementProto.@NonNull ArcLayoutElement toArcLayoutElementProto() {
             return LayoutElementProto.ArcLayoutElement.newBuilder().setAdapter(mImpl).build();
         }
 
@@ -3718,8 +3451,7 @@
             public Builder() {}
 
             /** Sets the element to adapt to an {@link Arc}. */
-            @NonNull
-            public Builder setContent(@NonNull LayoutElement content) {
+            public @NonNull Builder setContent(@NonNull LayoutElement content) {
                 mImpl.setContent(content.toLayoutElementProto());
                 mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));
                 return this;
@@ -3733,8 +3465,8 @@
              * degrees. If rotate_contents = false, the image will be placed at the 3 o clock
              * position, but itself will not be rotated. If not defined, defaults to false.
              */
-            @NonNull
-            public Builder setRotateContents(@NonNull TypeBuilders.BoolProp rotateContents) {
+            public @NonNull Builder setRotateContents(
+                    TypeBuilders.@NonNull BoolProp rotateContents) {
                 mImpl.setRotateContents(rotateContents.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(rotateContents.getFingerprint()).aggregateValueAsInt());
@@ -3750,16 +3482,14 @@
              * position, but itself will not be rotated. If not defined, defaults to false.
              */
             @SuppressLint("MissingGetterMatchingBuilder")
-            @NonNull
-            public Builder setRotateContents(boolean rotateContents) {
+            public @NonNull Builder setRotateContents(boolean rotateContents) {
                 mImpl.setRotateContents(TypesProto.BoolProp.newBuilder().setValue(rotateContents));
                 mFingerprint.recordPropertyUpdate(2, Boolean.hashCode(rotateContents));
                 return this;
             }
 
             @Override
-            @NonNull
-            public ArcAdapter build() {
+            public @NonNull ArcAdapter build() {
                 return new ArcAdapter(mImpl.build(), mFingerprint);
             }
         }
@@ -3772,29 +3502,25 @@
     public interface LayoutElement {
         /** Get the protocol buffer representation of this object. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        LayoutElementProto.LayoutElement toLayoutElementProto();
+        LayoutElementProto.@NonNull LayoutElement toLayoutElementProto();
 
         /** Get the fingerprint for this object or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        Fingerprint getFingerprint();
+        @Nullable Fingerprint getFingerprint();
 
         /** Builder to create {@link LayoutElement} objects. */
         @SuppressLint("StaticFinalBuilder")
         interface Builder {
 
             /** Builds an instance with values accumulated in this Builder. */
-            @NonNull
-            LayoutElement build();
+            @NonNull LayoutElement build();
         }
     }
 
     /** Creates a new wrapper instance from the proto. */
     @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static LayoutElement layoutElementFromProto(
-            @NonNull LayoutElementProto.LayoutElement proto, @Nullable Fingerprint fingerprint) {
+    public static @NonNull LayoutElement layoutElementFromProto(
+            LayoutElementProto.@NonNull LayoutElement proto, @Nullable Fingerprint fingerprint) {
         if (proto.hasColumn()) {
             return Column.fromProto(proto.getColumn(), fingerprint);
         }
@@ -3822,8 +3548,8 @@
         throw new IllegalStateException("Proto was not a recognised instance of LayoutElement");
     }
 
-    @NonNull
-    static LayoutElement layoutElementFromProto(@NonNull LayoutElementProto.LayoutElement proto) {
+    static @NonNull LayoutElement layoutElementFromProto(
+            LayoutElementProto.@NonNull LayoutElement proto) {
         return layoutElementFromProto(proto, null);
     }
 
@@ -3834,27 +3560,23 @@
     public interface ArcLayoutElement {
         /** Get the protocol buffer representation of this object. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        LayoutElementProto.ArcLayoutElement toArcLayoutElementProto();
+        LayoutElementProto.@NonNull ArcLayoutElement toArcLayoutElementProto();
 
         /** Get the fingerprint for this object or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        Fingerprint getFingerprint();
+        @Nullable Fingerprint getFingerprint();
 
         /** Builder to create {@link ArcLayoutElement} objects. */
         @SuppressLint("StaticFinalBuilder")
         interface Builder {
 
             /** Builds an instance with values accumulated in this Builder. */
-            @NonNull
-            ArcLayoutElement build();
+            @NonNull ArcLayoutElement build();
         }
     }
 
-    @NonNull
-    static ArcLayoutElement arcLayoutElementFromProto(
-            @NonNull LayoutElementProto.ArcLayoutElement proto) {
+    static @NonNull ArcLayoutElement arcLayoutElementFromProto(
+            LayoutElementProto.@NonNull ArcLayoutElement proto) {
         if (proto.hasText()) {
             return ArcText.fromProto(proto.getText());
         }
@@ -3879,8 +3601,7 @@
         }
 
         /** Gets the root element in the layout. Intended for testing purposes only. */
-        @Nullable
-        public LayoutElement getRoot() {
+        public @Nullable LayoutElement getRoot() {
             if (mImpl.hasRoot()) {
                 return LayoutElementBuilders.layoutElementFromProto(mImpl.getRoot());
             } else {
@@ -3889,35 +3610,30 @@
         }
 
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static Layout fromProto(@NonNull LayoutElementProto.Layout proto) {
+        public static @NonNull Layout fromProto(LayoutElementProto.@NonNull Layout proto) {
             return new Layout(proto);
         }
 
         /** Creates a {@link Layout} object containing the given layout element. */
-        @NonNull
-        public static Layout fromLayoutElement(@NonNull LayoutElement layoutElement) {
+        public static @NonNull Layout fromLayoutElement(@NonNull LayoutElement layoutElement) {
             return new Builder().setRoot(layoutElement).build();
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public LayoutElementProto.Layout toProto() {
+        public LayoutElementProto.@NonNull Layout toProto() {
             return mImpl;
         }
 
         /** Converts to byte array representation. */
         @TilesExperimental
-        @NonNull
-        public byte[] toByteArray() {
+        public byte @NonNull [] toByteArray() {
             return mImpl.toByteArray();
         }
 
         /** Converts from byte array representation. */
         @TilesExperimental
-        @Nullable
-        public static Layout fromByteArray(@NonNull byte[] byteArray) {
+        public static @Nullable Layout fromByteArray(byte @NonNull [] byteArray) {
             try {
                 return fromProto(LayoutElementProto.Layout.parseFrom(byteArray));
             } catch (InvalidProtocolBufferException e) {
@@ -3933,10 +3649,9 @@
             public Builder() {}
 
             /** Sets the root element in the layout. */
-            @NonNull
-            public Builder setRoot(@NonNull LayoutElement root) {
+            public @NonNull Builder setRoot(@NonNull LayoutElement root) {
                 mImpl.setRoot(root.toLayoutElementProto());
-                @Nullable Fingerprint fingerprint = root.getFingerprint();
+                Fingerprint fingerprint = root.getFingerprint();
                 if (fingerprint != null) {
                     mImpl.setFingerprint(
                             TreeFingerprint.newBuilder().setRoot(fingerprintToProto(fingerprint)));
@@ -3964,8 +3679,7 @@
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public Layout build() {
+            public @NonNull Layout build() {
                 return Layout.fromProto(mImpl.build());
             }
         }
@@ -3978,101 +3692,90 @@
         private FontStyles() {}
 
         private static boolean isLargeScreen(
-                @NonNull DeviceParametersBuilders.DeviceParameters deviceParameters) {
+                DeviceParametersBuilders.@NonNull DeviceParameters deviceParameters) {
             return deviceParameters.getScreenWidthDp() >= LARGE_SCREEN_WIDTH_DP;
         }
 
         /** Font style for large display text. */
-        @NonNull
-        public static FontStyle.Builder display1(
-                @NonNull DeviceParametersBuilders.DeviceParameters deviceParameters) {
+        public static FontStyle.@NonNull Builder display1(
+                DeviceParametersBuilders.@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 54 : 50));
         }
 
         /** Font style for medium display text. */
-        @NonNull
-        public static FontStyle.Builder display2(
-                @NonNull DeviceParametersBuilders.DeviceParameters deviceParameters) {
+        public static FontStyle.@NonNull Builder display2(
+                DeviceParametersBuilders.@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 44 : 40));
         }
 
         /** Font style for small display text. */
-        @NonNull
-        public static FontStyle.Builder display3(
-                @NonNull DeviceParametersBuilders.DeviceParameters deviceParameters) {
+        public static FontStyle.@NonNull Builder display3(
+                DeviceParametersBuilders.@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 34 : 30));
         }
 
         /** Font style for large title text. */
-        @NonNull
-        public static FontStyle.Builder title1(
-                @NonNull DeviceParametersBuilders.DeviceParameters deviceParameters) {
+        public static FontStyle.@NonNull Builder title1(
+                DeviceParametersBuilders.@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 26 : 24));
         }
 
         /** Font style for medium title text. */
-        @NonNull
-        public static FontStyle.Builder title2(
-                @NonNull DeviceParametersBuilders.DeviceParameters deviceParameters) {
+        public static FontStyle.@NonNull Builder title2(
+                DeviceParametersBuilders.@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 22 : 20));
         }
 
         /** Font style for small title text. */
-        @NonNull
-        public static FontStyle.Builder title3(
-                @NonNull DeviceParametersBuilders.DeviceParameters deviceParameters) {
+        public static FontStyle.@NonNull Builder title3(
+                DeviceParametersBuilders.@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 18 : 16));
         }
 
         /** Font style for large body text. */
-        @NonNull
-        public static FontStyle.Builder body1(
-                @NonNull DeviceParametersBuilders.DeviceParameters deviceParameters) {
+        public static FontStyle.@NonNull Builder body1(
+                DeviceParametersBuilders.@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 18 : 16));
         }
 
         /** Font style for medium body text. */
-        @NonNull
-        public static FontStyle.Builder body2(
-                @NonNull DeviceParametersBuilders.DeviceParameters deviceParameters) {
+        public static FontStyle.@NonNull Builder body2(
+                DeviceParametersBuilders.@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 16 : 14));
         }
 
         /** Font style for button text. */
-        @NonNull
-        public static FontStyle.Builder button(
-                @NonNull DeviceParametersBuilders.DeviceParameters deviceParameters) {
+        public static FontStyle.@NonNull Builder button(
+                DeviceParametersBuilders.@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setWeight(FONT_WEIGHT_BOLD)
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 16 : 14));
         }
 
         /** Font style for large caption text. */
-        @NonNull
-        public static FontStyle.Builder caption1(
-                @NonNull DeviceParametersBuilders.DeviceParameters deviceParameters) {
+        public static FontStyle.@NonNull Builder caption1(
+                DeviceParametersBuilders.@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 16 : 14));
         }
 
         /** Font style for medium caption text. */
-        @NonNull
-        public static FontStyle.Builder caption2(
-                @NonNull DeviceParametersBuilders.DeviceParameters deviceParameters) {
+        public static FontStyle.@NonNull Builder caption2(
+                DeviceParametersBuilders.@NonNull DeviceParameters deviceParameters) {
             return new FontStyle.Builder()
                     .setSize(DimensionBuilders.sp(isLargeScreen(deviceParameters) ? 14 : 12));
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ModifiersBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ModifiersBuilders.java
index a92e6a1..c697106 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ModifiersBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ModifiersBuilders.java
@@ -20,8 +20,6 @@
 
 import android.annotation.SuppressLint;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
@@ -29,6 +27,9 @@
 import androidx.wear.protolayout.proto.TypesProto;
 import androidx.wear.protolayout.protobuf.ByteString;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.Arrays;
 
 /**
@@ -46,7 +47,7 @@
      */
     public static final class Clickable {
         private final ModifiersProto.Clickable mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Clickable(ModifiersProto.Clickable impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -54,8 +55,7 @@
         }
 
         /** Gets the ID associated with this action. Intended for testing purposes only. */
-        @NonNull
-        public String getId() {
+        public @NonNull String getId() {
             return mImpl.getId();
         }
 
@@ -63,8 +63,7 @@
          * Gets the action to perform when the element this modifier is attached to is clicked.
          * Intended for testing purposes only.
          */
-        @Nullable
-        public ActionBuilders.Action getOnClick() {
+        public ActionBuilders.@Nullable Action getOnClick() {
             if (mImpl.hasOnClick()) {
                 return ActionBuilders.actionFromProto(mImpl.getOnClick());
             } else {
@@ -74,20 +73,17 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Clickable fromProto(@NonNull ModifiersProto.Clickable proto) {
+        static @NonNull Clickable fromProto(ModifiersProto.@NonNull Clickable proto) {
             return new Clickable(proto, null);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ModifiersProto.Clickable toProto() {
+        public ModifiersProto.@NonNull Clickable toProto() {
             return mImpl;
         }
 
@@ -100,8 +96,7 @@
             public Builder() {}
 
             /** Sets the ID associated with this action. */
-            @NonNull
-            public Builder setId(@NonNull String id) {
+            public @NonNull Builder setId(@NonNull String id) {
                 mImpl.setId(id);
                 mFingerprint.recordPropertyUpdate(1, id.hashCode());
                 return this;
@@ -110,8 +105,7 @@
             /**
              * Sets the action to perform when the element this modifier is attached to is clicked.
              */
-            @NonNull
-            public Builder setOnClick(@NonNull ActionBuilders.Action onClick) {
+            public @NonNull Builder setOnClick(ActionBuilders.@NonNull Action onClick) {
                 mImpl.setOnClick(onClick.toActionProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(onClick.getFingerprint()).aggregateValueAsInt());
@@ -119,8 +113,7 @@
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public Clickable build() {
+            public @NonNull Clickable build() {
                 return new Clickable(mImpl.build(), mFingerprint);
             }
         }
@@ -133,7 +126,7 @@
      */
     public static final class Semantics {
         private final ModifiersProto.Semantics mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Semantics(ModifiersProto.Semantics impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -144,25 +137,21 @@
          * Gets the content description associated with this element. This will be dictated when the
          * element is focused by the screen reader. Intended for testing purposes only.
          */
-        @NonNull
-        public String getContentDescription() {
+        public @NonNull String getContentDescription() {
             return mImpl.getObsoleteContentDescription();
         }
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Semantics fromProto(@NonNull ModifiersProto.Semantics proto) {
+        static @NonNull Semantics fromProto(ModifiersProto.@NonNull Semantics proto) {
             return new Semantics(proto, null);
         }
 
-        @NonNull
-        ModifiersProto.Semantics toProto() {
+        ModifiersProto.@NonNull Semantics toProto() {
             return mImpl;
         }
 
@@ -178,18 +167,16 @@
              * Sets the content description associated with this element. This will be dictated when
              * the element is focused by the screen reader.
              */
-            @NonNull
             @SuppressWarnings(
                     "deprecation") // Updating a deprecated field for backward compatibility
-            public Builder setContentDescription(@NonNull String contentDescription) {
+            public @NonNull Builder setContentDescription(@NonNull String contentDescription) {
                 mImpl.setObsoleteContentDescription(contentDescription);
                 mFingerprint.recordPropertyUpdate(4, contentDescription.hashCode());
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public Semantics build() {
+            public @NonNull Semantics build() {
                 return new Semantics(mImpl.build(), mFingerprint);
             }
         }
@@ -198,7 +185,7 @@
     /** A modifier to apply padding around an element. */
     public static final class Padding {
         private final ModifiersProto.Padding mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Padding(ModifiersProto.Padding impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -209,8 +196,7 @@
          * Gets the padding on the end of the content, depending on the layout direction, in DP and
          * the value of "rtl_aware". Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.DpProp getEnd() {
+        public DimensionBuilders.@Nullable DpProp getEnd() {
             if (mImpl.hasEnd()) {
                 return DimensionBuilders.DpProp.fromProto(mImpl.getEnd());
             } else {
@@ -222,8 +208,7 @@
          * Gets the padding on the start of the content, depending on the layout direction, in DP
          * and the value of "rtl_aware". Intended for testing purposes only.
          */
-        @Nullable
-        public DimensionBuilders.DpProp getStart() {
+        public DimensionBuilders.@Nullable DpProp getStart() {
             if (mImpl.hasStart()) {
                 return DimensionBuilders.DpProp.fromProto(mImpl.getStart());
             } else {
@@ -232,8 +217,7 @@
         }
 
         /** Gets the padding at the top, in DP. Intended for testing purposes only. */
-        @Nullable
-        public DimensionBuilders.DpProp getTop() {
+        public DimensionBuilders.@Nullable DpProp getTop() {
             if (mImpl.hasTop()) {
                 return DimensionBuilders.DpProp.fromProto(mImpl.getTop());
             } else {
@@ -242,8 +226,7 @@
         }
 
         /** Gets the padding at the bottom, in DP. Intended for testing purposes only. */
-        @Nullable
-        public DimensionBuilders.DpProp getBottom() {
+        public DimensionBuilders.@Nullable DpProp getBottom() {
             if (mImpl.hasBottom()) {
                 return DimensionBuilders.DpProp.fromProto(mImpl.getBottom());
             } else {
@@ -257,8 +240,7 @@
          * of the container if the device is using an RTL locale). If false, start/end will always
          * map to left/right, accordingly. Intended for testing purposes only.
          */
-        @Nullable
-        public TypeBuilders.BoolProp getRtlAware() {
+        public TypeBuilders.@Nullable BoolProp getRtlAware() {
             if (mImpl.hasRtlAware()) {
                 return TypeBuilders.BoolProp.fromProto(mImpl.getRtlAware());
             } else {
@@ -268,18 +250,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Padding fromProto(@NonNull ModifiersProto.Padding proto) {
+        static @NonNull Padding fromProto(ModifiersProto.@NonNull Padding proto) {
             return new Padding(proto, null);
         }
 
-        @NonNull
-        ModifiersProto.Padding toProto() {
+        ModifiersProto.@NonNull Padding toProto() {
             return mImpl;
         }
 
@@ -295,8 +274,7 @@
              * Sets the padding on the end of the content, depending on the layout direction, in DP
              * and the value of "rtl_aware".
              */
-            @NonNull
-            public Builder setEnd(@NonNull DimensionBuilders.DpProp end) {
+            public @NonNull Builder setEnd(DimensionBuilders.@NonNull DpProp end) {
                 mImpl.setEnd(end.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(end.getFingerprint()).aggregateValueAsInt());
@@ -307,8 +285,7 @@
              * Sets the padding on the start of the content, depending on the layout direction, in
              * DP and the value of "rtl_aware".
              */
-            @NonNull
-            public Builder setStart(@NonNull DimensionBuilders.DpProp start) {
+            public @NonNull Builder setStart(DimensionBuilders.@NonNull DpProp start) {
                 mImpl.setStart(start.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(start.getFingerprint()).aggregateValueAsInt());
@@ -316,8 +293,7 @@
             }
 
             /** Sets the padding at the top, in DP. */
-            @NonNull
-            public Builder setTop(@NonNull DimensionBuilders.DpProp top) {
+            public @NonNull Builder setTop(DimensionBuilders.@NonNull DpProp top) {
                 mImpl.setTop(top.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(top.getFingerprint()).aggregateValueAsInt());
@@ -325,8 +301,7 @@
             }
 
             /** Sets the padding at the bottom, in DP. */
-            @NonNull
-            public Builder setBottom(@NonNull DimensionBuilders.DpProp bottom) {
+            public @NonNull Builder setBottom(DimensionBuilders.@NonNull DpProp bottom) {
                 mImpl.setBottom(bottom.toProto());
                 mFingerprint.recordPropertyUpdate(
                         4, checkNotNull(bottom.getFingerprint()).aggregateValueAsInt());
@@ -339,8 +314,7 @@
              * side of the container if the device is using an RTL locale). If false, start/end will
              * always map to left/right, accordingly.
              */
-            @NonNull
-            public Builder setRtlAware(@NonNull TypeBuilders.BoolProp rtlAware) {
+            public @NonNull Builder setRtlAware(TypeBuilders.@NonNull BoolProp rtlAware) {
                 mImpl.setRtlAware(rtlAware.toProto());
                 mFingerprint.recordPropertyUpdate(
                         5, checkNotNull(rtlAware.getFingerprint()).aggregateValueAsInt());
@@ -354,23 +328,20 @@
              * always map to left/right, accordingly.
              */
             @SuppressLint("MissingGetterMatchingBuilder")
-            @NonNull
-            public Builder setRtlAware(boolean rtlAware) {
+            public @NonNull Builder setRtlAware(boolean rtlAware) {
                 mImpl.setRtlAware(TypesProto.BoolProp.newBuilder().setValue(rtlAware));
                 mFingerprint.recordPropertyUpdate(5, Boolean.hashCode(rtlAware));
                 return this;
             }
 
             /** Sets the padding for all sides of the content, in DP. */
-            @NonNull
             @SuppressLint("MissingGetterMatchingBuilder")
-            public Builder setAll(@NonNull DimensionBuilders.DpProp value) {
+            public @NonNull Builder setAll(DimensionBuilders.@NonNull DpProp value) {
                 return setStart(value).setEnd(value).setTop(value).setBottom(value);
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public Padding build() {
+            public @NonNull Padding build() {
                 return new Padding(mImpl.build(), mFingerprint);
             }
         }
@@ -379,7 +350,7 @@
     /** A modifier to apply a border around an element. */
     public static final class Border {
         private final ModifiersProto.Border mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Border(ModifiersProto.Border impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -387,8 +358,7 @@
         }
 
         /** Gets the width of the border, in DP. Intended for testing purposes only. */
-        @Nullable
-        public DimensionBuilders.DpProp getWidth() {
+        public DimensionBuilders.@Nullable DpProp getWidth() {
             if (mImpl.hasWidth()) {
                 return DimensionBuilders.DpProp.fromProto(mImpl.getWidth());
             } else {
@@ -397,8 +367,7 @@
         }
 
         /** Gets the color of the border. Intended for testing purposes only. */
-        @Nullable
-        public ColorBuilders.ColorProp getColor() {
+        public ColorBuilders.@Nullable ColorProp getColor() {
             if (mImpl.hasColor()) {
                 return ColorBuilders.ColorProp.fromProto(mImpl.getColor());
             } else {
@@ -408,18 +377,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Border fromProto(@NonNull ModifiersProto.Border proto) {
+        static @NonNull Border fromProto(ModifiersProto.@NonNull Border proto) {
             return new Border(proto, null);
         }
 
-        @NonNull
-        ModifiersProto.Border toProto() {
+        ModifiersProto.@NonNull Border toProto() {
             return mImpl;
         }
 
@@ -431,8 +397,7 @@
             public Builder() {}
 
             /** Sets the width of the border, in DP. */
-            @NonNull
-            public Builder setWidth(@NonNull DimensionBuilders.DpProp width) {
+            public @NonNull Builder setWidth(DimensionBuilders.@NonNull DpProp width) {
                 mImpl.setWidth(width.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(width.getFingerprint()).aggregateValueAsInt());
@@ -440,8 +405,7 @@
             }
 
             /** Sets the color of the border. */
-            @NonNull
-            public Builder setColor(@NonNull ColorBuilders.ColorProp color) {
+            public @NonNull Builder setColor(ColorBuilders.@NonNull ColorProp color) {
                 mImpl.setColor(color.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(color.getFingerprint()).aggregateValueAsInt());
@@ -449,8 +413,7 @@
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public Border build() {
+            public @NonNull Border build() {
                 return new Border(mImpl.build(), mFingerprint);
             }
         }
@@ -459,7 +422,7 @@
     /** The corner of a {@link androidx.wear.tiles.LayoutElementBuilders.Box} element. */
     public static final class Corner {
         private final ModifiersProto.Corner mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Corner(ModifiersProto.Corner impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -467,8 +430,7 @@
         }
 
         /** Gets the radius of the corner in DP. Intended for testing purposes only. */
-        @Nullable
-        public DimensionBuilders.DpProp getRadius() {
+        public DimensionBuilders.@Nullable DpProp getRadius() {
             if (mImpl.hasRadius()) {
                 return DimensionBuilders.DpProp.fromProto(mImpl.getRadius());
             } else {
@@ -478,18 +440,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Corner fromProto(@NonNull ModifiersProto.Corner proto) {
+        static @NonNull Corner fromProto(ModifiersProto.@NonNull Corner proto) {
             return new Corner(proto, null);
         }
 
-        @NonNull
-        ModifiersProto.Corner toProto() {
+        ModifiersProto.@NonNull Corner toProto() {
             return mImpl;
         }
 
@@ -501,8 +460,7 @@
             public Builder() {}
 
             /** Sets the radius of the corner in DP. */
-            @NonNull
-            public Builder setRadius(@NonNull DimensionBuilders.DpProp radius) {
+            public @NonNull Builder setRadius(DimensionBuilders.@NonNull DpProp radius) {
                 mImpl.setRadius(radius.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(radius.getFingerprint()).aggregateValueAsInt());
@@ -510,8 +468,7 @@
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public Corner build() {
+            public @NonNull Corner build() {
                 return new Corner(mImpl.build(), mFingerprint);
             }
         }
@@ -520,7 +477,7 @@
     /** A modifier to apply a background to an element. */
     public static final class Background {
         private final ModifiersProto.Background mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Background(ModifiersProto.Background impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -531,8 +488,7 @@
          * Gets the background color for this element. If not defined, defaults to being
          * transparent. Intended for testing purposes only.
          */
-        @Nullable
-        public ColorBuilders.ColorProp getColor() {
+        public ColorBuilders.@Nullable ColorProp getColor() {
             if (mImpl.hasColor()) {
                 return ColorBuilders.ColorProp.fromProto(mImpl.getColor());
             } else {
@@ -545,8 +501,7 @@
          * if it has a background color or border. If not defined, defaults to having a square
          * corner. Intended for testing purposes only.
          */
-        @Nullable
-        public Corner getCorner() {
+        public @Nullable Corner getCorner() {
             if (mImpl.hasCorner()) {
                 return Corner.fromProto(mImpl.getCorner());
             } else {
@@ -556,18 +511,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Background fromProto(@NonNull ModifiersProto.Background proto) {
+        static @NonNull Background fromProto(ModifiersProto.@NonNull Background proto) {
             return new Background(proto, null);
         }
 
-        @NonNull
-        ModifiersProto.Background toProto() {
+        ModifiersProto.@NonNull Background toProto() {
             return mImpl;
         }
 
@@ -583,8 +535,7 @@
              * Sets the background color for this element. If not defined, defaults to being
              * transparent.
              */
-            @NonNull
-            public Builder setColor(@NonNull ColorBuilders.ColorProp color) {
+            public @NonNull Builder setColor(ColorBuilders.@NonNull ColorProp color) {
                 mImpl.setColor(color.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(color.getFingerprint()).aggregateValueAsInt());
@@ -596,8 +547,7 @@
              * element if it has a background color or border. If not defined, defaults to having a
              * square corner.
              */
-            @NonNull
-            public Builder setCorner(@NonNull Corner corner) {
+            public @NonNull Builder setCorner(@NonNull Corner corner) {
                 mImpl.setCorner(corner.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(corner.getFingerprint()).aggregateValueAsInt());
@@ -605,8 +555,7 @@
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public Background build() {
+            public @NonNull Background build() {
                 return new Background(mImpl.build(), mFingerprint);
             }
         }
@@ -618,7 +567,7 @@
      */
     public static final class ElementMetadata {
         private final ModifiersProto.ElementMetadata mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         ElementMetadata(ModifiersProto.ElementMetadata impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -629,27 +578,23 @@
          * Gets property describing the element with which it is associated. For use by libraries
          * building higher-level components only. This can be used to track component metadata.
          */
-        @NonNull
-        public byte[] getTagData() {
+        public byte @NonNull [] getTagData() {
             return mImpl.getTagData().toByteArray();
         }
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static ElementMetadata fromProto(@NonNull ModifiersProto.ElementMetadata proto) {
+        static @NonNull ElementMetadata fromProto(ModifiersProto.@NonNull ElementMetadata proto) {
             return new ElementMetadata(proto, null);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ModifiersProto.ElementMetadata toProto() {
+        public ModifiersProto.@NonNull ElementMetadata toProto() {
             return mImpl;
         }
 
@@ -666,16 +611,14 @@
              * libraries building higher-level components only. This can be used to track component
              * metadata.
              */
-            @NonNull
-            public Builder setTagData(@NonNull byte[] tagData) {
+            public @NonNull Builder setTagData(byte @NonNull [] tagData) {
                 mImpl.setTagData(ByteString.copyFrom(tagData));
                 mFingerprint.recordPropertyUpdate(1, Arrays.hashCode(tagData));
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public ElementMetadata build() {
+            public @NonNull ElementMetadata build() {
                 return new ElementMetadata(mImpl.build(), mFingerprint);
             }
         }
@@ -688,7 +631,7 @@
      */
     public static final class Modifiers {
         private final ModifiersProto.Modifiers mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Modifiers(ModifiersProto.Modifiers impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -700,8 +643,7 @@
          * have actions associated with it, which will be executed when the element is tapped.
          * Intended for testing purposes only.
          */
-        @Nullable
-        public Clickable getClickable() {
+        public @Nullable Clickable getClickable() {
             if (mImpl.hasClickable()) {
                 return Clickable.fromProto(mImpl.getClickable());
             } else {
@@ -714,8 +656,7 @@
          * modified element (eg. screen reader content descriptions). Intended for testing purposes
          * only.
          */
-        @Nullable
-        public Semantics getSemantics() {
+        public @Nullable Semantics getSemantics() {
             if (mImpl.hasSemantics()) {
                 return Semantics.fromProto(mImpl.getSemantics());
             } else {
@@ -724,8 +665,7 @@
         }
 
         /** Gets the padding of the modified element. Intended for testing purposes only. */
-        @Nullable
-        public Padding getPadding() {
+        public @Nullable Padding getPadding() {
             if (mImpl.hasPadding()) {
                 return Padding.fromProto(mImpl.getPadding());
             } else {
@@ -734,8 +674,7 @@
         }
 
         /** Gets the border of the modified element. Intended for testing purposes only. */
-        @Nullable
-        public Border getBorder() {
+        public @Nullable Border getBorder() {
             if (mImpl.hasBorder()) {
                 return Border.fromProto(mImpl.getBorder());
             } else {
@@ -747,8 +686,7 @@
          * Gets the background (with optional corner radius) of the modified element. Intended for
          * testing purposes only.
          */
-        @Nullable
-        public Background getBackground() {
+        public @Nullable Background getBackground() {
             if (mImpl.hasBackground()) {
                 return Background.fromProto(mImpl.getBackground());
             } else {
@@ -760,8 +698,7 @@
          * Gets metadata about an element. For use by libraries building higher-level components
          * only. This can be used to track component metadata.
          */
-        @Nullable
-        public ElementMetadata getMetadata() {
+        public @Nullable ElementMetadata getMetadata() {
             if (mImpl.hasMetadata()) {
                 return ElementMetadata.fromProto(mImpl.getMetadata());
             } else {
@@ -771,16 +708,14 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
         /** Creates a new wrapper instance from the proto. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static Modifiers fromProto(
-                @NonNull ModifiersProto.Modifiers proto, @Nullable Fingerprint fingerprint) {
+        public static @NonNull Modifiers fromProto(
+                ModifiersProto.@NonNull Modifiers proto, @Nullable Fingerprint fingerprint) {
             return new Modifiers(proto, fingerprint);
         }
 
@@ -789,15 +724,13 @@
          * object created using this method can't be added to any other wrapper.
          */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static Modifiers fromProto(@NonNull ModifiersProto.Modifiers proto) {
+        public static @NonNull Modifiers fromProto(ModifiersProto.@NonNull Modifiers proto) {
             return fromProto(proto, null);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ModifiersProto.Modifiers toProto() {
+        public ModifiersProto.@NonNull Modifiers toProto() {
             return mImpl;
         }
 
@@ -813,8 +746,7 @@
              * Sets the clickable property of the modified element. It allows its wrapped element to
              * have actions associated with it, which will be executed when the element is tapped.
              */
-            @NonNull
-            public Builder setClickable(@NonNull Clickable clickable) {
+            public @NonNull Builder setClickable(@NonNull Clickable clickable) {
                 mImpl.setClickable(clickable.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(clickable.getFingerprint()).aggregateValueAsInt());
@@ -825,8 +757,7 @@
              * Sets the semantics of the modified element. This can be used to add metadata to the
              * modified element (eg. screen reader content descriptions).
              */
-            @NonNull
-            public Builder setSemantics(@NonNull Semantics semantics) {
+            public @NonNull Builder setSemantics(@NonNull Semantics semantics) {
                 mImpl.setSemantics(semantics.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(semantics.getFingerprint()).aggregateValueAsInt());
@@ -834,8 +765,7 @@
             }
 
             /** Sets the padding of the modified element. */
-            @NonNull
-            public Builder setPadding(@NonNull Padding padding) {
+            public @NonNull Builder setPadding(@NonNull Padding padding) {
                 mImpl.setPadding(padding.toProto());
                 mFingerprint.recordPropertyUpdate(
                         3, checkNotNull(padding.getFingerprint()).aggregateValueAsInt());
@@ -843,8 +773,7 @@
             }
 
             /** Sets the border of the modified element. */
-            @NonNull
-            public Builder setBorder(@NonNull Border border) {
+            public @NonNull Builder setBorder(@NonNull Border border) {
                 mImpl.setBorder(border.toProto());
                 mFingerprint.recordPropertyUpdate(
                         4, checkNotNull(border.getFingerprint()).aggregateValueAsInt());
@@ -852,8 +781,7 @@
             }
 
             /** Sets the background (with optional corner radius) of the modified element. */
-            @NonNull
-            public Builder setBackground(@NonNull Background background) {
+            public @NonNull Builder setBackground(@NonNull Background background) {
                 mImpl.setBackground(background.toProto());
                 mFingerprint.recordPropertyUpdate(
                         5, checkNotNull(background.getFingerprint()).aggregateValueAsInt());
@@ -864,8 +792,7 @@
              * Sets metadata about an element. For use by libraries building higher-level components
              * only. This can be used to track component metadata.
              */
-            @NonNull
-            public Builder setMetadata(@NonNull ElementMetadata metadata) {
+            public @NonNull Builder setMetadata(@NonNull ElementMetadata metadata) {
                 mImpl.setMetadata(metadata.toProto());
                 mFingerprint.recordPropertyUpdate(
                         6, checkNotNull(metadata.getFingerprint()).aggregateValueAsInt());
@@ -873,8 +800,7 @@
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public Modifiers build() {
+            public @NonNull Modifiers build() {
                 return new Modifiers(mImpl.build(), mFingerprint);
             }
         }
@@ -886,7 +812,7 @@
      */
     public static final class ArcModifiers {
         private final ModifiersProto.ArcModifiers mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         ArcModifiers(ModifiersProto.ArcModifiers impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -897,8 +823,7 @@
          * Gets allows its wrapped element to have actions associated with it, which will be
          * executed when the element is tapped. Intended for testing purposes only.
          */
-        @Nullable
-        public Clickable getClickable() {
+        public @Nullable Clickable getClickable() {
             if (mImpl.hasClickable()) {
                 return Clickable.fromProto(mImpl.getClickable());
             } else {
@@ -910,8 +835,7 @@
          * Gets adds metadata for the modified element, for example, screen reader content
          * descriptions. Intended for testing purposes only.
          */
-        @Nullable
-        public Semantics getSemantics() {
+        public @Nullable Semantics getSemantics() {
             if (mImpl.hasSemantics()) {
                 return Semantics.fromProto(mImpl.getSemantics());
             } else {
@@ -921,20 +845,17 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static ArcModifiers fromProto(@NonNull ModifiersProto.ArcModifiers proto) {
+        static @NonNull ArcModifiers fromProto(ModifiersProto.@NonNull ArcModifiers proto) {
             return new ArcModifiers(proto, null);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ModifiersProto.ArcModifiers toProto() {
+        public ModifiersProto.@NonNull ArcModifiers toProto() {
             return mImpl;
         }
 
@@ -950,8 +871,7 @@
              * Sets allows its wrapped element to have actions associated with it, which will be
              * executed when the element is tapped.
              */
-            @NonNull
-            public Builder setClickable(@NonNull Clickable clickable) {
+            public @NonNull Builder setClickable(@NonNull Clickable clickable) {
                 mImpl.setClickable(clickable.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(clickable.getFingerprint()).aggregateValueAsInt());
@@ -962,8 +882,7 @@
              * Sets adds metadata for the modified element, for example, screen reader content
              * descriptions.
              */
-            @NonNull
-            public Builder setSemantics(@NonNull Semantics semantics) {
+            public @NonNull Builder setSemantics(@NonNull Semantics semantics) {
                 mImpl.setSemantics(semantics.toProto());
                 mFingerprint.recordPropertyUpdate(
                         2, checkNotNull(semantics.getFingerprint()).aggregateValueAsInt());
@@ -971,8 +890,7 @@
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public ArcModifiers build() {
+            public @NonNull ArcModifiers build() {
                 return new ArcModifiers(mImpl.build(), mFingerprint);
             }
         }
@@ -985,7 +903,7 @@
      */
     public static final class SpanModifiers {
         private final ModifiersProto.SpanModifiers mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         SpanModifiers(ModifiersProto.SpanModifiers impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -996,8 +914,7 @@
          * Gets allows its wrapped element to have actions associated with it, which will be
          * executed when the element is tapped. Intended for testing purposes only.
          */
-        @Nullable
-        public Clickable getClickable() {
+        public @Nullable Clickable getClickable() {
             if (mImpl.hasClickable()) {
                 return Clickable.fromProto(mImpl.getClickable());
             } else {
@@ -1007,20 +924,17 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static SpanModifiers fromProto(@NonNull ModifiersProto.SpanModifiers proto) {
+        static @NonNull SpanModifiers fromProto(ModifiersProto.@NonNull SpanModifiers proto) {
             return new SpanModifiers(proto, null);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ModifiersProto.SpanModifiers toProto() {
+        public ModifiersProto.@NonNull SpanModifiers toProto() {
             return mImpl;
         }
 
@@ -1036,8 +950,7 @@
              * Sets allows its wrapped element to have actions associated with it, which will be
              * executed when the element is tapped.
              */
-            @NonNull
-            public Builder setClickable(@NonNull Clickable clickable) {
+            public @NonNull Builder setClickable(@NonNull Clickable clickable) {
                 mImpl.setClickable(clickable.toProto());
                 mFingerprint.recordPropertyUpdate(
                         1, checkNotNull(clickable.getFingerprint()).aggregateValueAsInt());
@@ -1045,8 +958,7 @@
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public SpanModifiers build() {
+            public @NonNull SpanModifiers build() {
                 return new SpanModifiers(mImpl.build(), mFingerprint);
             }
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ProtoParcelable.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ProtoParcelable.java
index 04413bd..0b0acd8 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ProtoParcelable.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ProtoParcelable.java
@@ -20,9 +20,10 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 import java.lang.reflect.Array;
 import java.util.Arrays;
 import java.util.function.BiFunction;
@@ -57,14 +58,13 @@
         };
     }
 
-    protected ProtoParcelable(@NonNull byte[] contents, int version) {
+    protected ProtoParcelable(byte @NonNull [] contents, int version) {
         this.mContents = contents;
         this.mVersion = version;
     }
 
     /** Get the payload contained within this ProtoParcelable. */
-    @NonNull
-    public byte[] getContents() {
+    public byte @NonNull [] getContents() {
         return mContents;
     }
 
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/RequestBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/RequestBuilders.java
index b12b8ff2..708bf5a 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/RequestBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/RequestBuilders.java
@@ -16,8 +16,6 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters;
@@ -27,6 +25,9 @@
 import androidx.wear.protolayout.proto.StateProto;
 import androidx.wear.tiles.proto.RequestProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.List;
 
 /** Builders for request messages used to fetch tiles and resources. */
@@ -50,8 +51,7 @@
          * object describing the device requesting the tile update. If not set, a default empty
          * instance is used.
          */
-        @NonNull
-        public DeviceParameters getDeviceConfiguration() {
+        public @NonNull DeviceParameters getDeviceConfiguration() {
             if (mImpl.hasDeviceConfiguration()) {
                 return DeviceParameters.fromProto(mImpl.getDeviceConfiguration());
             } else {
@@ -64,8 +64,7 @@
          * Gets the {@link androidx.wear.protolayout.StateBuilders.State} that should be used when
          * building the tile.
          */
-        @NonNull
-        public State getCurrentState() {
+        public @NonNull State getCurrentState() {
             if (mImpl.hasCurrentState()) {
                 return State.fromProto(mImpl.getCurrentState());
             } else {
@@ -89,9 +88,9 @@
          * @deprecated Use {@link #getDeviceConfiguration()} instead.
          */
         @Deprecated
-        @Nullable
         @SuppressWarnings("deprecation") // for backward compatibility
-        public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters getDeviceParameters() {
+        public androidx.wear.tiles.DeviceParametersBuilders.@Nullable DeviceParameters
+                getDeviceParameters() {
             if (mImpl.hasDeviceConfiguration()) {
                 return androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.fromProto(
                         mImpl.getDeviceConfiguration());
@@ -107,9 +106,8 @@
          * @deprecated Use {@link #getCurrentState()} instead.
          */
         @Deprecated
-        @Nullable
         @SuppressWarnings("deprecation") // for backward compatibility
-        public androidx.wear.tiles.StateBuilders.State getState() {
+        public androidx.wear.tiles.StateBuilders.@Nullable State getState() {
             if (mImpl.hasCurrentState()) {
                 return androidx.wear.tiles.StateBuilders.State.fromProto(mImpl.getCurrentState());
             } else {
@@ -119,21 +117,18 @@
 
         /** Creates a new wrapper instance from the proto. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static TileRequest fromProto(@NonNull RequestProto.TileRequest proto) {
+        public static @NonNull TileRequest fromProto(RequestProto.@NonNull TileRequest proto) {
             return new TileRequest(proto);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public RequestProto.TileRequest toProto() {
+        public RequestProto.@NonNull TileRequest toProto() {
             return mImpl;
         }
 
         @Override
-        @NonNull
-        public String toString() {
+        public @NonNull String toString() {
             return "TileRequest{"
                     + "deviceConfiguration="
                     + getDeviceConfiguration()
@@ -159,8 +154,8 @@
              * instance is used.
              */
             @RequiresSchemaVersion(major = 1, minor = 0)
-            @NonNull
-            public Builder setDeviceConfiguration(@NonNull DeviceParameters deviceConfiguration) {
+            public @NonNull Builder setDeviceConfiguration(
+                    @NonNull DeviceParameters deviceConfiguration) {
                 mImpl.setDeviceConfiguration(deviceConfiguration.toProto());
                 return this;
             }
@@ -170,16 +165,14 @@
              * when building the tile.
              */
             @RequiresSchemaVersion(major = 1, minor = 0)
-            @NonNull
-            public Builder setCurrentState(@NonNull State currentState) {
+            public @NonNull Builder setCurrentState(@NonNull State currentState) {
                 mImpl.setCurrentState(currentState.toProto());
                 return this;
             }
 
             /** Sets the ID of the tile being requested. */
             @RequiresSchemaVersion(major = 1, minor = 0)
-            @NonNull
-            public Builder setTileId(int tileId) {
+            public @NonNull Builder setTileId(int tileId) {
                 mImpl.setTileId(tileId);
                 return this;
             }
@@ -191,10 +184,8 @@
              * @deprecated Use {@link setDeviceConfiguration(DeviceParameters)} instead.
              */
             @Deprecated
-            @NonNull
-            public Builder setDeviceParameters(
-                    @NonNull
-                            androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
+            public @NonNull Builder setDeviceParameters(
+                    androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
                                     deviceParameters) {
                 mImpl.setDeviceConfiguration(deviceParameters.toProto());
                 return this;
@@ -207,15 +198,14 @@
              * @deprecated Use {@link setCurrentState(State)} instead.
              */
             @Deprecated
-            @NonNull
-            public Builder setState(@NonNull androidx.wear.tiles.StateBuilders.State state) {
+            public @NonNull Builder setState(
+                    androidx.wear.tiles.StateBuilders.@NonNull State state) {
                 mImpl.setCurrentState(state.toProto());
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public TileRequest build() {
+            public @NonNull TileRequest build() {
                 return TileRequest.fromProto(mImpl.build());
             }
         }
@@ -237,8 +227,7 @@
          * Gets the version of the resources being fetched. This is the same as the requested
          * resource version, passed in {@link androidx.wear.tiles.TileBuilders.Tile}.
          */
-        @NonNull
-        public String getVersion() {
+        public @NonNull String getVersion() {
             return mImpl.getVersion();
         }
 
@@ -251,8 +240,7 @@
          * in {@link androidx.wear.protolayout.ResourceBuilders.Resources}.idToImage), not Android
          * resource names or similar.
          */
-        @NonNull
-        public List<String> getResourceIds() {
+        public @NonNull List<String> getResourceIds() {
             return mImpl.getResourceIdsList();
         }
 
@@ -260,8 +248,7 @@
          * Gets the {@link androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters}
          * object describing the device requesting the resources.
          */
-        @NonNull
-        public DeviceParameters getDeviceConfiguration() {
+        public @NonNull DeviceParameters getDeviceConfiguration() {
             if (mImpl.hasDeviceConfiguration()) {
                 return DeviceParameters.fromProto(mImpl.getDeviceConfiguration());
             } else {
@@ -286,9 +273,9 @@
          * @deprecated Use {@link #getDeviceConfiguration()} instead.
          */
         @Deprecated
-        @Nullable
         @SuppressWarnings("deprecation") // for backward compatibility
-        public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters getDeviceParameters() {
+        public androidx.wear.tiles.DeviceParametersBuilders.@Nullable DeviceParameters
+                getDeviceParameters() {
             if (mImpl.hasDeviceConfiguration()) {
                 return androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.fromProto(
                         mImpl.getDeviceConfiguration());
@@ -299,21 +286,19 @@
 
         /** Creates a new wrapper instance from the proto. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static ResourcesRequest fromProto(@NonNull RequestProto.ResourcesRequest proto) {
+        public static @NonNull ResourcesRequest fromProto(
+                RequestProto.@NonNull ResourcesRequest proto) {
             return new ResourcesRequest(proto);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public RequestProto.ResourcesRequest toProto() {
+        public RequestProto.@NonNull ResourcesRequest toProto() {
             return mImpl;
         }
 
         @Override
-        @NonNull
-        public String toString() {
+        public @NonNull String toString() {
             return "ResourcesRequest{"
                     + "version="
                     + getVersion()
@@ -340,8 +325,7 @@
              * resource version, passed in {@link androidx.wear.tiles.TileBuilders.Tile}.
              */
             @RequiresSchemaVersion(major = 1, minor = 0)
-            @NonNull
-            public Builder setVersion(@NonNull String version) {
+            public @NonNull Builder setVersion(@NonNull String version) {
                 mImpl.setVersion(version);
                 return this;
             }
@@ -357,8 +341,7 @@
              * Android resource names or similar.
              */
             @RequiresSchemaVersion(major = 1, minor = 0)
-            @NonNull
-            public Builder addResourceId(@NonNull String resourceId) {
+            public @NonNull Builder addResourceId(@NonNull String resourceId) {
                 mImpl.addResourceIds(resourceId);
                 return this;
             }
@@ -368,16 +351,15 @@
              * object describing the device requesting the resources.
              */
             @RequiresSchemaVersion(major = 1, minor = 0)
-            @NonNull
-            public Builder setDeviceConfiguration(@NonNull DeviceParameters deviceConfiguration) {
+            public @NonNull Builder setDeviceConfiguration(
+                    @NonNull DeviceParameters deviceConfiguration) {
                 mImpl.setDeviceConfiguration(deviceConfiguration.toProto());
                 return this;
             }
 
             /** Sets the ID of the tile for which resources are being requested. */
             @RequiresSchemaVersion(major = 1, minor = 0)
-            @NonNull
-            public Builder setTileId(int tileId) {
+            public @NonNull Builder setTileId(int tileId) {
                 mImpl.setTileId(tileId);
                 return this;
             }
@@ -389,19 +371,16 @@
              * @deprecated Use {@link setDeviceConfiguration(DeviceParameters)} instead.
              */
             @Deprecated
-            @NonNull
             @SuppressWarnings("deprecation") // for backward compatibility
-            public Builder setDeviceParameters(
-                    @NonNull
-                            androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters
+            public @NonNull Builder setDeviceParameters(
+                    androidx.wear.tiles.DeviceParametersBuilders.@NonNull DeviceParameters
                                     deviceParameters) {
                 mImpl.setDeviceConfiguration(deviceParameters.toProto());
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public ResourcesRequest build() {
+            public @NonNull ResourcesRequest build() {
                 return ResourcesRequest.fromProto(mImpl.build());
             }
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ResourceBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ResourceBuilders.java
index 8979d32..846cf7d 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ResourceBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ResourceBuilders.java
@@ -23,14 +23,15 @@
 import androidx.annotation.Dimension;
 import androidx.annotation.DrawableRes;
 import androidx.annotation.IntDef;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.proto.ResourceProto;
 import androidx.wear.protolayout.protobuf.ByteString;
 import androidx.wear.protolayout.protobuf.InvalidProtocolBufferException;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.Collections;
@@ -79,14 +80,12 @@
             return mImpl.getResourceId();
         }
 
-        @NonNull
-        static AndroidImageResourceByResId fromProto(
-                @NonNull ResourceProto.AndroidImageResourceByResId proto) {
+        static @NonNull AndroidImageResourceByResId fromProto(
+                ResourceProto.@NonNull AndroidImageResourceByResId proto) {
             return new AndroidImageResourceByResId(proto);
         }
 
-        @NonNull
-        ResourceProto.AndroidImageResourceByResId toProto() {
+        ResourceProto.@NonNull AndroidImageResourceByResId toProto() {
             return mImpl;
         }
 
@@ -101,15 +100,13 @@
              * Sets the Android resource ID of this image. This must refer to a drawable under
              * R.drawable.
              */
-            @NonNull
-            public Builder setResourceId(@DrawableRes int resourceId) {
+            public @NonNull Builder setResourceId(@DrawableRes int resourceId) {
                 mImpl.setResourceId(resourceId);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public AndroidImageResourceByResId build() {
+            public @NonNull AndroidImageResourceByResId build() {
                 return AndroidImageResourceByResId.fromProto(mImpl.build());
             }
         }
@@ -127,8 +124,7 @@
         }
 
         /** Gets the byte array representing the image. Intended for testing purposes only. */
-        @NonNull
-        public byte[] getData() {
+        public byte @NonNull [] getData() {
             return mImpl.getData().toByteArray();
         }
 
@@ -163,13 +159,12 @@
             return mImpl.getFormat().getNumber();
         }
 
-        @NonNull
-        static InlineImageResource fromProto(@NonNull ResourceProto.InlineImageResource proto) {
+        static @NonNull InlineImageResource fromProto(
+                ResourceProto.@NonNull InlineImageResource proto) {
             return new InlineImageResource(proto);
         }
 
-        @NonNull
-        ResourceProto.InlineImageResource toProto() {
+        ResourceProto.@NonNull InlineImageResource toProto() {
             return mImpl;
         }
 
@@ -181,8 +176,7 @@
             public Builder() {}
 
             /** Sets the byte array representing the image. */
-            @NonNull
-            public Builder setData(@NonNull byte[] data) {
+            public @NonNull Builder setData(byte @NonNull [] data) {
                 mImpl.setData(ByteString.copyFrom(data));
                 return this;
             }
@@ -191,8 +185,7 @@
              * Sets the native width of the image, in pixels. Only required for formats (e.g.
              * IMAGE_FORMAT_RGB_565) where the image data does not include size.
              */
-            @NonNull
-            public Builder setWidthPx(@Dimension(unit = PX) int widthPx) {
+            public @NonNull Builder setWidthPx(@Dimension(unit = PX) int widthPx) {
                 mImpl.setWidthPx(widthPx);
                 return this;
             }
@@ -201,8 +194,7 @@
              * Sets the native height of the image, in pixels. Only required for formats (e.g.
              * IMAGE_FORMAT_RGB_565) where the image data does not include size.
              */
-            @NonNull
-            public Builder setHeightPx(@Dimension(unit = PX) int heightPx) {
+            public @NonNull Builder setHeightPx(@Dimension(unit = PX) int heightPx) {
                 mImpl.setHeightPx(heightPx);
                 return this;
             }
@@ -213,15 +205,13 @@
              * to extract this from the raw image data. If the platform does not support the format,
              * the image will not be decoded or displayed.
              */
-            @NonNull
-            public Builder setFormat(@ImageFormat int format) {
+            public @NonNull Builder setFormat(@ImageFormat int format) {
                 mImpl.setFormat(ResourceProto.ImageFormat.forNumber(format));
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public InlineImageResource build() {
+            public @NonNull InlineImageResource build() {
                 return InlineImageResource.fromProto(mImpl.build());
             }
         }
@@ -242,8 +232,7 @@
          * Gets an image resource that maps to an Android drawable by resource ID. Intended for
          * testing purposes only.
          */
-        @Nullable
-        public AndroidImageResourceByResId getAndroidResourceByResId() {
+        public @Nullable AndroidImageResourceByResId getAndroidResourceByResId() {
             if (mImpl.hasAndroidResourceByResId()) {
                 return AndroidImageResourceByResId.fromProto(mImpl.getAndroidResourceByResId());
             } else {
@@ -255,8 +244,7 @@
          * Gets an image resource that contains the image data inline. Intended for testing purposes
          * only.
          */
-        @Nullable
-        public InlineImageResource getInlineResource() {
+        public @Nullable InlineImageResource getInlineResource() {
             if (mImpl.hasInlineResource()) {
                 return InlineImageResource.fromProto(mImpl.getInlineResource());
             } else {
@@ -264,13 +252,11 @@
             }
         }
 
-        @NonNull
-        static ImageResource fromProto(@NonNull ResourceProto.ImageResource proto) {
+        static @NonNull ImageResource fromProto(ResourceProto.@NonNull ImageResource proto) {
             return new ImageResource(proto);
         }
 
-        @NonNull
-        ResourceProto.ImageResource toProto() {
+        ResourceProto.@NonNull ImageResource toProto() {
             return mImpl;
         }
 
@@ -282,23 +268,20 @@
             public Builder() {}
 
             /** Sets an image resource that maps to an Android drawable by resource ID. */
-            @NonNull
-            public Builder setAndroidResourceByResId(
+            public @NonNull Builder setAndroidResourceByResId(
                     @NonNull AndroidImageResourceByResId androidResourceByResId) {
                 mImpl.setAndroidResourceByResId(androidResourceByResId.toProto());
                 return this;
             }
 
             /** Sets an image resource that contains the image data inline. */
-            @NonNull
-            public Builder setInlineResource(@NonNull InlineImageResource inlineResource) {
+            public @NonNull Builder setInlineResource(@NonNull InlineImageResource inlineResource) {
                 mImpl.setInlineResource(inlineResource.toProto());
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public ImageResource build() {
+            public @NonNull ImageResource build() {
                 return ImageResource.fromProto(mImpl.build());
             }
         }
@@ -324,8 +307,7 @@
          * androidx.wear.tiles.RequestBuilders.ResourcesRequest} which triggered this request.
          * Intended for testing purposes only.
          */
-        @NonNull
-        public String getVersion() {
+        public @NonNull String getVersion() {
             return mImpl.getVersion();
         }
 
@@ -333,8 +315,7 @@
          * Gets a map of resource_ids to images, which can be used by layouts. Intended for testing
          * purposes only.
          */
-        @NonNull
-        public Map<String, ImageResource> getIdToImageMapping() {
+        public @NonNull Map<String, ImageResource> getIdToImageMapping() {
             Map<String, ImageResource> map = new HashMap<>();
             for (Entry<String, ResourceProto.ImageResource> entry :
                     mImpl.getIdToImageMap().entrySet()) {
@@ -344,17 +325,15 @@
         }
 
         /** Converts to byte array representation. */
-        @NonNull
         @TilesExperimental
-        public byte[] toByteArray() {
+        public byte @NonNull [] toByteArray() {
             return mImpl.toByteArray();
         }
 
         /** Converts from byte array representation. */
         @SuppressWarnings("ProtoParseWithRegistry")
-        @Nullable
         @TilesExperimental
-        public static Resources fromByteArray(@NonNull byte[] byteArray) {
+        public static @Nullable Resources fromByteArray(byte @NonNull [] byteArray) {
             try {
                 return fromProto(ResourceProto.Resources.parseFrom(byteArray));
             } catch (InvalidProtocolBufferException e) {
@@ -363,15 +342,13 @@
         }
 
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static Resources fromProto(@NonNull ResourceProto.Resources proto) {
+        public static @NonNull Resources fromProto(ResourceProto.@NonNull Resources proto) {
             return new Resources(proto);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public ResourceProto.Resources toProto() {
+        public ResourceProto.@NonNull Resources toProto() {
             return mImpl;
         }
 
@@ -393,23 +370,21 @@
              * tile to render successfully, and must match the resource version specified in {@link
              * androidx.wear.tiles.RequestBuilders.ResourcesRequest} which triggered this request.
              */
-            @NonNull
-            public Builder setVersion(@NonNull String version) {
+            public @NonNull Builder setVersion(@NonNull String version) {
                 mImpl.setVersion(version);
                 return this;
             }
 
             /** Adds an entry into a map of resource_ids to images, which can be used by layouts. */
             @SuppressLint("MissingGetterMatchingBuilder")
-            @NonNull
-            public Builder addIdToImageMapping(@NonNull String id, @NonNull ImageResource image) {
+            public @NonNull Builder addIdToImageMapping(@NonNull String id,
+                    @NonNull ImageResource image) {
                 mImpl.putIdToImage(id, image.toProto());
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public Resources build() {
+            public @NonNull Resources build() {
                 return Resources.fromProto(mImpl.build());
             }
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ResourcesData.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ResourcesData.java
index d103204..98839a0 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ResourcesData.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ResourcesData.java
@@ -16,9 +16,10 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Holder for Tiles' Resources class, to be parceled and transferred to Wear.
  *
@@ -31,7 +32,7 @@
     public static final Creator<ResourcesData> CREATOR =
             newCreator(ResourcesData.class, ResourcesData::new);
 
-    public ResourcesData(@NonNull byte[] payload, int version) {
+    public ResourcesData(byte @NonNull [] payload, int version) {
         super(payload, version);
     }
 }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ResourcesRequestData.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ResourcesRequestData.java
index c314400..665d180 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ResourcesRequestData.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ResourcesRequestData.java
@@ -16,9 +16,10 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Holder for Tiles' ResourceRequest class, to be parceled and transferred to a Tile Service.
  *
@@ -30,7 +31,7 @@
     public static final Creator<ResourcesRequestData> CREATOR =
             newCreator(ResourcesRequestData.class, ResourcesRequestData::new);
 
-    public ResourcesRequestData(@NonNull byte[] params, int version) {
+    public ResourcesRequestData(byte @NonNull [] params, int version) {
         super(params, version);
     }
 }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/StateBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/StateBuilders.java
index 3798263..48fa917 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/StateBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/StateBuilders.java
@@ -16,13 +16,14 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.StateProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Builders for state of a tile.
  *
@@ -35,7 +36,7 @@
     /** {@link State} information. */
     public static final class State {
         private final StateProto.State mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         State(StateProto.State impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -43,27 +44,23 @@
         }
 
         /** Gets the ID of the clickable that was last clicked. */
-        @NonNull
-        public String getLastClickableId() {
+        public @NonNull String getLastClickableId() {
             return mImpl.getLastClickableId();
         }
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static State fromProto(@NonNull StateProto.State proto) {
+        public static @NonNull State fromProto(StateProto.@NonNull State proto) {
             return new State(proto, null);
         }
 
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public StateProto.State toProto() {
+        public StateProto.@NonNull State toProto() {
             return mImpl;
         }
 
@@ -75,8 +72,7 @@
             public Builder() {}
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public State build() {
+            public @NonNull State build() {
                 return new State(mImpl.build(), mFingerprint);
             }
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/SysUiTileUpdateRequester.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/SysUiTileUpdateRequester.java
index b2f3ab5..c24a580 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/SysUiTileUpdateRequester.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/SysUiTileUpdateRequester.java
@@ -35,8 +35,9 @@
 import android.util.Log;
 
 import androidx.annotation.GuardedBy;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -128,8 +129,7 @@
         }
     }
 
-    @Nullable
-    private Intent buildUpdateBindIntent() {
+    private @Nullable Intent buildUpdateBindIntent() {
         Intent bindIntent = new Intent(ACTION_BIND_UPDATE_REQUESTER);
         bindIntent.setPackage(getSysUiPackageName());
 
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileAddEventData.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileAddEventData.java
index 517a473..220c401 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileAddEventData.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileAddEventData.java
@@ -16,9 +16,10 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Holder for Tiles' TileAddEvent class, to be parceled and transferred to a Tile Service.
  *
@@ -30,7 +31,7 @@
     public static final Creator<TileAddEventData> CREATOR =
             newCreator(TileAddEventData.class, TileAddEventData::new);
 
-    public TileAddEventData(@NonNull byte[] params, int version) {
+    public TileAddEventData(byte @NonNull [] params, int version) {
         super(params, version);
     }
 }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileBuilders.java
index bf1dcec..d8607e9 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileBuilders.java
@@ -16,8 +16,6 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.StateBuilders.State;
@@ -26,6 +24,9 @@
 import androidx.wear.protolayout.expression.proto.VersionProto.VersionInfo;
 import androidx.wear.tiles.proto.TileProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /** Builders for the components of a tile that can be rendered by a tile renderer. */
 public final class TileBuilders {
     private TileBuilders() {}
@@ -48,8 +49,7 @@
          * androidx.wear.tiles.RequestBuilders.ResourcesRequest} if the system does not have a copy
          * of the specified resource version.
          */
-        @NonNull
-        public String getResourcesVersion() {
+        public @NonNull String getResourcesVersion() {
             return mImpl.getResourcesVersion();
         }
 
@@ -57,8 +57,7 @@
          * Gets the {@link androidx.wear.protolayout.TimelineBuilders.Timeline} containing the
          * layouts for the tiles to show in the carousel, along with their validity periods.
          */
-        @Nullable
-        public Timeline getTileTimeline() {
+        public @Nullable Timeline getTileTimeline() {
             if (mImpl.hasTileTimeline()) {
                 return Timeline.fromProto(mImpl.getTileTimeline());
             } else {
@@ -84,8 +83,7 @@
         }
 
         /** Gets {@link androidx.wear.protolayout.StateBuilders.State} for this tile. */
-        @Nullable
-        public State getState() {
+        public @Nullable State getState() {
             if (mImpl.hasState()) {
                 return State.fromProto(mImpl.getState());
             } else {
@@ -100,9 +98,8 @@
          * @deprecated Use {@link #getTileTimeline()} instead.
          */
         @Deprecated
-        @Nullable
         @SuppressWarnings("deprecation") // for backward compatibility
-        public androidx.wear.tiles.TimelineBuilders.Timeline getTimeline() {
+        public androidx.wear.tiles.TimelineBuilders.@Nullable Timeline getTimeline() {
             if (mImpl.hasTileTimeline()) {
                 return androidx.wear.tiles.TimelineBuilders.Timeline.fromProto(
                         mImpl.getTileTimeline());
@@ -113,21 +110,18 @@
 
         /** Creates a new wrapper instance from the proto. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static Tile fromProto(@NonNull TileProto.Tile proto) {
+        public static @NonNull Tile fromProto(TileProto.@NonNull Tile proto) {
             return new Tile(proto);
         }
 
         /** Returns the internal proto instance. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public TileProto.Tile toProto() {
+        public TileProto.@NonNull Tile toProto() {
             return mImpl;
         }
 
         @Override
-        @NonNull
-        public String toString() {
+        public @NonNull String toString() {
             return "Tile{"
                     + "resourcesVersion="
                     + getResourcesVersion()
@@ -155,8 +149,7 @@
              * copy of the specified resource version.
              */
             @RequiresSchemaVersion(major = 1, minor = 0)
-            @NonNull
-            public Builder setResourcesVersion(@NonNull String resourcesVersion) {
+            public @NonNull Builder setResourcesVersion(@NonNull String resourcesVersion) {
                 mImpl.setResourcesVersion(resourcesVersion);
                 return this;
             }
@@ -166,8 +159,7 @@
              * layouts for the tiles to show in the carousel, along with their validity periods.
              */
             @RequiresSchemaVersion(major = 1, minor = 0)
-            @NonNull
-            public Builder setTileTimeline(@NonNull Timeline tileTimeline) {
+            public @NonNull Builder setTileTimeline(@NonNull Timeline tileTimeline) {
                 mImpl.setTileTimeline(tileTimeline.toProto());
                 return this;
             }
@@ -186,16 +178,14 @@
              * due to system-level optimizations.
              */
             @RequiresSchemaVersion(major = 1, minor = 0)
-            @NonNull
-            public Builder setFreshnessIntervalMillis(long freshnessIntervalMillis) {
+            public @NonNull Builder setFreshnessIntervalMillis(long freshnessIntervalMillis) {
                 mImpl.setFreshnessIntervalMillis(freshnessIntervalMillis);
                 return this;
             }
 
             /** Sets {@link androidx.wear.protolayout.StateBuilders.State} for this tile. */
             @RequiresSchemaVersion(major = 1, minor = 200)
-            @NonNull
-            public Builder setState(@NonNull State state) {
+            public @NonNull Builder setState(@NonNull State state) {
                 mImpl.setState(state.toProto());
                 return this;
             }
@@ -207,16 +197,14 @@
              * @deprecated Use {@link #setTileTimeline(Timeline)} instead.
              */
             @Deprecated
-            @NonNull
-            public Builder setTimeline(
-                    @NonNull androidx.wear.tiles.TimelineBuilders.Timeline timeline) {
+            public @NonNull Builder setTimeline(
+                    androidx.wear.tiles.TimelineBuilders.@NonNull Timeline timeline) {
                 mImpl.setTileTimeline(timeline.toProto());
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public Tile build() {
+            public @NonNull Tile build() {
                 return Tile.fromProto(mImpl.build());
             }
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileData.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileData.java
index d6dbca0..beb1a7d 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileData.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileData.java
@@ -16,9 +16,10 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Holder for Tiles' Tile class, to be parceled and transferred to Wear.
  *
@@ -29,7 +30,7 @@
     public static final int VERSION_PROTOBUF = 1;
     public static final Creator<TileData> CREATOR = newCreator(TileData.class, TileData::new);
 
-    public TileData(@NonNull byte[] tile, int version) {
+    public TileData(byte @NonNull [] tile, int version) {
         super(tile, version);
     }
 }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileEnterEventData.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileEnterEventData.java
index 052dd79..f2cba65 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileEnterEventData.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileEnterEventData.java
@@ -16,9 +16,10 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Holder for Tiles' TileEnterEvent class, to be parceled and transferred to a Tile Service.
  *
@@ -30,7 +31,7 @@
     public static final Creator<TileEnterEventData> CREATOR =
             newCreator(TileEnterEventData.class, TileEnterEventData::new);
 
-    public TileEnterEventData(@NonNull byte[] params, int version) {
+    public TileEnterEventData(byte @NonNull [] params, int version) {
         super(params, version);
     }
 }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileInteractionEventData.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileInteractionEventData.java
index 53f32ff..2ca9682 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileInteractionEventData.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileInteractionEventData.java
@@ -15,9 +15,10 @@
  */
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Holder for Tiles' TileInteractionEvent class, to be parceled and transferred to a Tile Service.
  *
@@ -29,7 +30,7 @@
     public static final Creator<TileInteractionEventData> CREATOR =
             newCreator(TileInteractionEventData.class, TileInteractionEventData::new);
 
-    public TileInteractionEventData(@NonNull byte[] params, int version) {
+    public TileInteractionEventData(byte @NonNull [] params, int version) {
         super(params, version);
     }
 }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileLeaveEventData.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileLeaveEventData.java
index 476cd9a..0edd237 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileLeaveEventData.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileLeaveEventData.java
@@ -16,9 +16,10 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Holder for Tiles' TileLeaveEvent class, to be parceled and transferred to a Tile Service.
  *
@@ -30,7 +31,7 @@
     public static final Creator<TileLeaveEventData> CREATOR =
             newCreator(TileLeaveEventData.class, TileLeaveEventData::new);
 
-    public TileLeaveEventData(@NonNull byte[] params, int version) {
+    public TileLeaveEventData(byte @NonNull [] params, int version) {
         super(params, version);
     }
 }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileRemoveEventData.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileRemoveEventData.java
index fc6152c..6d97a2c 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileRemoveEventData.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileRemoveEventData.java
@@ -16,9 +16,10 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Holder for Tiles' TileRemoveEvent class, to be parceled and transferred to a Tile Service.
  *
@@ -30,7 +31,7 @@
     public static final Creator<TileRemoveEventData> CREATOR =
             newCreator(TileRemoveEventData.class, TileRemoveEventData::new);
 
-    public TileRemoveEventData(@NonNull byte[] params, int version) {
+    public TileRemoveEventData(byte @NonNull [] params, int version) {
         super(params, version);
     }
 }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileRequestData.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileRequestData.java
index e4d83ae..352e188 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileRequestData.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileRequestData.java
@@ -16,9 +16,10 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Holder for Tiles' TileRequest class, to be parceled and transferred to a Tile Service.
  *
@@ -30,7 +31,7 @@
     public static final Creator<TileRequestData> CREATOR =
             newCreator(TileRequestData.class, TileRequestData::new);
 
-    public TileRequestData(@NonNull byte[] params, int version) {
+    public TileRequestData(byte @NonNull [] params, int version) {
         super(params, version);
     }
 }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileService.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileService.java
index e85f9ae..37c203e 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileService.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileService.java
@@ -29,8 +29,6 @@
 import android.util.Log;
 
 import androidx.annotation.MainThread;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.VisibleForTesting;
 import androidx.concurrent.futures.CallbackToFutureAdapter;
@@ -57,6 +55,9 @@
 import com.google.wear.services.tiles.TileInstance;
 import com.google.wear.services.tiles.TilesManager;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.lang.ref.WeakReference;
 import java.time.Duration;
 import java.util.ArrayList;
@@ -152,8 +153,8 @@
      * @param requestParams Parameters about the request. See {@link TileRequest} for more info.
      */
     @MainThread
-    @NonNull
-    protected abstract ListenableFuture<Tile> onTileRequest(@NonNull TileRequest requestParams);
+    protected abstract @NonNull ListenableFuture<Tile> onTileRequest(
+            @NonNull TileRequest requestParams);
 
     /**
      * Called when the system is requesting a resource bundle from this Tile Provider. The returned
@@ -167,10 +168,9 @@
      * @deprecated Use {@link #onTileResourcesRequest} instead.
      */
     @MainThread
-    @NonNull
     @Deprecated
-    protected ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> onResourcesRequest(
-            @NonNull ResourcesRequest requestParams) {
+    protected @NonNull ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources>
+    onResourcesRequest(@NonNull ResourcesRequest requestParams) {
         return ON_RESOURCES_REQUEST_NOT_IMPLEMENTED;
     }
 
@@ -190,9 +190,8 @@
      *     info.
      */
     @MainThread
-    @NonNull
     @SuppressWarnings({"AsyncSuffixFuture", "deprecation"}) // For backward compatibility
-    protected ListenableFuture<Resources> onTileResourcesRequest(
+    protected @NonNull ListenableFuture<Resources> onTileResourcesRequest(
             @NonNull ResourcesRequest requestParams) {
         // We are offering a default implementation for onTileResourcesRequest for backward
         // compatibility as older clients are overriding onResourcesRequest.
@@ -280,8 +279,7 @@
      *
      * @param context The application context.
      */
-    @NonNull
-    public static TileUpdateRequester getUpdater(@NonNull Context context) {
+    public static @NonNull TileUpdateRequester getUpdater(@NonNull Context context) {
 
         List<TileUpdateRequester> requesters = new ArrayList<>();
         requesters.add(new SysUiTileUpdateRequester(context));
@@ -313,8 +311,7 @@
      *     context} present in the carousel, or a value based on platform-specific fallback
      *     behavior.
      */
-    @NonNull
-    public static ListenableFuture<List<ActiveTileIdentifier>> getActiveTilesAsync(
+    public static @NonNull ListenableFuture<List<ActiveTileIdentifier>> getActiveTilesAsync(
             @NonNull Context context, @NonNull Executor executor) {
         if (useWearSdkImpl(context)
                 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
@@ -325,8 +322,7 @@
     }
 
     @VisibleForTesting
-    @NonNull
-    static ListenableFuture<List<ActiveTileIdentifier>> getActiveTilesAsyncLegacy(
+    static @NonNull ListenableFuture<List<ActiveTileIdentifier>> getActiveTilesAsyncLegacy(
             @NonNull Context context,
             @NonNull Executor executor,
             @NonNull TimeSourceClock timeSourceClock) {
@@ -344,8 +340,7 @@
     private TileProvider.Stub mBinder;
 
     @Override
-    @Nullable
-    public IBinder onBind(@NonNull Intent intent) {
+    public @Nullable IBinder onBind(@NonNull Intent intent) {
         if (ACTION_BIND_TILE_PROVIDER.equals(intent.getAction())) {
             if (mBinder == null) {
                 mBinder = new TileProviderWrapper(this, new Handler(getMainLooper()));
@@ -697,8 +692,7 @@
                     });
         }
 
-        @NonNull
-        private static Optional<TileInteractionEvent> tileInteractionEventFromProto(
+        private static @NonNull Optional<TileInteractionEvent> tileInteractionEventFromProto(
                 TileInteractionEventData data) {
             try {
                 return Optional.of(
@@ -755,8 +749,7 @@
 
     @RequiresApi(34)
     private static class Api34Impl {
-        @NonNull
-        static ListenableFuture<List<ActiveTileIdentifier>> getActiveTilesAsync(
+        static @NonNull ListenableFuture<List<ActiveTileIdentifier>> getActiveTilesAsync(
                 @NonNull TilesManager tilesManager, @NonNull Executor executor) {
             return CallbackToFutureAdapter.getFuture(
                     completer -> {
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileUpdateRequestData.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileUpdateRequestData.java
index 1907b70..d2e7c82 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileUpdateRequestData.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileUpdateRequestData.java
@@ -16,9 +16,10 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
+import org.jspecify.annotations.NonNull;
+
 /**
  * Holder for parameters, used when a Tile update request is triggered. This is currently a
  * placeholder to allow for future expansion, and should be filled in with an empty byte array.
@@ -30,7 +31,7 @@
     public static final Creator<TileUpdateRequestData> CREATOR =
             newCreator(TileUpdateRequestData.class, TileUpdateRequestData::new);
 
-    private TileUpdateRequestData(@NonNull byte[] params, int version) {
+    private TileUpdateRequestData(byte @NonNull [] params, int version) {
         super(params, version);
     }
 
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileUpdateRequester.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileUpdateRequester.java
index 23f8def..bf0a573 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileUpdateRequester.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TileUpdateRequester.java
@@ -16,7 +16,7 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 /**
  * Interface used for a Tile Service to notify a Tile Renderer that it should fetch a new Timeline
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TimelineBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TimelineBuilders.java
index 9ec8f9e..d5da952 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TimelineBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TimelineBuilders.java
@@ -16,12 +16,13 @@
 
 package androidx.wear.tiles;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.proto.TimelineProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -62,13 +63,11 @@
             return mImpl.getEndMillis();
         }
 
-        @NonNull
-        static TimeInterval fromProto(@NonNull TimelineProto.TimeInterval proto) {
+        static @NonNull TimeInterval fromProto(TimelineProto.@NonNull TimeInterval proto) {
             return new TimeInterval(proto);
         }
 
-        @NonNull
-        TimelineProto.TimeInterval toProto() {
+        TimelineProto.@NonNull TimeInterval toProto() {
             return mImpl;
         }
 
@@ -80,22 +79,19 @@
             public Builder() {}
 
             /** Sets starting point of the time interval, in milliseconds since the Unix epoch. */
-            @NonNull
-            public Builder setStartMillis(long startMillis) {
+            public @NonNull Builder setStartMillis(long startMillis) {
                 mImpl.setStartMillis(startMillis);
                 return this;
             }
 
             /** Sets end point of the time interval, in milliseconds since the Unix epoch. */
-            @NonNull
-            public Builder setEndMillis(long endMillis) {
+            public @NonNull Builder setEndMillis(long endMillis) {
                 mImpl.setEndMillis(endMillis);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public TimeInterval build() {
+            public @NonNull TimeInterval build() {
                 return TimeInterval.fromProto(mImpl.build());
             }
         }
@@ -110,8 +106,7 @@
         }
 
         /** Gets the validity period for this timeline entry. Intended for testing purposes only. */
-        @Nullable
-        public TimeInterval getValidity() {
+        public @Nullable TimeInterval getValidity() {
             if (mImpl.hasValidity()) {
                 return TimeInterval.fromProto(mImpl.getValidity());
             } else {
@@ -120,8 +115,7 @@
         }
 
         /** Gets the contents of this timeline entry. Intended for testing purposes only. */
-        @Nullable
-        public LayoutElementBuilders.Layout getLayout() {
+        public LayoutElementBuilders.@Nullable Layout getLayout() {
             if (mImpl.hasLayout()) {
                 return LayoutElementBuilders.Layout.fromProto(mImpl.getLayout());
             } else {
@@ -130,23 +124,20 @@
         }
 
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static TimelineEntry fromProto(@NonNull TimelineProto.TimelineEntry proto) {
+        public static @NonNull TimelineEntry fromProto(TimelineProto.@NonNull TimelineEntry proto) {
             return new TimelineEntry(proto);
         }
 
         /** Returns the {@link TimelineEntry} object containing the given layout element. */
-        @NonNull
-        public static TimelineEntry fromLayoutElement(
-                @NonNull LayoutElementBuilders.LayoutElement layoutElement) {
+        public static @NonNull TimelineEntry fromLayoutElement(
+                LayoutElementBuilders.@NonNull LayoutElement layoutElement) {
             return new Builder()
                     .setLayout(LayoutElementBuilders.Layout.fromLayoutElement(layoutElement))
                     .build();
         }
 
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public TimelineProto.TimelineEntry toProto() {
+        public TimelineProto.@NonNull TimelineEntry toProto() {
             return mImpl;
         }
 
@@ -158,22 +149,19 @@
             public Builder() {}
 
             /** Sets the validity period for this timeline entry. */
-            @NonNull
-            public Builder setValidity(@NonNull TimeInterval validity) {
+            public @NonNull Builder setValidity(@NonNull TimeInterval validity) {
                 mImpl.setValidity(validity.toProto());
                 return this;
             }
 
             /** Sets the contents of this timeline entry. */
-            @NonNull
-            public Builder setLayout(@NonNull LayoutElementBuilders.Layout layout) {
+            public @NonNull Builder setLayout(LayoutElementBuilders.@NonNull Layout layout) {
                 mImpl.setLayout(layout.toProto());
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public TimelineEntry build() {
+            public @NonNull TimelineEntry build() {
                 return TimelineEntry.fromProto(mImpl.build());
             }
         }
@@ -201,8 +189,7 @@
         }
 
         /** Gets the entries in a timeline. Intended for testing purposes only. */
-        @NonNull
-        public List<TimelineEntry> getTimelineEntries() {
+        public @NonNull List<TimelineEntry> getTimelineEntries() {
             List<TimelineEntry> list = new ArrayList<>();
             for (TimelineProto.TimelineEntry item : mImpl.getTimelineEntriesList()) {
                 list.add(TimelineEntry.fromProto(item));
@@ -211,23 +198,20 @@
         }
 
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public static Timeline fromProto(@NonNull TimelineProto.Timeline proto) {
+        public static @NonNull Timeline fromProto(TimelineProto.@NonNull Timeline proto) {
             return new Timeline(proto);
         }
 
         /** Returns the {@link Timeline} object containing the given layout element. */
-        @NonNull
-        public static Timeline fromLayoutElement(
-                @NonNull LayoutElementBuilders.LayoutElement layoutElement) {
+        public static @NonNull Timeline fromLayoutElement(
+                LayoutElementBuilders.@NonNull LayoutElement layoutElement) {
             return new Builder()
                     .addTimelineEntry(TimelineEntry.fromLayoutElement(layoutElement))
                     .build();
         }
 
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @NonNull
-        public TimelineProto.Timeline toProto() {
+        public TimelineProto.@NonNull Timeline toProto() {
             return mImpl;
         }
 
@@ -239,15 +223,13 @@
             public Builder() {}
 
             /** Adds one item to the entries in a timeline. */
-            @NonNull
-            public Builder addTimelineEntry(@NonNull TimelineEntry timelineEntry) {
+            public @NonNull Builder addTimelineEntry(@NonNull TimelineEntry timelineEntry) {
                 mImpl.addTimelineEntries(timelineEntry.toProto());
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public Timeline build() {
+            public @NonNull Timeline build() {
                 return Timeline.fromProto(mImpl.build());
             }
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TypeBuilders.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TypeBuilders.java
index 60c066c..a0f0a19 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TypeBuilders.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/TypeBuilders.java
@@ -18,13 +18,14 @@
 
 import android.annotation.SuppressLint;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.proto.TypesProto;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
+
 /**
  * Builders for extensible primitive types used by layout elements.
  *
@@ -37,7 +38,7 @@
     /** An int32 type. */
     public static final class Int32Prop {
         private final TypesProto.Int32Prop mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         Int32Prop(TypesProto.Int32Prop impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -51,18 +52,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static Int32Prop fromProto(@NonNull TypesProto.Int32Prop proto) {
+        static @NonNull Int32Prop fromProto(TypesProto.@NonNull Int32Prop proto) {
             return new Int32Prop(proto, null);
         }
 
-        @NonNull
-        TypesProto.Int32Prop toProto() {
+        TypesProto.@NonNull Int32Prop toProto() {
             return mImpl;
         }
 
@@ -74,16 +72,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(int value) {
+            public @NonNull Builder setValue(int value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(1, value);
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public Int32Prop build() {
+            public @NonNull Int32Prop build() {
                 return new Int32Prop(mImpl.build(), mFingerprint);
             }
         }
@@ -92,7 +88,7 @@
     /** A string type. */
     public static final class StringProp {
         private final TypesProto.StringProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         StringProp(TypesProto.StringProp impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -100,25 +96,21 @@
         }
 
         /** Gets the value. Intended for testing purposes only. */
-        @NonNull
-        public String getValue() {
+        public @NonNull String getValue() {
             return mImpl.getValue();
         }
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static StringProp fromProto(@NonNull TypesProto.StringProp proto) {
+        static @NonNull StringProp fromProto(TypesProto.@NonNull StringProp proto) {
             return new StringProp(proto, null);
         }
 
-        @NonNull
-        TypesProto.StringProp toProto() {
+        TypesProto.@NonNull StringProp toProto() {
             return mImpl;
         }
 
@@ -130,16 +122,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(@NonNull String value) {
+            public @NonNull Builder setValue(@NonNull String value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(1, value.hashCode());
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public StringProp build() {
+            public @NonNull StringProp build() {
                 return new StringProp(mImpl.build(), mFingerprint);
             }
         }
@@ -148,7 +138,7 @@
     /** A float type. */
     public static final class FloatProp {
         private final TypesProto.FloatProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         FloatProp(TypesProto.FloatProp impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -162,18 +152,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static FloatProp fromProto(@NonNull TypesProto.FloatProp proto) {
+        static @NonNull FloatProp fromProto(TypesProto.@NonNull FloatProp proto) {
             return new FloatProp(proto, null);
         }
 
-        @NonNull
-        TypesProto.FloatProp toProto() {
+        TypesProto.@NonNull FloatProp toProto() {
             return mImpl;
         }
 
@@ -185,16 +172,14 @@
             public Builder() {}
 
             /** Sets the value. */
-            @NonNull
-            public Builder setValue(float value) {
+            public @NonNull Builder setValue(float value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(1, Float.floatToIntBits(value));
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public FloatProp build() {
+            public @NonNull FloatProp build() {
                 return new FloatProp(mImpl.build(), mFingerprint);
             }
         }
@@ -203,7 +188,7 @@
     /** A boolean type. */
     public static final class BoolProp {
         private final TypesProto.BoolProp mImpl;
-        @Nullable private final Fingerprint mFingerprint;
+        private final @Nullable Fingerprint mFingerprint;
 
         BoolProp(TypesProto.BoolProp impl, @Nullable Fingerprint fingerprint) {
             this.mImpl = impl;
@@ -217,18 +202,15 @@
 
         /** Get the fingerprint for this object, or null if unknown. */
         @RestrictTo(Scope.LIBRARY_GROUP)
-        @Nullable
-        public Fingerprint getFingerprint() {
+        public @Nullable Fingerprint getFingerprint() {
             return mFingerprint;
         }
 
-        @NonNull
-        static BoolProp fromProto(@NonNull TypesProto.BoolProp proto) {
+        static @NonNull BoolProp fromProto(TypesProto.@NonNull BoolProp proto) {
             return new BoolProp(proto, null);
         }
 
-        @NonNull
-        TypesProto.BoolProp toProto() {
+        TypesProto.@NonNull BoolProp toProto() {
             return mImpl;
         }
 
@@ -241,16 +223,14 @@
 
             /** Sets the value. */
             @SuppressLint("MissingGetterMatchingBuilder")
-            @NonNull
-            public Builder setValue(boolean value) {
+            public @NonNull Builder setValue(boolean value) {
                 mImpl.setValue(value);
                 mFingerprint.recordPropertyUpdate(1, Boolean.hashCode(value));
                 return this;
             }
 
             /** Builds an instance from accumulated values. */
-            @NonNull
-            public BoolProp build() {
+            public @NonNull BoolProp build() {
                 return new BoolProp(mImpl.build(), mFingerprint);
             }
         }
diff --git a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ViewerTileUpdateRequester.java b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ViewerTileUpdateRequester.java
index cffb82d..a18a073 100644
--- a/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ViewerTileUpdateRequester.java
+++ b/wear/tiles/tiles/src/main/java/androidx/wear/tiles/ViewerTileUpdateRequester.java
@@ -19,7 +19,7 @@
 import android.content.Context;
 import android.content.Intent;
 
-import androidx.annotation.NonNull;
+import org.jspecify.annotations.NonNull;
 
 /**
  * {@link TileUpdateRequester} which notifies the viewer that it should fetch a new version of the
diff --git a/wear/tiles/tiles/src/test/java/androidx/wear/tiles/CompositeTileUpdateRequesterTest.java b/wear/tiles/tiles/src/test/java/androidx/wear/tiles/CompositeTileUpdateRequesterTest.java
index 5c0133e..5d62133 100644
--- a/wear/tiles/tiles/src/test/java/androidx/wear/tiles/CompositeTileUpdateRequesterTest.java
+++ b/wear/tiles/tiles/src/test/java/androidx/wear/tiles/CompositeTileUpdateRequesterTest.java
@@ -21,8 +21,6 @@
 import android.content.Intent;
 import android.os.IBinder;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.concurrent.futures.ResolvableFuture;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.wear.protolayout.ResourceBuilders;
@@ -30,6 +28,8 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.util.concurrent.ListenableFuture;
 
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -71,27 +71,24 @@
     }
 
     private static class FakeService extends TileService {
-        @NonNull
         @Override
-        protected ListenableFuture<TileBuilders.Tile> onTileRequest(
-                @NonNull RequestBuilders.TileRequest requestParams) {
+        protected @NonNull ListenableFuture<TileBuilders.Tile> onTileRequest(
+                RequestBuilders.@NonNull TileRequest requestParams) {
             ResolvableFuture<TileBuilders.Tile> f = ResolvableFuture.create();
             f.set(null);
             return f;
         }
 
-        @NonNull
         @Override
-        protected ListenableFuture<ResourceBuilders.Resources> onTileResourcesRequest(
-                @NonNull RequestBuilders.ResourcesRequest requestParams) {
+        protected @NonNull ListenableFuture<ResourceBuilders.Resources> onTileResourcesRequest(
+                RequestBuilders.@NonNull ResourcesRequest requestParams) {
             ResolvableFuture<ResourceBuilders.Resources> f = ResolvableFuture.create();
             f.set(null);
             return f;
         }
 
-        @Nullable
         @Override
-        public IBinder onBind(Intent intent) {
+        public @Nullable IBinder onBind(Intent intent) {
             return null;
         }
     }
diff --git a/wear/tiles/tiles/src/test/java/androidx/wear/tiles/ProtoParcelableTest.java b/wear/tiles/tiles/src/test/java/androidx/wear/tiles/ProtoParcelableTest.java
index d0032c7..92e0dc8 100644
--- a/wear/tiles/tiles/src/test/java/androidx/wear/tiles/ProtoParcelableTest.java
+++ b/wear/tiles/tiles/src/test/java/androidx/wear/tiles/ProtoParcelableTest.java
@@ -27,7 +27,6 @@
 import org.junit.runner.RunWith;
 import org.robolectric.annotation.internal.DoNotInstrument;
 
-
 @RunWith(AndroidJUnit4.class)
 @DoNotInstrument // See http://g/robolectric-users/fTi2FRXgyGA/m/PkB0wYuwBgAJ
 public final class ProtoParcelableTest {
diff --git a/wear/tiles/tiles/src/test/java/androidx/wear/tiles/TileServiceTest.java b/wear/tiles/tiles/src/test/java/androidx/wear/tiles/TileServiceTest.java
index 5db6074..2b87fe2 100644
--- a/wear/tiles/tiles/src/test/java/androidx/wear/tiles/TileServiceTest.java
+++ b/wear/tiles/tiles/src/test/java/androidx/wear/tiles/TileServiceTest.java
@@ -39,8 +39,6 @@
 import android.os.Looper;
 import android.os.RemoteException;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.wear.protolayout.ResourceBuilders.Resources;
@@ -66,6 +64,8 @@
 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 org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -1000,8 +1000,7 @@
         }
 
         @Override
-        @NonNull
-        protected ListenableFuture<TileBuilders.Tile> onTileRequest(
+        protected @NonNull ListenableFuture<TileBuilders.Tile> onTileRequest(
                 @NonNull TileRequest requestParams) {
             mTileRequestParams = requestParams;
             mTileId = requestParams.getTileId();
@@ -1012,8 +1011,7 @@
         }
 
         @Override
-        @NonNull
-        protected ListenableFuture<Resources> onTileResourcesRequest(
+        protected @NonNull ListenableFuture<Resources> onTileResourcesRequest(
                 @NonNull ResourcesRequest requestParams) {
             mResourcesRequestParams = requestParams;
             mTileId = requestParams.getTileId();
@@ -1051,16 +1049,14 @@
         protected void onTileLeaveEvent(@NonNull TileLeaveEvent requestParams) {}
 
         @Override
-        @NonNull
-        protected ListenableFuture<TileBuilders.Tile> onTileRequest(
+        protected @NonNull ListenableFuture<TileBuilders.Tile> onTileRequest(
                 @NonNull TileRequest requestParams) {
             return Futures.immediateFuture(DUMMY_TILE_TO_RETURN);
         }
 
         @Override
-        @NonNull
         @SuppressWarnings("deprecation") // for backward compatibility
-        protected ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources>
+        protected @NonNull ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources>
                 onResourcesRequest(@NonNull ResourcesRequest requestParams) {
             androidx.wear.tiles.ResourceBuilders.Resources resources =
                     new androidx.wear.tiles.ResourceBuilders.Resources.Builder()