diff --git a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecBuilder.java b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecBuilder.java
index be4d3a0..458f41b 100644
--- a/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecBuilder.java
+++ b/appactions/interaction/interaction-capabilities-core/src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeSpecBuilder.java
@@ -166,7 +166,7 @@
             CheckedInterfaces.Function<Value, V> fromValue) {
         return bindFieldInternal(
                 name,
-                /** valueGetter= */
+                /* valueGetter= */
                 object -> {
                     List<V> valueList = valueGetter.apply(object);
                     if (valueList == null) {
@@ -178,7 +178,7 @@
                                     .filter(Objects::nonNull)
                                     .collect(toImmutableList()));
                 },
-                /** valueSetter= */
+                /* valueSetter= */
                 (builder, repeatedValue) -> {
                     if (repeatedValue.getListValue() == null) {
                         return;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
index f67016d..7d16378 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
@@ -943,7 +943,7 @@
                 // Floating windows can never have an action bar, reset the flags
                 mHasActionBar = mOverlayActionBar = false;
             } else if (mHasActionBar) {
-                /**
+                /*
                  * This needs some explanation. As we can not use the android:theme attribute
                  * pre-L, we emulate it by manually creating a LayoutInflater using a
                  * ContextThemeWrapper pointing to actionBarTheme.
@@ -966,7 +966,7 @@
                         .findViewById(R.id.decor_content_parent);
                 mDecorContentParent.setWindowCallback(getWindowCallback());
 
-                /**
+                /*
                  * Propagate features to DecorContentParent
                  */
                 if (mOverlayActionBar) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
index 9510f13..414f5a3 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
@@ -696,7 +696,7 @@
                 }
             }
 
-            /**
+            /*
              * If applicable, compute the additional offset to the child's baseline
              * we'll need later when asked {@link #getBaseline}.
              */
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java
index f53658d..116a26a 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java
@@ -1158,7 +1158,7 @@
         if (mDropDownList == null) {
             Context context = mContext;
 
-            /**
+            /*
              * This Runnable exists for the sole purpose of checking if the view layout has got
              * completed and if so call showDropDown to display the drop down. This is used to show
              * the drop down as soon as possible after user opens up the search dialog, without
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SuggestionsAdapter.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SuggestionsAdapter.java
index acba2f1..363e03c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SuggestionsAdapter.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SuggestionsAdapter.java
@@ -142,7 +142,7 @@
     public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
         if (DBG) Log.d(LOG_TAG, "runQueryOnBackgroundThread(" + constraint + ")");
         String query = (constraint == null) ? "" : constraint.toString();
-        /**
+        /*
          * for in app search we show the progress spinner until the cursor is returned with
          * the results.
          */
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyPath.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyPath.java
index 6fb1440..e0557a6 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyPath.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyPath.java
@@ -313,8 +313,7 @@
         @NonNull
         public String toString() {
             if (mPropertyIndex != NON_REPEATED_CARDINALITY) {
-                return new StringBuilder(mPropertyName)
-                        .append("[").append(mPropertyIndex).append("]").toString();
+                return mPropertyName + "[" + mPropertyIndex + "]";
             }
             return mPropertyName;
         }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt
index 3d5faef..8e90dc2 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt
@@ -118,7 +118,7 @@
             it.isCanBeResolved = true
             it.exclude(group = "com.google.errorprone", module = "javac")
         }
-    dependencies.add(ERROR_PRONE_CONFIGURATION, ERROR_PRONE_VERSION)
+    dependencies.add(ERROR_PRONE_CONFIGURATION, getLibraryByName("errorProne"))
     return errorProneConfiguration
 }
 
@@ -178,6 +178,12 @@
                     "-Xep:DoNotClaimAnnotations:OFF",
                     "-Xep:AlreadyChecked:OFF",
                     "-Xep:StringSplitter:OFF",
+                    "-Xep:NonApiType:OFF",
+                    "-Xep:StringCaseLocaleUsage:OFF",
+                    "-Xep:LabelledBreakTarget:OFF",
+                    "-Xep:Finalize:OFF",
+                    "-Xep:AddressSelection:OFF",
+                    "-Xep:StringCharset:OFF",
 
                     // We allow inter library RestrictTo usage.
                     "-Xep:RestrictTo:OFF",
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/license/CheckExternalDependencyLicensesTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/license/CheckExternalDependencyLicensesTask.kt
index e3ec845..4657e60 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/license/CheckExternalDependencyLicensesTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/license/CheckExternalDependencyLicensesTask.kt
@@ -143,6 +143,11 @@
                                         .filterNot { it.group?.startsWith("com.android") == true }
                                         .filterNot { it.group?.startsWith("android.arch") == true }
                                         .filterNot { it.group?.startsWith("androidx") == true }
+                                        .filterNot {
+                                            // listablefuture conflicts with guava, skip it
+                                            it.group.equals("com.google.guava") &&
+                                                it.name.equals("listenablefuture")
+                                        }
                                 }
                                 .forEach { checkerConfig.dependencies.add(it) }
                         }
diff --git a/car/app/app-automotive/src/main/java/androidx/car/app/hardware/common/CarPropertyProfile.java b/car/app/app-automotive/src/main/java/androidx/car/app/hardware/common/CarPropertyProfile.java
index 932572b..7cb0b85 100644
--- a/car/app/app-automotive/src/main/java/androidx/car/app/hardware/common/CarPropertyProfile.java
+++ b/car/app/app-automotive/src/main/java/androidx/car/app/hardware/common/CarPropertyProfile.java
@@ -61,19 +61,19 @@
             FACE,
             FLOOR,
             DEFROST,
-            /**
+            /*
              * FACE_FLOOR = FACE | FLOOR
              */
             FACE_FLOOR,
-            /**
+            /*
              * FLOOR_DEFROST = FLOOR | DEFROST
              */
             FLOOR_DEFROST,
-            /**
+            /*
              * FACE_DEFROST = FACE | DEFROST | FLOOR
              */
             FACE_DEFROST,
-            /**
+            /*
              * FACE_FLOOR_DEFROST = FACE | FLOOR | DEFROST
              */
             FACE_FLOOR_DEFROST
diff --git a/car/app/app-samples/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/SearchScreen.java b/car/app/app-samples/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/SearchScreen.java
index 72a8f01..3af970e 100644
--- a/car/app/app-samples/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/SearchScreen.java
+++ b/car/app/app-samples/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/SearchScreen.java
@@ -104,7 +104,6 @@
         }
         mItemList = builder.build();
         invalidate();
-        return;
     }
 
     void onClickSearch(@NonNull String searchText) {
diff --git a/car/app/app/src/main/java/androidx/car/app/hardware/common/CarUnit.java b/car/app/app/src/main/java/androidx/car/app/hardware/common/CarUnit.java
index 907b5c2..9111b31 100644
--- a/car/app/app/src/main/java/androidx/car/app/hardware/common/CarUnit.java
+++ b/car/app/app/src/main/java/androidx/car/app/hardware/common/CarUnit.java
@@ -59,8 +59,8 @@
     @CarDistanceUnit
     public static final int METER = 2;
 
-    @CarDistanceUnit
     /** Kilometer unit. */
+    @CarDistanceUnit
     public static final int KILOMETER = 3;
 
     /** Miles unit. */
diff --git a/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/Motion.java b/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/Motion.java
index 044ff78..f2dc0ee 100644
--- a/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/Motion.java
+++ b/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/Motion.java
@@ -1572,7 +1572,6 @@
         vmat.setTranslationVelocity(osc_x, osc_y, position);
         vmat.setScaleVelocity(osc_sx, osc_sy, position);
         vmat.applyTransform(locationX, locationY, width, height, mAnchorDpDt);
-        return;
     }
 
     // @TODO: add description
diff --git a/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/utils/LinearCurveFit.java b/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/utils/LinearCurveFit.java
index 040a8a6..cc92310 100644
--- a/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/utils/LinearCurveFit.java
+++ b/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/utils/LinearCurveFit.java
@@ -269,7 +269,6 @@
                 break;
             }
         }
-        return;
     }
 
     // @TODO: add description
diff --git a/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/utils/MonotonicCurveFit.java b/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/utils/MonotonicCurveFit.java
index d68c3c5..01fb070 100644
--- a/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/utils/MonotonicCurveFit.java
+++ b/constraintlayout/constraintlayout-core/src/main/java/androidx/constraintlayout/core/motion/utils/MonotonicCurveFit.java
@@ -243,7 +243,6 @@
                 break;
             }
         }
-        return;
     }
 
     @Override
diff --git a/constraintlayout/constraintlayout/src/main/java/androidx/constraintlayout/motion/widget/MotionController.java b/constraintlayout/constraintlayout/src/main/java/androidx/constraintlayout/motion/widget/MotionController.java
index af29c05..4dc61c2 100644
--- a/constraintlayout/constraintlayout/src/main/java/androidx/constraintlayout/motion/widget/MotionController.java
+++ b/constraintlayout/constraintlayout/src/main/java/androidx/constraintlayout/motion/widget/MotionController.java
@@ -1599,7 +1599,6 @@
         vmat.setTranslationVelocity(osc_x, osc_y, position);
         vmat.setScaleVelocity(osc_sx, osc_sy, position);
         vmat.applyTransform(locationX, locationY, width, height, mAnchorDpDt);
-        return;
     }
 
     /**
diff --git a/core/core-appdigest/src/main/java/androidx/core/appdigest/VerityTreeBuilder.java b/core/core-appdigest/src/main/java/androidx/core/appdigest/VerityTreeBuilder.java
index 575c85d..37870ca 100644
--- a/core/core-appdigest/src/main/java/androidx/core/appdigest/VerityTreeBuilder.java
+++ b/core/core-appdigest/src/main/java/androidx/core/appdigest/VerityTreeBuilder.java
@@ -210,7 +210,7 @@
             DataSource dataSource, ByteBuffer dataSink) throws IOException {
         final int chunks = (int) divideRoundup(size, CHUNK_SIZE);
 
-        /** Single IO operation size, in chunks. */
+        /* Single IO operation size, in chunks. */
         final int ioSizeChunks = MAX_PREFETCH_CHUNKS;
 
         final byte[][] hashes = new byte[chunks][];
diff --git a/core/core-i18n/src/main/java/androidx/core/i18n/messageformat_icu/simple/PluralRules.java b/core/core-i18n/src/main/java/androidx/core/i18n/messageformat_icu/simple/PluralRules.java
index 157b8fc..0822614 100644
--- a/core/core-i18n/src/main/java/androidx/core/i18n/messageformat_icu/simple/PluralRules.java
+++ b/core/core-i18n/src/main/java/androidx/core/i18n/messageformat_icu/simple/PluralRules.java
@@ -9,6 +9,9 @@
 
 import android.annotation.SuppressLint;
 
+import androidx.annotation.RestrictTo;
+import androidx.core.i18n.messageformat_icu.util.Output;
+
 import java.io.IOException;
 import java.io.NotSerializableException;
 import java.io.ObjectInputStream;
@@ -27,9 +30,6 @@
 import java.util.TreeSet;
 import java.util.regex.Pattern;
 
-import androidx.annotation.RestrictTo;
-import androidx.core.i18n.messageformat_icu.util.Output;
-
 /**
  * <p>
  * Defines rules for mapping non-negative numeric values onto a small set of keywords.
@@ -258,7 +258,7 @@
             return PluralRulesLoader.loader;
         }
 
-        /**
+        /*
          * Returns whether or not there are overrides.
          * icu_annot::internal CLDR
          * This API is ICU internal only.
diff --git a/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java b/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
index 44e387b..117dc59 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
@@ -630,7 +630,7 @@
 
         @DoNotInline
         static Notification.Builder setSound(Notification.Builder builder, Uri sound,
-                Object audioAttributes /** AudioAttributes */) {
+                Object audioAttributes /* AudioAttributes */) {
             return builder.setSound(sound, (AudioAttributes) audioAttributes);
         }
     }
@@ -652,7 +652,7 @@
 
         @DoNotInline
         static Notification.Builder setSmallIcon(Notification.Builder builder,
-                Object icon /** Icon */) {
+                Object icon /* Icon */) {
             return builder.setSmallIcon((Icon) icon);
         }
 
@@ -789,7 +789,7 @@
 
         @DoNotInline
         static Notification.Builder setLocusId(Notification.Builder builder,
-                Object locusId /** LocusId */) {
+                Object locusId /* LocusId */) {
             return builder.setLocusId((LocusId) locusId);
         }
 
diff --git a/core/core/src/main/java/androidx/core/graphics/TypefaceCompat.java b/core/core/src/main/java/androidx/core/graphics/TypefaceCompat.java
index 0df99eb..1a9f76b 100644
--- a/core/core/src/main/java/androidx/core/graphics/TypefaceCompat.java
+++ b/core/core/src/main/java/androidx/core/graphics/TypefaceCompat.java
@@ -105,17 +105,15 @@
      */
     private static String createResourceUid(final Resources resources, int id, String path,
             int cookie, int style) {
-        return new StringBuilder(
-                resources.getResourcePackageName(id))
-                .append('-')
-                .append(path)
-                .append('-')
-                .append(cookie)
-                .append('-')
-                .append(id)
-                .append('-')
-                .append(style)
-                .toString();
+        return resources.getResourcePackageName(id)
+                + '-'
+                + path
+                + '-'
+                + cookie
+                + '-'
+                + id
+                + '-'
+                + style;
     }
 
     /**
diff --git a/core/core/src/main/java/androidx/core/provider/FontRequest.java b/core/core/src/main/java/androidx/core/provider/FontRequest.java
index 5b393d4..7088203 100644
--- a/core/core/src/main/java/androidx/core/provider/FontRequest.java
+++ b/core/core/src/main/java/androidx/core/provider/FontRequest.java
@@ -90,8 +90,7 @@
             @NonNull String providerPackage,
             @NonNull String query
     ) {
-        return new StringBuilder(providerAuthority).append("-").append(providerPackage)
-                .append("-").append(query).toString();
+        return providerAuthority + "-" + providerPackage + "-" + query;
     }
 
     /**
diff --git a/core/core/src/main/java/androidx/core/text/BidiFormatter.java b/core/core/src/main/java/androidx/core/text/BidiFormatter.java
index 66d64aa..7f9b89e 100644
--- a/core/core/src/main/java/androidx/core/text/BidiFormatter.java
+++ b/core/core/src/main/java/androidx/core/text/BidiFormatter.java
@@ -122,6 +122,7 @@
     /**
      * Empty string constant.
      */
+    @SuppressWarnings("InlineTrivialConstant")
     private static final String EMPTY_STRING = "";
 
     /**
diff --git a/emoji/emoji/src/main/java/androidx/emoji/widget/ExtractButtonCompat.java b/emoji/emoji/src/main/java/androidx/emoji/widget/ExtractButtonCompat.java
index 07ef9fc..b56a046 100644
--- a/emoji/emoji/src/main/java/androidx/emoji/widget/ExtractButtonCompat.java
+++ b/emoji/emoji/src/main/java/androidx/emoji/widget/ExtractButtonCompat.java
@@ -58,7 +58,7 @@
      */
     @Override
     public boolean hasWindowFocus() {
-        return isEnabled() && getVisibility() == VISIBLE ? true : false;
+        return isEnabled() && getVisibility() == VISIBLE;
     }
 
     /**
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index d408a73..291df2d 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -133,6 +133,7 @@
 espressoIntents = { module = "androidx.test.espresso:espresso-intents", version.ref = "espresso" }
 espressoRemote = { module = "androidx.test.espresso:espresso-remote", version.ref = "espresso" }
 espressoWeb = { module = "androidx.test.espresso:espresso-web", version.ref = "espresso" }
+errorProne = { module = "com.google.errorprone:error_prone_core", version = "2.23.0" }
 findbugs = { module = "com.google.code.findbugs:jsr305", version = "3.0.2" }
 firebaseAppindexing = { module = "com.google.firebase:firebase-appindexing", version = "19.2.0" }
 freemarker = { module = "org.freemarker:freemarker", version = "2.3.31"}
diff --git a/gradle/verification-keyring.keys b/gradle/verification-keyring.keys
index 3601ea2..416cb9f 100644
--- a/gradle/verification-keyring.keys
+++ b/gradle/verification-keyring.keys
@@ -3201,6 +3201,40 @@
 =FgFQ
 -----END PGP PUBLIC KEY BLOCK-----
 
+pub    D945E643368FEF62
+sub    A8D88140C35897AD
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBFzJyTIBDADO8siKg1NQb8jNPo2DPC5CpPwYDPUjlX7Nq/FMBYeY51JlxKLD
+jmH/R5u6LuY0v7gSodrJqE0FUjz8LgN9+Yp1f1szqxeYHLsAVahO4cafG/sITYvr
+vscz83dU6wpXxhFgTryUclqj0Nf6xZ9kxGAbMgP4JUZGkME/q3e6gOnwfLvbM4/t
+M8XcjLLJNKdBHQGAcuQJxTp0db4ets+VgleqQKOPP2g+oeF92uiAZ5Wz3AEMRvnH
+9TjGwXxiHv4gganqbaBq4cPH+bqoi1xxqSnj6qctbZxkfsICW03MF7Ydf16vbzzH
+48KxYkBN83M2jOIptrZVsP3vLJzelsZTI/rkmgyfigEsog+JD/1Za3+L7x8hWhY5
+arQ+QmSLJ7wyqccFexZO8gdtXkmfNQsIf/kFe1vifdRRYhuG0jrxXixa/zcj7VxZ
+waFrCbh5SqNMqhUoTwvB9WrH3BPOQGmURynvXAeklE1kR18rxiAO6Bp3QV7BGXEX
+ReYo+ITho5aGDhEAEQEAAbkBjQRcyckyAQwAwNKgqINPHy7O4nHdaaJxa6qNPBvD
+fxHsWR4mDcWlWWVBA2pQyQnvLDuNQ+QXK/+MHeYhZtuiV+SzS51ohkk+X4hSbFFk
+ngrgnY3gNJbeSNoaXIr4UgCNpBXGcUoS1pBo/XVMcgTSsmco+bH6D6152XdUEJEU
+SlXc+hcEI3H2SZT+c+nlwSv6PMdIlDjbCY8JZ+FPJxbA+QqYMJIrOA8RoTD1FWb9
+2nUxnxdEKgr3LVvfxFUAjRfXmpXHOxysZD4phzGgiqyg/fvBXdAv1fJx+zAhQSK+
+ac6TNSN62pAfwOXP+PiYWC8/T3wDZDi6YiTDLml2K2iA/2vrKuAbtIAQR409s5VF
+q9M41VbDdR/cjocNq199btp1nb9rbis6n27FGgCE7gj5IO2T3lmFnhwYIZNNhqfR
+Tz5hSvDLidvEDGv3RnYCP3NibZX1lqljlDTk7Y0EQ0DFyahDuWREdVGJ3mnO6k6b
+GMfZ4pgRyWkr4CLbD97W69aHbteZVOOS5HJRABEBAAGJAbwEGAEKACYWIQRxhrv5
+k1ZtjC9PftfZReZDNo/vYgUCXMnJMgIbDAUJA8JnAAAKCRDZReZDNo/vYhkzDACJ
+Bsiz7Anbo7UaD7sFOFNF5BXQA27kYpBSjDpNsezmfoOI0sVnBBlymQcmm2AM4wB9
+uSIeuUmc6/wzhfQgGzQnoKnSyLUO8sUOumeVSTobs7cKt7X67jbwVRn6xmgbHbtm
+fuKtsi+KlQYV7QM/BUiWVwQy42v9zfCPuverJbyU+ofR0DcrFmJkP+bQT9vhi63q
+80FU+BhX8chBg8Ag+B2R8odIYmNP2uHJJ2qzu6HKUE4G9CjXp12F12XMxjBdz84w
+ZHvuptSEUaooJPP7NNgPUpeM6DcXyZpuetWcb2WuYUohiyjIbDNTEx5SLy7zROUr
+LQvlhVpcqn1m6RfcgBnAjTqcO7q6EU1hNt6dtXGtCFhQ3+INbXe+6hmDW2xq6ucG
+6VvkMdAyAyUtYEvAlAl1IfZoPh2IvTtzNwBRb6LfNBVaNUfygcIhSy6zicGmblxt
++dxFH5w2bj/Anwt9rixdM/OxJGJQKBx7X2SR+9gEdzcOygAWwjL67zJ/DNIcZ70=
+=2pBJ
+-----END PGP PUBLIC KEY BLOCK-----
+
 pub    D9C565AA72BA2FDD
 uid    grpc-java-team-sonatype <grpc-java-team-sonatype@google.com>
 
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 25be538..64acb1c 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -247,6 +247,7 @@
             <trusting group="^com[.]sun($|([.].*))" regex="true"/>
          </trusted-key>
          <trusted-key id="713DA88BE50911535FE716F5208B0AB1D63011C7" group="org.apache.tomcat" name="annotations-api"/>
+         <trusted-key id="7186BBF993566D8C2F4F7ED7D945E643368FEF62" group="io.github.eisop"/>
          <trusted-key id="720746177725A89207A7075BFD5DEA07FCB690A8" group="org.codehaus.mojo"/>
          <trusted-key id="73976C9C39C1479B84E2641A5A68A2249128E2C6" group="com.google.crypto.tink" name="tink-android"/>
          <trusted-key id="748F15B2CF9BA8F024155E6ED7C92B70FA1C814D" group="org.apache.logging.log4j"/>
diff --git a/gridlayout/gridlayout/src/main/java/androidx/gridlayout/widget/GridLayout.java b/gridlayout/gridlayout/src/main/java/androidx/gridlayout/widget/GridLayout.java
index 27840bc..3936f41 100644
--- a/gridlayout/gridlayout/src/main/java/androidx/gridlayout/widget/GridLayout.java
+++ b/gridlayout/gridlayout/src/main/java/androidx/gridlayout/widget/GridLayout.java
@@ -919,8 +919,8 @@
     protected void onMeasure(int widthSpec, int heightSpec) {
         consistencyCheck();
 
-        /** If we have been called by {@link View#measure(int, int)}, one of width or height
-         *  is  likely to have changed. We must invalidate if so. */
+        /* If we have been called by {@link View#measure(int, int)}, one of width or height
+           is  likely to have changed. We must invalidate if so. */
         invalidateValues();
 
         int hPadding = getPaddingLeft() + getPaddingRight();
diff --git a/leanback/leanback/api/1.2.0-beta01.txt b/leanback/leanback/api/1.2.0-beta01.txt
index a9e0b33..6b44fa1 100644
--- a/leanback/leanback/api/1.2.0-beta01.txt
+++ b/leanback/leanback/api/1.2.0-beta01.txt
@@ -2338,7 +2338,7 @@
     method public void update(float);
   }
 
-  public static final class ParallaxTarget.DirectPropertyTarget<T extends java.lang.Object, V extends java.lang.Number> extends androidx.leanback.widget.ParallaxTarget {
+  public static final class ParallaxTarget.DirectPropertyTarget<T, V extends java.lang.Number> extends androidx.leanback.widget.ParallaxTarget {
     ctor public ParallaxTarget.DirectPropertyTarget(Object!, android.util.Property<T!,V!>!);
   }
 
diff --git a/leanback/leanback/api/current.txt b/leanback/leanback/api/current.txt
index a9e0b33..6b44fa1 100644
--- a/leanback/leanback/api/current.txt
+++ b/leanback/leanback/api/current.txt
@@ -2338,7 +2338,7 @@
     method public void update(float);
   }
 
-  public static final class ParallaxTarget.DirectPropertyTarget<T extends java.lang.Object, V extends java.lang.Number> extends androidx.leanback.widget.ParallaxTarget {
+  public static final class ParallaxTarget.DirectPropertyTarget<T, V extends java.lang.Number> extends androidx.leanback.widget.ParallaxTarget {
     ctor public ParallaxTarget.DirectPropertyTarget(Object!, android.util.Property<T!,V!>!);
   }
 
diff --git a/leanback/leanback/api/restricted_1.2.0-beta01.txt b/leanback/leanback/api/restricted_1.2.0-beta01.txt
index 69d9df6..ce850fbb 100644
--- a/leanback/leanback/api/restricted_1.2.0-beta01.txt
+++ b/leanback/leanback/api/restricted_1.2.0-beta01.txt
@@ -2586,7 +2586,7 @@
     method public void update(float);
   }
 
-  public static final class ParallaxTarget.DirectPropertyTarget<T extends java.lang.Object, V extends java.lang.Number> extends androidx.leanback.widget.ParallaxTarget {
+  public static final class ParallaxTarget.DirectPropertyTarget<T, V extends java.lang.Number> extends androidx.leanback.widget.ParallaxTarget {
     ctor public ParallaxTarget.DirectPropertyTarget(Object!, android.util.Property<T!,V!>!);
   }
 
diff --git a/leanback/leanback/api/restricted_current.txt b/leanback/leanback/api/restricted_current.txt
index 69d9df6..ce850fbb 100644
--- a/leanback/leanback/api/restricted_current.txt
+++ b/leanback/leanback/api/restricted_current.txt
@@ -2586,7 +2586,7 @@
     method public void update(float);
   }
 
-  public static final class ParallaxTarget.DirectPropertyTarget<T extends java.lang.Object, V extends java.lang.Number> extends androidx.leanback.widget.ParallaxTarget {
+  public static final class ParallaxTarget.DirectPropertyTarget<T, V extends java.lang.Number> extends androidx.leanback.widget.ParallaxTarget {
     ctor public ParallaxTarget.DirectPropertyTarget(Object!, android.util.Property<T!,V!>!);
   }
 
diff --git a/leanback/leanback/src/main/java/androidx/leanback/app/DetailsFragment.java b/leanback/leanback/src/main/java/androidx/leanback/app/DetailsFragment.java
index bf621a7..2d78042 100644
--- a/leanback/leanback/src/main/java/androidx/leanback/app/DetailsFragment.java
+++ b/leanback/leanback/src/main/java/androidx/leanback/app/DetailsFragment.java
@@ -229,7 +229,7 @@
     @Override
     void createStateMachineTransitions() {
         super.createStateMachineTransitions();
-        /**
+        /*
          * Part 1: Processing enter transitions after fragment.onCreate
          */
         mStateMachine.addTransition(STATE_START, STATE_ENTER_TRANSITION_INIT, EVT_ON_CREATE);
@@ -262,7 +262,7 @@
         mStateMachine.addTransition(STATE_ENTER_TRANSITION_PENDING, STATE_ENTER_TRANSITION_COMPLETE,
                 EVT_ENTER_TRANSIITON_DONE);
 
-        /**
+        /*
          * Part 2: modification to the entrance transition defined in BaseFragment
          */
         // Must finish enter transition before perform entrance transition.
@@ -281,7 +281,7 @@
         mStateMachine.addTransition(STATE_ENTRANCE_ON_PREPARED,
                 STATE_SET_ENTRANCE_START_STATE, EVT_ONSTART);
 
-        /**
+        /*
          * Part 3: onSafeStart()
          */
         // for onSafeStart: the condition is onStart called, entrance transition complete
diff --git a/leanback/leanback/src/main/java/androidx/leanback/app/DetailsSupportFragment.java b/leanback/leanback/src/main/java/androidx/leanback/app/DetailsSupportFragment.java
index fa4c82b..2b97bfb 100644
--- a/leanback/leanback/src/main/java/androidx/leanback/app/DetailsSupportFragment.java
+++ b/leanback/leanback/src/main/java/androidx/leanback/app/DetailsSupportFragment.java
@@ -224,7 +224,7 @@
     @Override
     void createStateMachineTransitions() {
         super.createStateMachineTransitions();
-        /**
+        /*
          * Part 1: Processing enter transitions after fragment.onCreate
          */
         mStateMachine.addTransition(STATE_START, STATE_ENTER_TRANSITION_INIT, EVT_ON_CREATE);
@@ -257,7 +257,7 @@
         mStateMachine.addTransition(STATE_ENTER_TRANSITION_PENDING, STATE_ENTER_TRANSITION_COMPLETE,
                 EVT_ENTER_TRANSIITON_DONE);
 
-        /**
+        /*
          * Part 2: modification to the entrance transition defined in BaseSupportFragment
          */
         // Must finish enter transition before perform entrance transition.
@@ -276,7 +276,7 @@
         mStateMachine.addTransition(STATE_ENTRANCE_ON_PREPARED,
                 STATE_SET_ENTRANCE_START_STATE, EVT_ONSTART);
 
-        /**
+        /*
          * Part 3: onSafeStart()
          */
         // for onSafeStart: the condition is onStart called, entrance transition complete
diff --git a/leanback/leanback/src/main/java/androidx/leanback/widget/ParallaxTarget.java b/leanback/leanback/src/main/java/androidx/leanback/widget/ParallaxTarget.java
index 57e5c93..f8a719f 100644
--- a/leanback/leanback/src/main/java/androidx/leanback/widget/ParallaxTarget.java
+++ b/leanback/leanback/src/main/java/androidx/leanback/widget/ParallaxTarget.java
@@ -98,7 +98,7 @@
      * @param <T> Type of target object.
      * @param <V> Type of value, either Integer or Float.
      */
-    public static final class DirectPropertyTarget<T extends Object, V extends Number>
+    public static final class DirectPropertyTarget<T, V extends Number>
             extends ParallaxTarget {
 
         Object mObject;
diff --git a/media2/media2-widget/src/main/java/androidx/media2/widget/Cea608CCParser.java b/media2/media2-widget/src/main/java/androidx/media2/widget/Cea608CCParser.java
index 9b24e74..37a0734 100644
--- a/media2/media2-widget/src/main/java/androidx/media2/widget/Cea608CCParser.java
+++ b/media2/media2-widget/src/main/java/androidx/media2/widget/Cea608CCParser.java
@@ -863,6 +863,7 @@
             return sCtrlCodeMap[ctrlCode - 0x20];
         }
 
+        @SuppressWarnings("ComparisonOutOfRange")
         private boolean isBasicChar() {
             return mData1 >= 0x20 && mData1 <= 0x7f;
         }
@@ -897,6 +898,7 @@
             return c;
         }
 
+        @SuppressWarnings("ComparisonOutOfRange")
         private String getBasicChars() {
             if (mData1 >= 0x20 && mData1 <= 0x7f) {
                 StringBuilder builder = new StringBuilder(2);
diff --git a/palette/palette/src/main/java/androidx/palette/graphics/Palette.java b/palette/palette/src/main/java/androidx/palette/graphics/Palette.java
index 0fe8091..afbe8f9 100644
--- a/palette/palette/src/main/java/androidx/palette/graphics/Palette.java
+++ b/palette/palette/src/main/java/androidx/palette/graphics/Palette.java
@@ -556,14 +556,14 @@
         @NonNull // TODO Remove once AGP 3.3. Fixed by I32b659c4e842ba5ac3d45b2d75b080b810fe1fe8.
         @Override
         public String toString() {
-            return new StringBuilder(getClass().getSimpleName())
-                    .append(" [RGB: #").append(Integer.toHexString(getRgb())).append(']')
-                    .append(" [HSL: ").append(Arrays.toString(getHsl())).append(']')
-                    .append(" [Population: ").append(mPopulation).append(']')
-                    .append(" [Title Text: #").append(Integer.toHexString(getTitleTextColor()))
-                    .append(']')
-                    .append(" [Body Text: #").append(Integer.toHexString(getBodyTextColor()))
-                    .append(']').toString();
+            return getClass().getSimpleName()
+                    + " [RGB: #" + Integer.toHexString(getRgb()) + ']'
+                    + " [HSL: " + Arrays.toString(getHsl()) + ']'
+                    + " [Population: " + mPopulation + ']'
+                    + " [Title Text: #" + Integer.toHexString(getTitleTextColor())
+                    + ']'
+                    + " [Body Text: #" + Integer.toHexString(getBodyTextColor())
+                    + ']';
         }
 
         @Override
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
index b5dca5d..5f96d22 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
@@ -1687,7 +1687,7 @@
                 break;
             }
             layoutState.mOffset += layoutChunkResult.mConsumed * layoutState.mLayoutDirection;
-            /**
+            /*
              * Consume the available space if:
              * * layoutChunk did not request to be ignored
              * * OR we are laying out scrap children
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearSnapHelper.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearSnapHelper.java
index 09603f2..21fbd5c 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearSnapHelper.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearSnapHelper.java
@@ -195,7 +195,7 @@
                     + (helper.getDecoratedMeasurement(child) / 2);
             int absDistance = Math.abs(childCenter - center);
 
-            /** if child center is closer than previous closest, set it as closest  */
+            /* if child center is closer than previous closest, set it as closest  */
             if (absDistance < absClosest) {
                 absClosest = absDistance;
                 closestChild = child;
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
index f06bd1b..a4ea5a5 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
@@ -4105,7 +4105,7 @@
             final int widthMode = MeasureSpec.getMode(widthSpec);
             final int heightMode = MeasureSpec.getMode(heightSpec);
 
-            /**
+            /*
              * This specific call should be considered deprecated and replaced with
              * {@link #defaultOnMeasure(int, int)}. It can't actually be replaced as it could
              * break existing third party code but all documentation directs developers to not
diff --git a/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/GridLayoutManagerActivity.java b/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/GridLayoutManagerActivity.java
index e6eac0e..f5a94d7 100644
--- a/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/GridLayoutManagerActivity.java
+++ b/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/GridLayoutManagerActivity.java
@@ -41,6 +41,7 @@
         return lm;
     }
 
+    @SuppressWarnings("MathAbsoluteNegative")
     GridLayoutManager.SpanSizeLookup mSpanSizeLookup = new GridLayoutManager.SpanSizeLookup() {
         @Override
         public int getSpanSize(int position) {
diff --git a/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/EmojiRepo.java b/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/EmojiRepo.java
index 0194e58..bcdc1205 100644
--- a/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/EmojiRepo.java
+++ b/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/EmojiRepo.java
@@ -38,16 +38,13 @@
     }
 
     static synchronized void load(final Context context) {
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    read(context);
-                } catch (Throwable t) {
-                    Log.e(TAG, "Cannot load emojis", t);
-                }
+        new Thread(() -> {
+            try {
+                read(context);
+            } catch (Throwable t) {
+                Log.e(TAG, "Cannot load emojis", t);
             }
-        }).run();
+        }).start();
     }
 
     private static void read(Context context) throws IOException {
diff --git a/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MediaSessionService.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MediaSessionService.java
index f804c0f..ef22f5f 100644
--- a/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MediaSessionService.java
+++ b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/MediaSessionService.java
@@ -265,7 +265,7 @@
         }
         mMediaItemList.addAll(mediaItemList);
 
-        /**
+        /*
          * Points to the first media item in play list.
          */
         mCurrentIndex = 0;
diff --git a/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java
index c82b86c..4551480 100644
--- a/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java
+++ b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java
@@ -232,7 +232,7 @@
      */
     private void onMediaSessionMetaDataChanged() {
 
-        /**
+        /*
          * Only update the media session's meta data when the media session is connected
          */
         if (mMediaSessionCompat == null) {
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseRegistry.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseRegistry.java
index 0a80c05..ec47a8f 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseRegistry.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/DatabaseRegistry.java
@@ -108,11 +108,11 @@
 
     void notifyReleaseReference(SQLiteDatabase database) {
         synchronized (mLock) {
-            /** Prevent all other methods from releasing a reference if a
-             *  {@link KeepOpenReference} is present */
+            /* Prevent all other methods from releasing a reference if a
+               {@link KeepOpenReference} is present */
             for (KeepOpenReference reference : mKeepOpenReferences.values()) {
                 if (reference.mDatabase == database) {
-                    /** The below will always succeed as {@link mKeepOpenReferences} only
+                    /* The below will always succeed as {@link mKeepOpenReferences} only
                      * contains active references:
                      * - we only insert active references into {@link mKeepOpenReferences}
                      * - {@link KeepOpenReference#releaseAllReferences} is the only place where we
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/EntryExitMatchingHookRegistry.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/EntryExitMatchingHookRegistry.java
index 292dd3e..8e6aa48 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/EntryExitMatchingHookRegistry.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/EntryExitMatchingHookRegistry.java
@@ -81,7 +81,7 @@
     }
 
     private @NonNull Deque<Frame> getFrameStack() {
-        /** It won't be null because of overridden {@link ThreadLocal#initialValue} */
+        /* It won't be null because of overridden {@link ThreadLocal#initialValue} */
         //noinspection ConstantConditions
         return mFrameStack.get();
     }
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspector.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspector.java
index 9bbe9366..06febd8 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspector.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspector.java
@@ -276,7 +276,7 @@
         // Check for database instances in memory
         for (SQLiteDatabase instance :
                 mEnvironment.artTooling().findInstances(SQLiteDatabase.class)) {
-            /** the race condition here will be handled by mDatabaseRegistry */
+            /* the race condition here will be handled by mDatabaseRegistry */
             if (instance.isOpen()) {
                 onDatabaseOpened(instance);
             } else {
@@ -434,7 +434,7 @@
     }
 
     private void registerInvalidationHooks(EntryExitMatchingHookRegistry hookRegistry) {
-        /**
+        /*
          * Schedules a task using {@link mScheduledExecutor} and executes it on {@link mIOExecutor}.
          */
         final RequestCollapsingThrottler.DeferredExecutor deferredExecutor =
diff --git a/vectordrawable/vectordrawable-animated/src/main/java/androidx/vectordrawable/graphics/drawable/AnimatorInflaterCompat.java b/vectordrawable/vectordrawable-animated/src/main/java/androidx/vectordrawable/graphics/drawable/AnimatorInflaterCompat.java
index 79954ed..8996b90 100644
--- a/vectordrawable/vectordrawable-animated/src/main/java/androidx/vectordrawable/graphics/drawable/AnimatorInflaterCompat.java
+++ b/vectordrawable/vectordrawable-animated/src/main/java/androidx/vectordrawable/graphics/drawable/AnimatorInflaterCompat.java
@@ -408,10 +408,6 @@
                             AndroidResources.STYLEABLE_PROPERTY_ANIMATOR_PROPERTY_NAME);
             oa.setPropertyName(propertyName);
         }
-
-
-        return;
-
     }
 
     private static void setupPathMotion(Path path, ObjectAnimator oa, float precision,
diff --git a/viewpager2/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java b/viewpager2/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
index 7a61aec..dca3df1 100644
--- a/viewpager2/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
+++ b/viewpager2/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
@@ -184,7 +184,7 @@
         mItemIdToViewHolder.put(itemId, viewHolderId); // this might overwrite an existing entry
         ensureFragment(position);
 
-        /** Special case when {@link RecyclerView} decides to keep the {@link container}
+        /* Special case when {@link RecyclerView} decides to keep the {@link container}
          * attached to the window, resulting in no {@link `onViewAttachedToWindow} callback later */
         final FrameLayout container = holder.getContainer();
         if (ViewCompat.isAttachedToWindow(container)) {
@@ -521,10 +521,10 @@
 
     @Override
     public final @NonNull Parcelable saveState() {
-        /** TODO(b/122670461): use custom {@link Parcelable} instead of Bundle to save space */
+        /* TODO(b/122670461): use custom {@link Parcelable} instead of Bundle to save space */
         Bundle savedState = new Bundle(mFragments.size() + mSavedStates.size());
 
-        /** save references to active fragments */
+        /* save references to active fragments */
         for (int ix = 0; ix < mFragments.size(); ix++) {
             long itemId = mFragments.keyAt(ix);
             Fragment fragment = mFragments.get(itemId);
@@ -534,7 +534,7 @@
             }
         }
 
-        /** Write {@link mSavedStates) into a {@link Parcelable} */
+        /* Write {@link mSavedStates) into a {@link Parcelable} */
         for (int ix = 0; ix < mSavedStates.size(); ix++) {
             long itemId = mSavedStates.keyAt(ix);
             if (containsItem(itemId)) {
@@ -556,7 +556,7 @@
 
         Bundle bundle = (Bundle) savedState;
         if (bundle.getClassLoader() == null) {
-            /** TODO(b/133752041): pass the class loader from {@link ViewPager2.SavedState } */
+            /* TODO(b/133752041): pass the class loader from {@link ViewPager2.SavedState } */
             bundle.setClassLoader(getClass().getClassLoader());
         }
 
@@ -687,7 +687,7 @@
 
         void updateFragmentMaxLifecycle(boolean dataSetChanged) {
             if (shouldDelayFragmentTransactions()) {
-                return; /** recovery step via {@link #mLifecycleObserver} */
+                return; /* recovery step via {@link #mLifecycleObserver} */
             }
 
             if (mViewPager.getScrollState() != ViewPager2.SCROLL_STATE_IDLE) {
@@ -700,7 +700,7 @@
 
             final int currentItem = mViewPager.getCurrentItem();
             if (currentItem >= getItemCount()) {
-                /** current item is yet to be updated; it is guaranteed to change, so we will be
+                /* current item is yet to be updated; it is guaranteed to change, so we will be
                  * notified via {@link ViewPager2.OnPageChangeCallback#onPageSelected(int)}  */
                 return;
             }
diff --git a/viewpager2/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java b/viewpager2/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java
index d8529a7..54fec80 100644
--- a/viewpager2/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java
+++ b/viewpager2/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java
@@ -553,7 +553,7 @@
         int snapPosition = mLayoutManager.getPosition(snapView);
 
         if (snapPosition != mCurrentItem && getScrollState() == SCROLL_STATE_IDLE) {
-            /** TODO: revisit if push to {@link ScrollEventAdapter} / separate component */
+            /* TODO: revisit if push to {@link ScrollEventAdapter} / separate component */
             mPageChangeEventDispatcher.onPageSelected(snapPosition);
         }
 
diff --git a/wear/watchface/watchface-data/src/main/java/androidx/wear/watchface/style/data/UserStyleFlavorWireFormat.java b/wear/watchface/watchface-data/src/main/java/androidx/wear/watchface/style/data/UserStyleFlavorWireFormat.java
index 8fc154e..d446f2a 100644
--- a/wear/watchface/watchface-data/src/main/java/androidx/wear/watchface/style/data/UserStyleFlavorWireFormat.java
+++ b/wear/watchface/watchface-data/src/main/java/androidx/wear/watchface/style/data/UserStyleFlavorWireFormat.java
@@ -35,19 +35,19 @@
 @VersionedParcelize
 @SuppressLint("BanParcelableUsage") // TODO(b/169214666): Remove Parcelable
 public class UserStyleFlavorWireFormat implements VersionedParcelable, Parcelable {
+    /** User style identifier. */
     @ParcelField(1)
     @NonNull
-    /** User style identifier. */
     public String mId = "";
 
+    /** User style definition of the flavor. */
     @ParcelField(2)
     @NonNull
-    /** User style definition of the flavor. */
     public UserStyleWireFormat mStyle = new UserStyleWireFormat();
 
+    /** Map of ComplicationSlot id to complication's default for the flavor. */
     @ParcelField(3)
     @NonNull
-    /** Map of ComplicationSlot id to complication's default for the flavor. */
     public Map<Integer, DefaultComplicationDataSourcePolicyWireFormat> mComplications =
             new HashMap<>();
 
diff --git a/wear/watchface/watchface-data/src/main/java/androidx/wear/watchface/style/data/UserStyleSchemaWireFormat.java b/wear/watchface/watchface-data/src/main/java/androidx/wear/watchface/style/data/UserStyleSchemaWireFormat.java
index 1a68824..c7f8389 100644
--- a/wear/watchface/watchface-data/src/main/java/androidx/wear/watchface/style/data/UserStyleSchemaWireFormat.java
+++ b/wear/watchface/watchface-data/src/main/java/androidx/wear/watchface/style/data/UserStyleSchemaWireFormat.java
@@ -34,9 +34,9 @@
 @VersionedParcelize
 @SuppressLint("BanParcelableUsage") // TODO(b/169214666): Remove Parcelable
 public class UserStyleSchemaWireFormat implements VersionedParcelable, Parcelable {
+    /** List of user style categories comprising the style schema. */
     @ParcelField(1)
     @NonNull
-    /** List of user style categories comprising the style schema. */
     public List<UserStyleSettingWireFormat> mSchema = new ArrayList<UserStyleSettingWireFormat>();
 
     UserStyleSchemaWireFormat() {}
diff --git a/wear/watchface/watchface-data/src/main/java/androidx/wear/watchface/style/data/UserStyleWireFormat.java b/wear/watchface/watchface-data/src/main/java/androidx/wear/watchface/style/data/UserStyleWireFormat.java
index 903556d..e9f9225 100644
--- a/wear/watchface/watchface-data/src/main/java/androidx/wear/watchface/style/data/UserStyleWireFormat.java
+++ b/wear/watchface/watchface-data/src/main/java/androidx/wear/watchface/style/data/UserStyleWireFormat.java
@@ -34,9 +34,9 @@
 @VersionedParcelize(allowSerialization = true)
 @SuppressLint("BanParcelableUsage") // TODO(b/169214666): Remove Parcelable
 public class UserStyleWireFormat implements VersionedParcelable, Parcelable {
+    /** Map from user style setting id to user style option id. */
     @ParcelField(1)
     @NonNull
-    /** Map from user style setting id to user style option id. */
     public Map<String, byte[]> mUserStyle = new HashMap<>();
 
     UserStyleWireFormat() {}
diff --git a/wear/wear/src/main/java/androidx/wear/widget/CurvedTextView.java b/wear/wear/src/main/java/androidx/wear/widget/CurvedTextView.java
index b0f8c80..b85aa10 100644
--- a/wear/wear/src/main/java/androidx/wear/widget/CurvedTextView.java
+++ b/wear/wear/src/main/java/androidx/wear/widget/CurvedTextView.java
@@ -210,7 +210,7 @@
     @Override
     public void setSweepAngleDegrees(
             @FloatRange(from = 0.0f, to = 360.0f, toInclusive = true) float angleDegrees) {
-        /** We need to be careful because this is also set by {@link #onMeasure} below. */
+        /* We need to be careful because this is also set by {@link #onMeasure} below. */
         mBackgroundSweepDegrees = angleDegrees;
     }
 
diff --git a/wear/wear/src/main/java/androidx/wear/widget/CurvingLayoutCallback.java b/wear/wear/src/main/java/androidx/wear/widget/CurvingLayoutCallback.java
index 7c7c279..38c7138 100644
--- a/wear/wear/src/main/java/androidx/wear/widget/CurvingLayoutCallback.java
+++ b/wear/wear/src/main/java/androidx/wear/widget/CurvingLayoutCallback.java
@@ -113,7 +113,6 @@
      *                       child height on the vertical axis (vertical center).
      */
     public void adjustAnchorOffsetXY(View child, float[] anchorOffsetXY) {
-        return;
     }
 
     @VisibleForTesting
