Merge "Remove experimental classes" into androidx-main
diff --git a/appactions/builtintypes/builtintypes/api/current.txt b/appactions/builtintypes/builtintypes/api/current.txt
index f8c19be..4e13658 100644
--- a/appactions/builtintypes/builtintypes/api/current.txt
+++ b/appactions/builtintypes/builtintypes/api/current.txt
@@ -681,8 +681,6 @@
 
   @androidx.appsearch.annotation.Document(name="bit:Alarm", parent={Thing::class}) public interface Alarm extends androidx.appactions.builtintypes.types.Thing {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder(optional String identifier, optional String namespace);
     method @androidx.appsearch.annotation.Document.DocumentProperty public androidx.appactions.builtintypes.types.Schedule? getAlarmSchedule();
     method @androidx.appsearch.annotation.Document.BooleanProperty public Boolean? isAlarmEnabled();
     method public androidx.appactions.builtintypes.types.Alarm.Builder<?> toBuilder();
@@ -700,8 +698,6 @@
 
   public static final class Alarm.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   public static final class Alarm.DisambiguatingDescriptionValue extends androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue {
@@ -716,8 +712,6 @@
 
   @androidx.appsearch.annotation.Document(name="bit:CommonExecutionStatus", parent={ExecutionStatus::class}) public interface CommonExecutionStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.CommonExecutionStatus.Companion Companion;
   }
@@ -728,8 +722,6 @@
 
   public static final class CommonExecutionStatus.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   public final class DayOfWeek {
@@ -764,8 +756,6 @@
 
   @androidx.appsearch.annotation.Document(name="bit:ExecutionStatus", parent={Intangible::class}) public interface ExecutionStatus extends androidx.appactions.builtintypes.types.Intangible {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.ExecutionStatus.Companion Companion;
   }
@@ -776,14 +766,10 @@
 
   public static final class ExecutionStatus.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:GenericErrorStatus", parent={CommonExecutionStatus::class}) public interface GenericErrorStatus extends androidx.appactions.builtintypes.types.CommonExecutionStatus {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.GenericErrorStatus.Companion Companion;
   }
@@ -794,14 +780,10 @@
 
   public static final class GenericErrorStatus.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:Intangible", parent={Thing::class}) public interface Intangible extends androidx.appactions.builtintypes.types.Thing {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.Intangible.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.Intangible.Companion Companion;
   }
@@ -812,14 +794,10 @@
 
   public static final class Intangible.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:ObjectCreationLimitReachedStatus", parent={ExecutionStatus::class}) public interface ObjectCreationLimitReachedStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Companion Companion;
   }
@@ -830,14 +808,10 @@
 
   public static final class ObjectCreationLimitReachedStatus.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:Person", parent={Thing::class}) public interface Person extends androidx.appactions.builtintypes.types.Thing {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Person.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Person.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Person.Builder<?> Builder(optional String identifier, optional String namespace);
     method @androidx.appsearch.annotation.Document.StringProperty public String? getEmail();
     method @androidx.appsearch.annotation.Document.StringProperty(name="telephone") public String? getTelephoneNumber();
     method public androidx.appactions.builtintypes.types.Person.Builder<?> toBuilder();
@@ -854,14 +828,10 @@
 
   public static final class Person.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Person.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Person.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Person.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:Schedule", parent={Intangible::class}) public interface Schedule extends androidx.appactions.builtintypes.types.Intangible {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder(optional String identifier, optional String namespace);
     method @androidx.appsearch.annotation.Document.DocumentProperty(name="byDay") public java.util.List<androidx.appactions.builtintypes.properties.ByDay> getByDays();
     method @androidx.appsearch.annotation.Document.LongProperty(name="byMonthDay") public java.util.List<java.lang.Long> getByMonthDays();
     method @androidx.appsearch.annotation.Document.LongProperty(name="byMonthWeek") public java.util.List<java.lang.Long> getByMonthWeeks();
@@ -935,14 +905,10 @@
 
   public static final class Schedule.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:SuccessStatus", parent={CommonExecutionStatus::class}) public interface SuccessStatus extends androidx.appactions.builtintypes.types.CommonExecutionStatus {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.SuccessStatus.Companion Companion;
   }
@@ -953,14 +919,10 @@
 
   public static final class SuccessStatus.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:Thing") public interface Thing {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Thing.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Thing.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Thing.Builder<?> Builder(optional String identifier, optional String namespace);
     method @androidx.appsearch.annotation.Document.DocumentProperty public androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
     method @androidx.appsearch.annotation.Document.Id public String getIdentifier();
     method @androidx.appsearch.annotation.Document.DocumentProperty public androidx.appactions.builtintypes.properties.Name? getName();
@@ -985,14 +947,10 @@
 
   public static final class Thing.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Thing.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Thing.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Thing.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:Timer", parent={Thing::class}) public interface Timer extends androidx.appactions.builtintypes.types.Thing {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Timer.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Timer.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Timer.Builder<?> Builder(optional String identifier, optional String namespace);
     method public java.time.Duration? getDuration();
     method public androidx.appactions.builtintypes.types.Timer.Builder<?> toBuilder();
     property public abstract java.time.Duration? duration;
@@ -1006,14 +964,10 @@
 
   public static final class Timer.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Timer.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Timer.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Timer.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:UnsupportedOperationStatus", parent={ExecutionStatus::class}) public interface UnsupportedOperationStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Companion Companion;
   }
@@ -1024,8 +978,6 @@
 
   public static final class UnsupportedOperationStatus.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
 }
diff --git a/appactions/builtintypes/builtintypes/api/restricted_current.txt b/appactions/builtintypes/builtintypes/api/restricted_current.txt
index f8c19be..4e13658 100644
--- a/appactions/builtintypes/builtintypes/api/restricted_current.txt
+++ b/appactions/builtintypes/builtintypes/api/restricted_current.txt
@@ -681,8 +681,6 @@
 
   @androidx.appsearch.annotation.Document(name="bit:Alarm", parent={Thing::class}) public interface Alarm extends androidx.appactions.builtintypes.types.Thing {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder(optional String identifier, optional String namespace);
     method @androidx.appsearch.annotation.Document.DocumentProperty public androidx.appactions.builtintypes.types.Schedule? getAlarmSchedule();
     method @androidx.appsearch.annotation.Document.BooleanProperty public Boolean? isAlarmEnabled();
     method public androidx.appactions.builtintypes.types.Alarm.Builder<?> toBuilder();
@@ -700,8 +698,6 @@
 
   public static final class Alarm.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   public static final class Alarm.DisambiguatingDescriptionValue extends androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue {
@@ -716,8 +712,6 @@
 
   @androidx.appsearch.annotation.Document(name="bit:CommonExecutionStatus", parent={ExecutionStatus::class}) public interface CommonExecutionStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.CommonExecutionStatus.Companion Companion;
   }
@@ -728,8 +722,6 @@
 
   public static final class CommonExecutionStatus.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.CommonExecutionStatus.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   public final class DayOfWeek {
@@ -764,8 +756,6 @@
 
   @androidx.appsearch.annotation.Document(name="bit:ExecutionStatus", parent={Intangible::class}) public interface ExecutionStatus extends androidx.appactions.builtintypes.types.Intangible {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.ExecutionStatus.Companion Companion;
   }
@@ -776,14 +766,10 @@
 
   public static final class ExecutionStatus.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.ExecutionStatus.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:GenericErrorStatus", parent={CommonExecutionStatus::class}) public interface GenericErrorStatus extends androidx.appactions.builtintypes.types.CommonExecutionStatus {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.GenericErrorStatus.Companion Companion;
   }
@@ -794,14 +780,10 @@
 
   public static final class GenericErrorStatus.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.GenericErrorStatus.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:Intangible", parent={Thing::class}) public interface Intangible extends androidx.appactions.builtintypes.types.Thing {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.Intangible.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.Intangible.Companion Companion;
   }
@@ -812,14 +794,10 @@
 
   public static final class Intangible.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Intangible.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:ObjectCreationLimitReachedStatus", parent={ExecutionStatus::class}) public interface ObjectCreationLimitReachedStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Companion Companion;
   }
@@ -830,14 +808,10 @@
 
   public static final class ObjectCreationLimitReachedStatus.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.ObjectCreationLimitReachedStatus.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:Person", parent={Thing::class}) public interface Person extends androidx.appactions.builtintypes.types.Thing {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Person.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Person.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Person.Builder<?> Builder(optional String identifier, optional String namespace);
     method @androidx.appsearch.annotation.Document.StringProperty public String? getEmail();
     method @androidx.appsearch.annotation.Document.StringProperty(name="telephone") public String? getTelephoneNumber();
     method public androidx.appactions.builtintypes.types.Person.Builder<?> toBuilder();
@@ -854,14 +828,10 @@
 
   public static final class Person.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Person.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Person.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Person.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:Schedule", parent={Intangible::class}) public interface Schedule extends androidx.appactions.builtintypes.types.Intangible {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder(optional String identifier, optional String namespace);
     method @androidx.appsearch.annotation.Document.DocumentProperty(name="byDay") public java.util.List<androidx.appactions.builtintypes.properties.ByDay> getByDays();
     method @androidx.appsearch.annotation.Document.LongProperty(name="byMonthDay") public java.util.List<java.lang.Long> getByMonthDays();
     method @androidx.appsearch.annotation.Document.LongProperty(name="byMonthWeek") public java.util.List<java.lang.Long> getByMonthWeeks();
@@ -935,14 +905,10 @@
 
   public static final class Schedule.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Schedule.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:SuccessStatus", parent={CommonExecutionStatus::class}) public interface SuccessStatus extends androidx.appactions.builtintypes.types.CommonExecutionStatus {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.SuccessStatus.Companion Companion;
   }
@@ -953,14 +919,10 @@
 
   public static final class SuccessStatus.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.SuccessStatus.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:Thing") public interface Thing {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Thing.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Thing.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Thing.Builder<?> Builder(optional String identifier, optional String namespace);
     method @androidx.appsearch.annotation.Document.DocumentProperty public androidx.appactions.builtintypes.properties.DisambiguatingDescription? getDisambiguatingDescription();
     method @androidx.appsearch.annotation.Document.Id public String getIdentifier();
     method @androidx.appsearch.annotation.Document.DocumentProperty public androidx.appactions.builtintypes.properties.Name? getName();
@@ -985,14 +947,10 @@
 
   public static final class Thing.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Thing.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Thing.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Thing.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:Timer", parent={Thing::class}) public interface Timer extends androidx.appactions.builtintypes.types.Thing {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Timer.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Timer.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.Timer.Builder<?> Builder(optional String identifier, optional String namespace);
     method public java.time.Duration? getDuration();
     method public androidx.appactions.builtintypes.types.Timer.Builder<?> toBuilder();
     property public abstract java.time.Duration? duration;
@@ -1006,14 +964,10 @@
 
   public static final class Timer.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Timer.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Timer.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Timer.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
   @androidx.appsearch.annotation.Document(name="bit:UnsupportedOperationStatus", parent={ExecutionStatus::class}) public interface UnsupportedOperationStatus extends androidx.appactions.builtintypes.types.ExecutionStatus {
     method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public static androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder(optional String identifier, optional String namespace);
     method public androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> toBuilder();
     field public static final androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Companion Companion;
   }
@@ -1024,8 +978,6 @@
 
   public static final class UnsupportedOperationStatus.Companion {
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder();
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder(optional String identifier);
-    method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.UnsupportedOperationStatus.Builder<?> Builder(optional String identifier, optional String namespace);
   }
 
 }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Alarm.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Alarm.kt
index 45db618..25e5632 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Alarm.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Alarm.kt
@@ -29,7 +29,6 @@
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
 import kotlin.jvm.JvmField
-import kotlin.jvm.JvmOverloads
 import kotlin.jvm.JvmStatic
 
 /**
@@ -65,16 +64,8 @@
   public override fun toBuilder(): Builder<*>
 
   public companion object {
-    /**
-     * Returns a default implementation of [Builder].
-     *
-     * Has the specified [identifier] and [namespace] and no other properties set.
-     */
-    @JvmStatic
-    @JvmOverloads
-    @Document.BuilderProducer
-    public fun Builder(identifier: String = "", namespace: String = ""): Builder<*> =
-      AlarmImpl.Builder().setIdentifier(identifier).setNamespace(namespace)
+    /** Returns a default implementation of [Builder]. */
+    @JvmStatic @Document.BuilderProducer public fun Builder(): Builder<*> = AlarmImpl.Builder()
   }
 
   /**
@@ -124,6 +115,10 @@
  *
  * Allows for extension like:
  * ```kt
+ * @Document(
+ *   name = "MyAlarm",
+ *   parent = [Alarm::class],
+ * )
  * class MyAlarm internal constructor(
  *   alarm: Alarm,
  *   val foo: String,
@@ -133,6 +128,8 @@
  *   MyAlarm.Builder
  * >(alarm) {
  *
+ *   // No need to implement equals(), hashCode(), toString() or toBuilder()
+ *
  *   override val selfTypeName =
  *     "MyAlarm"
  *
@@ -230,7 +227,9 @@
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    attributes["namespace"] = namespace
+    if (namespace.isNotEmpty()) {
+      attributes["namespace"] = namespace
+    }
     if (alarmSchedule != null) {
       attributes["alarmSchedule"] = alarmSchedule.toString()
     }
@@ -241,7 +240,9 @@
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
     }
-    attributes["identifier"] = identifier
+    if (identifier.isNotEmpty()) {
+      attributes["identifier"] = identifier
+    }
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
@@ -261,10 +262,13 @@
    *     MyAlarm.Builder>(...) {
    *
    *   class Builder
-   *   : Builder<
+   *   : AbstractAlarm.Builder<
    *       Builder,
    *       MyAlarm
    *   >() {
+   *
+   *     // No need to implement equals(), hashCode(), toString() or build()
+   *
    *     private var foo: String? = null
    *     private val bars = mutableListOf<Int>()
    *
@@ -414,7 +418,9 @@
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      attributes["namespace"] = namespace
+      if (namespace.isNotEmpty()) {
+        attributes["namespace"] = namespace
+      }
       if (alarmSchedule != null) {
         attributes["alarmSchedule"] = alarmSchedule!!.toString()
       }
@@ -425,7 +431,9 @@
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
       }
-      attributes["identifier"] = identifier
+      if (identifier.isNotEmpty()) {
+        attributes["identifier"] = identifier
+      }
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/CommonExecutionStatus.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/CommonExecutionStatus.kt
index 98ece73..7080996 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/CommonExecutionStatus.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/CommonExecutionStatus.kt
@@ -28,7 +28,6 @@
 import kotlin.collections.map
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
-import kotlin.jvm.JvmOverloads
 import kotlin.jvm.JvmStatic
 
 /**
@@ -52,16 +51,10 @@
   public override fun toBuilder(): Builder<*>
 
   public companion object {
-    /**
-     * Returns a default implementation of [Builder].
-     *
-     * Has the specified [identifier] and [namespace] and no other properties set.
-     */
+    /** Returns a default implementation of [Builder]. */
     @JvmStatic
-    @JvmOverloads
     @Document.BuilderProducer
-    public fun Builder(identifier: String = "", namespace: String = ""): Builder<*> =
-      CommonExecutionStatusImpl.Builder().setIdentifier(identifier).setNamespace(namespace)
+    public fun Builder(): Builder<*> = CommonExecutionStatusImpl.Builder()
   }
 
   /**
@@ -81,6 +74,10 @@
  *
  * Allows for extension like:
  * ```kt
+ * @Document(
+ *   name = "MyCommonExecutionStatus",
+ *   parent = [CommonExecutionStatus::class],
+ * )
  * class MyCommonExecutionStatus internal constructor(
  *   commonExecutionStatus: CommonExecutionStatus,
  *   val foo: String,
@@ -90,6 +87,8 @@
  *   MyCommonExecutionStatus.Builder
  * >(commonExecutionStatus) {
  *
+ *   // No need to implement equals(), hashCode(), toString() or toBuilder()
+ *
  *   override val selfTypeName =
  *     "MyCommonExecutionStatus"
  *
@@ -177,12 +176,16 @@
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    attributes["namespace"] = namespace
+    if (namespace.isNotEmpty()) {
+      attributes["namespace"] = namespace
+    }
     if (disambiguatingDescription != null) {
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
     }
-    attributes["identifier"] = identifier
+    if (identifier.isNotEmpty()) {
+      attributes["identifier"] = identifier
+    }
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
@@ -202,10 +205,13 @@
    *     MyCommonExecutionStatus.Builder>(...) {
    *
    *   class Builder
-   *   : Builder<
+   *   : AbstractCommonExecutionStatus.Builder<
    *       Builder,
    *       MyCommonExecutionStatus
    *   >() {
+   *
+   *     // No need to implement equals(), hashCode(), toString() or build()
+   *
    *     private var foo: String? = null
    *     private val bars = mutableListOf<Int>()
    *
@@ -329,12 +335,16 @@
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      attributes["namespace"] = namespace
+      if (namespace.isNotEmpty()) {
+        attributes["namespace"] = namespace
+      }
       if (disambiguatingDescription != null) {
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
       }
-      attributes["identifier"] = identifier
+      if (identifier.isNotEmpty()) {
+        attributes["identifier"] = identifier
+      }
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/ExecutionStatus.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/ExecutionStatus.kt
index b67ddbe..4350dd1 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/ExecutionStatus.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/ExecutionStatus.kt
@@ -28,7 +28,6 @@
 import kotlin.collections.map
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
-import kotlin.jvm.JvmOverloads
 import kotlin.jvm.JvmStatic
 
 /**
@@ -52,16 +51,10 @@
   public override fun toBuilder(): Builder<*>
 
   public companion object {
-    /**
-     * Returns a default implementation of [Builder].
-     *
-     * Has the specified [identifier] and [namespace] and no other properties set.
-     */
+    /** Returns a default implementation of [Builder]. */
     @JvmStatic
-    @JvmOverloads
     @Document.BuilderProducer
-    public fun Builder(identifier: String = "", namespace: String = ""): Builder<*> =
-      ExecutionStatusImpl.Builder().setIdentifier(identifier).setNamespace(namespace)
+    public fun Builder(): Builder<*> = ExecutionStatusImpl.Builder()
   }
 
   /**
@@ -81,6 +74,10 @@
  *
  * Allows for extension like:
  * ```kt
+ * @Document(
+ *   name = "MyExecutionStatus",
+ *   parent = [ExecutionStatus::class],
+ * )
  * class MyExecutionStatus internal constructor(
  *   executionStatus: ExecutionStatus,
  *   val foo: String,
@@ -90,6 +87,8 @@
  *   MyExecutionStatus.Builder
  * >(executionStatus) {
  *
+ *   // No need to implement equals(), hashCode(), toString() or toBuilder()
+ *
  *   override val selfTypeName =
  *     "MyExecutionStatus"
  *
@@ -174,12 +173,16 @@
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    attributes["namespace"] = namespace
+    if (namespace.isNotEmpty()) {
+      attributes["namespace"] = namespace
+    }
     if (disambiguatingDescription != null) {
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
     }
-    attributes["identifier"] = identifier
+    if (identifier.isNotEmpty()) {
+      attributes["identifier"] = identifier
+    }
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
@@ -199,10 +202,13 @@
    *     MyExecutionStatus.Builder>(...) {
    *
    *   class Builder
-   *   : Builder<
+   *   : AbstractExecutionStatus.Builder<
    *       Builder,
    *       MyExecutionStatus
    *   >() {
+   *
+   *     // No need to implement equals(), hashCode(), toString() or build()
+   *
    *     private var foo: String? = null
    *     private val bars = mutableListOf<Int>()
    *
@@ -323,12 +329,16 @@
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      attributes["namespace"] = namespace
+      if (namespace.isNotEmpty()) {
+        attributes["namespace"] = namespace
+      }
       if (disambiguatingDescription != null) {
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
       }
-      attributes["identifier"] = identifier
+      if (identifier.isNotEmpty()) {
+        attributes["identifier"] = identifier
+      }
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/GenericErrorStatus.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/GenericErrorStatus.kt
index 174e3b5..430a97d 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/GenericErrorStatus.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/GenericErrorStatus.kt
@@ -28,7 +28,6 @@
 import kotlin.collections.map
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
-import kotlin.jvm.JvmOverloads
 import kotlin.jvm.JvmStatic
 
 /**
@@ -48,16 +47,10 @@
   public override fun toBuilder(): Builder<*>
 
   public companion object {
-    /**
-     * Returns a default implementation of [Builder].
-     *
-     * Has the specified [identifier] and [namespace] and no other properties set.
-     */
+    /** Returns a default implementation of [Builder]. */
     @JvmStatic
-    @JvmOverloads
     @Document.BuilderProducer
-    public fun Builder(identifier: String = "", namespace: String = ""): Builder<*> =
-      GenericErrorStatusImpl.Builder().setIdentifier(identifier).setNamespace(namespace)
+    public fun Builder(): Builder<*> = GenericErrorStatusImpl.Builder()
   }
 
   /**
@@ -77,6 +70,10 @@
  *
  * Allows for extension like:
  * ```kt
+ * @Document(
+ *   name = "MyGenericErrorStatus",
+ *   parent = [GenericErrorStatus::class],
+ * )
  * class MyGenericErrorStatus internal constructor(
  *   genericErrorStatus: GenericErrorStatus,
  *   val foo: String,
@@ -86,6 +83,8 @@
  *   MyGenericErrorStatus.Builder
  * >(genericErrorStatus) {
  *
+ *   // No need to implement equals(), hashCode(), toString() or toBuilder()
+ *
  *   override val selfTypeName =
  *     "MyGenericErrorStatus"
  *
@@ -171,12 +170,16 @@
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    attributes["namespace"] = namespace
+    if (namespace.isNotEmpty()) {
+      attributes["namespace"] = namespace
+    }
     if (disambiguatingDescription != null) {
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
     }
-    attributes["identifier"] = identifier
+    if (identifier.isNotEmpty()) {
+      attributes["identifier"] = identifier
+    }
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
@@ -196,10 +199,13 @@
    *     MyGenericErrorStatus.Builder>(...) {
    *
    *   class Builder
-   *   : Builder<
+   *   : AbstractGenericErrorStatus.Builder<
    *       Builder,
    *       MyGenericErrorStatus
    *   >() {
+   *
+   *     // No need to implement equals(), hashCode(), toString() or build()
+   *
    *     private var foo: String? = null
    *     private val bars = mutableListOf<Int>()
    *
@@ -323,12 +329,16 @@
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      attributes["namespace"] = namespace
+      if (namespace.isNotEmpty()) {
+        attributes["namespace"] = namespace
+      }
       if (disambiguatingDescription != null) {
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
       }
-      attributes["identifier"] = identifier
+      if (identifier.isNotEmpty()) {
+        attributes["identifier"] = identifier
+      }
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Intangible.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Intangible.kt
index c9f973c..7a3a465 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Intangible.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Intangible.kt
@@ -28,7 +28,6 @@
 import kotlin.collections.map
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
-import kotlin.jvm.JvmOverloads
 import kotlin.jvm.JvmStatic
 
 /**
@@ -49,16 +48,8 @@
   public override fun toBuilder(): Builder<*>
 
   public companion object {
-    /**
-     * Returns a default implementation of [Builder].
-     *
-     * Has the specified [identifier] and [namespace] and no other properties set.
-     */
-    @JvmStatic
-    @JvmOverloads
-    @Document.BuilderProducer
-    public fun Builder(identifier: String = "", namespace: String = ""): Builder<*> =
-      IntangibleImpl.Builder().setIdentifier(identifier).setNamespace(namespace)
+    /** Returns a default implementation of [Builder]. */
+    @JvmStatic @Document.BuilderProducer public fun Builder(): Builder<*> = IntangibleImpl.Builder()
   }
 
   /**
@@ -78,6 +69,10 @@
  *
  * Allows for extension like:
  * ```kt
+ * @Document(
+ *   name = "MyIntangible",
+ *   parent = [Intangible::class],
+ * )
  * class MyIntangible internal constructor(
  *   intangible: Intangible,
  *   val foo: String,
@@ -87,6 +82,8 @@
  *   MyIntangible.Builder
  * >(intangible) {
  *
+ *   // No need to implement equals(), hashCode(), toString() or toBuilder()
+ *
  *   override val selfTypeName =
  *     "MyIntangible"
  *
@@ -168,12 +165,16 @@
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    attributes["namespace"] = namespace
+    if (namespace.isNotEmpty()) {
+      attributes["namespace"] = namespace
+    }
     if (disambiguatingDescription != null) {
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
     }
-    attributes["identifier"] = identifier
+    if (identifier.isNotEmpty()) {
+      attributes["identifier"] = identifier
+    }
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
@@ -193,10 +194,13 @@
    *     MyIntangible.Builder>(...) {
    *
    *   class Builder
-   *   : Builder<
+   *   : AbstractIntangible.Builder<
    *       Builder,
    *       MyIntangible
    *   >() {
+   *
+   *     // No need to implement equals(), hashCode(), toString() or build()
+   *
    *     private var foo: String? = null
    *     private val bars = mutableListOf<Int>()
    *
@@ -315,12 +319,16 @@
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      attributes["namespace"] = namespace
+      if (namespace.isNotEmpty()) {
+        attributes["namespace"] = namespace
+      }
       if (disambiguatingDescription != null) {
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
       }
-      attributes["identifier"] = identifier
+      if (identifier.isNotEmpty()) {
+        attributes["identifier"] = identifier
+      }
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/ObjectCreationLimitReachedStatus.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/ObjectCreationLimitReachedStatus.kt
index ac3ad5f..3addd39 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/ObjectCreationLimitReachedStatus.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/ObjectCreationLimitReachedStatus.kt
@@ -28,7 +28,6 @@
 import kotlin.collections.map
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
-import kotlin.jvm.JvmOverloads
 import kotlin.jvm.JvmStatic
 
 /**
@@ -53,18 +52,10 @@
   public override fun toBuilder(): Builder<*>
 
   public companion object {
-    /**
-     * Returns a default implementation of [Builder].
-     *
-     * Has the specified [identifier] and [namespace] and no other properties set.
-     */
+    /** Returns a default implementation of [Builder]. */
     @JvmStatic
-    @JvmOverloads
     @Document.BuilderProducer
-    public fun Builder(identifier: String = "", namespace: String = ""): Builder<*> =
-      ObjectCreationLimitReachedStatusImpl.Builder()
-        .setIdentifier(identifier)
-        .setNamespace(namespace)
+    public fun Builder(): Builder<*> = ObjectCreationLimitReachedStatusImpl.Builder()
   }
 
   /**
@@ -84,6 +75,10 @@
  *
  * Allows for extension like:
  * ```kt
+ * @Document(
+ *   name = "MyObjectCreationLimitReachedStatus",
+ *   parent = [ObjectCreationLimitReachedStatus::class],
+ * )
  * class MyObjectCreationLimitReachedStatus internal constructor(
  *   objectCreationLimitReachedStatus: ObjectCreationLimitReachedStatus,
  *   val foo: String,
@@ -93,6 +88,8 @@
  *   MyObjectCreationLimitReachedStatus.Builder
  * >(objectCreationLimitReachedStatus) {
  *
+ *   // No need to implement equals(), hashCode(), toString() or toBuilder()
+ *
  *   override val selfTypeName =
  *     "MyObjectCreationLimitReachedStatus"
  *
@@ -181,12 +178,16 @@
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    attributes["namespace"] = namespace
+    if (namespace.isNotEmpty()) {
+      attributes["namespace"] = namespace
+    }
     if (disambiguatingDescription != null) {
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
     }
-    attributes["identifier"] = identifier
+    if (identifier.isNotEmpty()) {
+      attributes["identifier"] = identifier
+    }
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
@@ -206,10 +207,13 @@
    *     MyObjectCreationLimitReachedStatus.Builder>(...) {
    *
    *   class Builder
-   *   : Builder<
+   *   : AbstractObjectCreationLimitReachedStatus.Builder<
    *       Builder,
    *       MyObjectCreationLimitReachedStatus
    *   >() {
+   *
+   *     // No need to implement equals(), hashCode(), toString() or build()
+   *
    *     private var foo: String? = null
    *     private val bars = mutableListOf<Int>()
    *
@@ -333,12 +337,16 @@
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      attributes["namespace"] = namespace
+      if (namespace.isNotEmpty()) {
+        attributes["namespace"] = namespace
+      }
       if (disambiguatingDescription != null) {
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
       }
-      attributes["identifier"] = identifier
+      if (identifier.isNotEmpty()) {
+        attributes["identifier"] = identifier
+      }
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Person.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Person.kt
index 1348fad..03e7a32 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Person.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Person.kt
@@ -28,7 +28,6 @@
 import kotlin.collections.map
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
-import kotlin.jvm.JvmOverloads
 import kotlin.jvm.JvmStatic
 
 /**
@@ -62,16 +61,8 @@
   public override fun toBuilder(): Builder<*>
 
   public companion object {
-    /**
-     * Returns a default implementation of [Builder].
-     *
-     * Has the specified [identifier] and [namespace] and no other properties set.
-     */
-    @JvmStatic
-    @JvmOverloads
-    @Document.BuilderProducer
-    public fun Builder(identifier: String = "", namespace: String = ""): Builder<*> =
-      PersonImpl.Builder().setIdentifier(identifier).setNamespace(namespace)
+    /** Returns a default implementation of [Builder]. */
+    @JvmStatic @Document.BuilderProducer public fun Builder(): Builder<*> = PersonImpl.Builder()
   }
 
   /**
@@ -97,6 +88,10 @@
  *
  * Allows for extension like:
  * ```kt
+ * @Document(
+ *   name = "MyPerson",
+ *   parent = [Person::class],
+ * )
  * class MyPerson internal constructor(
  *   person: Person,
  *   val foo: String,
@@ -106,6 +101,8 @@
  *   MyPerson.Builder
  * >(person) {
  *
+ *   // No need to implement equals(), hashCode(), toString() or toBuilder()
+ *
  *   override val selfTypeName =
  *     "MyPerson"
  *
@@ -203,7 +200,9 @@
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    attributes["namespace"] = namespace
+    if (namespace.isNotEmpty()) {
+      attributes["namespace"] = namespace
+    }
     if (email != null) {
       attributes["email"] = email
     }
@@ -214,7 +213,9 @@
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
     }
-    attributes["identifier"] = identifier
+    if (identifier.isNotEmpty()) {
+      attributes["identifier"] = identifier
+    }
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
@@ -234,10 +235,13 @@
    *     MyPerson.Builder>(...) {
    *
    *   class Builder
-   *   : Builder<
+   *   : AbstractPerson.Builder<
    *       Builder,
    *       MyPerson
    *   >() {
+   *
+   *     // No need to implement equals(), hashCode(), toString() or build()
+   *
    *     private var foo: String? = null
    *     private val bars = mutableListOf<Int>()
    *
@@ -380,7 +384,9 @@
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      attributes["namespace"] = namespace
+      if (namespace.isNotEmpty()) {
+        attributes["namespace"] = namespace
+      }
       if (email != null) {
         attributes["email"] = email!!
       }
@@ -391,7 +397,9 @@
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
       }
-      attributes["identifier"] = identifier
+      if (identifier.isNotEmpty()) {
+        attributes["identifier"] = identifier
+      }
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Schedule.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Schedule.kt
index 9725d80..8321d49 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Schedule.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Schedule.kt
@@ -47,7 +47,6 @@
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
 import kotlin.collections.toList
-import kotlin.jvm.JvmOverloads
 import kotlin.jvm.JvmStatic
 
 /**
@@ -177,16 +176,8 @@
   public override fun toBuilder(): Builder<*>
 
   public companion object {
-    /**
-     * Returns a default implementation of [Builder].
-     *
-     * Has the specified [identifier] and [namespace] and no other properties set.
-     */
-    @JvmStatic
-    @JvmOverloads
-    @Document.BuilderProducer
-    public fun Builder(identifier: String = "", namespace: String = ""): Builder<*> =
-      ScheduleImpl.Builder().setIdentifier(identifier).setNamespace(namespace)
+    /** Returns a default implementation of [Builder]. */
+    @JvmStatic @Document.BuilderProducer public fun Builder(): Builder<*> = ScheduleImpl.Builder()
   }
 
   /**
@@ -327,6 +318,10 @@
  *
  * Allows for extension like:
  * ```kt
+ * @Document(
+ *   name = "MySchedule",
+ *   parent = [Schedule::class],
+ * )
  * class MySchedule internal constructor(
  *   schedule: Schedule,
  *   val foo: String,
@@ -336,6 +331,8 @@
  *   MySchedule.Builder
  * >(schedule) {
  *
+ *   // No need to implement equals(), hashCode(), toString() or toBuilder()
+ *
  *   override val selfTypeName =
  *     "MySchedule"
  *
@@ -483,7 +480,9 @@
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    attributes["namespace"] = namespace
+    if (namespace.isNotEmpty()) {
+      attributes["namespace"] = namespace
+    }
     if (byDays.isNotEmpty()) {
       attributes["byDays"] = byDays.map { it.toString(includeWrapperName = false) }.toString()
     }
@@ -524,7 +523,9 @@
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
     }
-    attributes["identifier"] = identifier
+    if (identifier.isNotEmpty()) {
+      attributes["identifier"] = identifier
+    }
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
@@ -544,10 +545,13 @@
    *     MySchedule.Builder>(...) {
    *
    *   class Builder
-   *   : Builder<
+   *   : AbstractSchedule.Builder<
    *       Builder,
    *       MySchedule
    *   >() {
+   *
+   *     // No need to implement equals(), hashCode(), toString() or build()
+   *
    *     private var foo: String? = null
    *     private val bars = mutableListOf<Int>()
    *
@@ -837,7 +841,9 @@
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      attributes["namespace"] = namespace
+      if (namespace.isNotEmpty()) {
+        attributes["namespace"] = namespace
+      }
       if (byDays.isNotEmpty()) {
         attributes["byDays"] = byDays.map { it.toString(includeWrapperName = false) }.toString()
       }
@@ -878,7 +884,9 @@
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
       }
-      attributes["identifier"] = identifier
+      if (identifier.isNotEmpty()) {
+        attributes["identifier"] = identifier
+      }
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/SuccessStatus.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/SuccessStatus.kt
index 2666fe4..63da896 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/SuccessStatus.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/SuccessStatus.kt
@@ -28,7 +28,6 @@
 import kotlin.collections.map
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
-import kotlin.jvm.JvmOverloads
 import kotlin.jvm.JvmStatic
 
 /**
@@ -48,16 +47,10 @@
   public override fun toBuilder(): Builder<*>
 
   public companion object {
-    /**
-     * Returns a default implementation of [Builder].
-     *
-     * Has the specified [identifier] and [namespace] and no other properties set.
-     */
+    /** Returns a default implementation of [Builder]. */
     @JvmStatic
-    @JvmOverloads
     @Document.BuilderProducer
-    public fun Builder(identifier: String = "", namespace: String = ""): Builder<*> =
-      SuccessStatusImpl.Builder().setIdentifier(identifier).setNamespace(namespace)
+    public fun Builder(): Builder<*> = SuccessStatusImpl.Builder()
   }
 
   /**
@@ -77,6 +70,10 @@
  *
  * Allows for extension like:
  * ```kt
+ * @Document(
+ *   name = "MySuccessStatus",
+ *   parent = [SuccessStatus::class],
+ * )
  * class MySuccessStatus internal constructor(
  *   successStatus: SuccessStatus,
  *   val foo: String,
@@ -86,6 +83,8 @@
  *   MySuccessStatus.Builder
  * >(successStatus) {
  *
+ *   // No need to implement equals(), hashCode(), toString() or toBuilder()
+ *
  *   override val selfTypeName =
  *     "MySuccessStatus"
  *
@@ -170,12 +169,16 @@
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    attributes["namespace"] = namespace
+    if (namespace.isNotEmpty()) {
+      attributes["namespace"] = namespace
+    }
     if (disambiguatingDescription != null) {
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
     }
-    attributes["identifier"] = identifier
+    if (identifier.isNotEmpty()) {
+      attributes["identifier"] = identifier
+    }
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
@@ -195,10 +198,13 @@
    *     MySuccessStatus.Builder>(...) {
    *
    *   class Builder
-   *   : Builder<
+   *   : AbstractSuccessStatus.Builder<
    *       Builder,
    *       MySuccessStatus
    *   >() {
+   *
+   *     // No need to implement equals(), hashCode(), toString() or build()
+   *
    *     private var foo: String? = null
    *     private val bars = mutableListOf<Int>()
    *
@@ -319,12 +325,16 @@
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      attributes["namespace"] = namespace
+      if (namespace.isNotEmpty()) {
+        attributes["namespace"] = namespace
+      }
       if (disambiguatingDescription != null) {
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
       }
-      attributes["identifier"] = identifier
+      if (identifier.isNotEmpty()) {
+        attributes["identifier"] = identifier
+      }
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Thing.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Thing.kt
index f01cb7f..7727748 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Thing.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Thing.kt
@@ -28,7 +28,6 @@
 import kotlin.collections.map
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
-import kotlin.jvm.JvmOverloads
 import kotlin.jvm.JvmStatic
 
 /**
@@ -72,16 +71,8 @@
   public fun toBuilder(): Builder<*>
 
   public companion object {
-    /**
-     * Returns a default implementation of [Builder].
-     *
-     * Has the specified [identifier] and [namespace] and no other properties set.
-     */
-    @JvmStatic
-    @JvmOverloads
-    @Document.BuilderProducer
-    public fun Builder(identifier: String = "", namespace: String = ""): Builder<*> =
-      ThingImpl.Builder().setIdentifier(identifier).setNamespace(namespace)
+    /** Returns a default implementation of [Builder]. */
+    @JvmStatic @Document.BuilderProducer public fun Builder(): Builder<*> = ThingImpl.Builder()
   }
 
   /**
@@ -123,6 +114,10 @@
  *
  * Allows for extension like:
  * ```kt
+ * @Document(
+ *   name = "MyThing",
+ *   parent = [Thing::class],
+ * )
  * class MyThing internal constructor(
  *   thing: Thing,
  *   val foo: String,
@@ -132,6 +127,8 @@
  *   MyThing.Builder
  * >(thing) {
  *
+ *   // No need to implement equals(), hashCode(), toString() or toBuilder()
+ *
  *   override val selfTypeName =
  *     "MyThing"
  *
@@ -208,12 +205,16 @@
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    attributes["namespace"] = namespace
+    if (namespace.isNotEmpty()) {
+      attributes["namespace"] = namespace
+    }
     if (disambiguatingDescription != null) {
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
     }
-    attributes["identifier"] = identifier
+    if (identifier.isNotEmpty()) {
+      attributes["identifier"] = identifier
+    }
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
@@ -233,10 +234,13 @@
    *     MyThing.Builder>(...) {
    *
    *   class Builder
-   *   : Builder<
+   *   : AbstractThing.Builder<
    *       Builder,
    *       MyThing
    *   >() {
+   *
+   *     // No need to implement equals(), hashCode(), toString() or build()
+   *
    *     private var foo: String? = null
    *     private val bars = mutableListOf<Int>()
    *
@@ -353,12 +357,16 @@
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      attributes["namespace"] = namespace
+      if (namespace.isNotEmpty()) {
+        attributes["namespace"] = namespace
+      }
       if (disambiguatingDescription != null) {
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
       }
-      attributes["identifier"] = identifier
+      if (identifier.isNotEmpty()) {
+        attributes["identifier"] = identifier
+      }
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Timer.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Timer.kt
index 3473e9e..a3851ed 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Timer.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Timer.kt
@@ -29,7 +29,6 @@
 import kotlin.collections.map
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
-import kotlin.jvm.JvmOverloads
 import kotlin.jvm.JvmStatic
 
 /**
@@ -56,16 +55,8 @@
   public override fun toBuilder(): Builder<*>
 
   public companion object {
-    /**
-     * Returns a default implementation of [Builder].
-     *
-     * Has the specified [identifier] and [namespace] and no other properties set.
-     */
-    @JvmStatic
-    @JvmOverloads
-    @Document.BuilderProducer
-    public fun Builder(identifier: String = "", namespace: String = ""): Builder<*> =
-      TimerImpl.Builder().setIdentifier(identifier).setNamespace(namespace)
+    /** Returns a default implementation of [Builder]. */
+    @JvmStatic @Document.BuilderProducer public fun Builder(): Builder<*> = TimerImpl.Builder()
   }
 
   /**
@@ -88,6 +79,10 @@
  *
  * Allows for extension like:
  * ```kt
+ * @Document(
+ *   name = "MyTimer",
+ *   parent = [Timer::class],
+ * )
  * class MyTimer internal constructor(
  *   timer: Timer,
  *   val foo: String,
@@ -97,6 +92,8 @@
  *   MyTimer.Builder
  * >(timer) {
  *
+ *   // No need to implement equals(), hashCode(), toString() or toBuilder()
+ *
  *   override val selfTypeName =
  *     "MyTimer"
  *
@@ -189,7 +186,9 @@
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    attributes["namespace"] = namespace
+    if (namespace.isNotEmpty()) {
+      attributes["namespace"] = namespace
+    }
     if (duration != null) {
       attributes["duration"] = duration.toString()
     }
@@ -197,7 +196,9 @@
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
     }
-    attributes["identifier"] = identifier
+    if (identifier.isNotEmpty()) {
+      attributes["identifier"] = identifier
+    }
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
@@ -217,10 +218,13 @@
    *     MyTimer.Builder>(...) {
    *
    *   class Builder
-   *   : Builder<
+   *   : AbstractTimer.Builder<
    *       Builder,
    *       MyTimer
    *   >() {
+   *
+   *     // No need to implement equals(), hashCode(), toString() or build()
+   *
    *     private var foo: String? = null
    *     private val bars = mutableListOf<Int>()
    *
@@ -352,7 +356,9 @@
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      attributes["namespace"] = namespace
+      if (namespace.isNotEmpty()) {
+        attributes["namespace"] = namespace
+      }
       if (duration != null) {
         attributes["duration"] = duration!!.toString()
       }
@@ -360,7 +366,9 @@
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
       }
-      attributes["identifier"] = identifier
+      if (identifier.isNotEmpty()) {
+        attributes["identifier"] = identifier
+      }
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/UnsupportedOperationStatus.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/UnsupportedOperationStatus.kt
index 807df06..04983fa 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/UnsupportedOperationStatus.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/UnsupportedOperationStatus.kt
@@ -28,7 +28,6 @@
 import kotlin.collections.map
 import kotlin.collections.mutableMapOf
 import kotlin.collections.plusAssign
-import kotlin.jvm.JvmOverloads
 import kotlin.jvm.JvmStatic
 
 /**
@@ -51,16 +50,10 @@
   public override fun toBuilder(): Builder<*>
 
   public companion object {
-    /**
-     * Returns a default implementation of [Builder].
-     *
-     * Has the specified [identifier] and [namespace] and no other properties set.
-     */
+    /** Returns a default implementation of [Builder]. */
     @JvmStatic
-    @JvmOverloads
     @Document.BuilderProducer
-    public fun Builder(identifier: String = "", namespace: String = ""): Builder<*> =
-      UnsupportedOperationStatusImpl.Builder().setIdentifier(identifier).setNamespace(namespace)
+    public fun Builder(): Builder<*> = UnsupportedOperationStatusImpl.Builder()
   }
 
   /**
@@ -80,6 +73,10 @@
  *
  * Allows for extension like:
  * ```kt
+ * @Document(
+ *   name = "MyUnsupportedOperationStatus",
+ *   parent = [UnsupportedOperationStatus::class],
+ * )
  * class MyUnsupportedOperationStatus internal constructor(
  *   unsupportedOperationStatus: UnsupportedOperationStatus,
  *   val foo: String,
@@ -89,6 +86,8 @@
  *   MyUnsupportedOperationStatus.Builder
  * >(unsupportedOperationStatus) {
  *
+ *   // No need to implement equals(), hashCode(), toString() or toBuilder()
+ *
  *   override val selfTypeName =
  *     "MyUnsupportedOperationStatus"
  *
@@ -177,12 +176,16 @@
 
   public final override fun toString(): String {
     val attributes = mutableMapOf<String, String>()
-    attributes["namespace"] = namespace
+    if (namespace.isNotEmpty()) {
+      attributes["namespace"] = namespace
+    }
     if (disambiguatingDescription != null) {
       attributes["disambiguatingDescription"] =
         disambiguatingDescription.toString(includeWrapperName = false)
     }
-    attributes["identifier"] = identifier
+    if (identifier.isNotEmpty()) {
+      attributes["identifier"] = identifier
+    }
     if (name != null) {
       attributes["name"] = name.toString(includeWrapperName = false)
     }
@@ -202,10 +205,13 @@
    *     MyUnsupportedOperationStatus.Builder>(...) {
    *
    *   class Builder
-   *   : Builder<
+   *   : AbstractUnsupportedOperationStatus.Builder<
    *       Builder,
    *       MyUnsupportedOperationStatus
    *   >() {
+   *
+   *     // No need to implement equals(), hashCode(), toString() or build()
+   *
    *     private var foo: String? = null
    *     private val bars = mutableListOf<Int>()
    *
@@ -329,12 +335,16 @@
     @Suppress("BuilderSetStyle")
     public final override fun toString(): String {
       val attributes = mutableMapOf<String, String>()
-      attributes["namespace"] = namespace
+      if (namespace.isNotEmpty()) {
+        attributes["namespace"] = namespace
+      }
       if (disambiguatingDescription != null) {
         attributes["disambiguatingDescription"] =
           disambiguatingDescription!!.toString(includeWrapperName = false)
       }
-      attributes["identifier"] = identifier
+      if (identifier.isNotEmpty()) {
+        attributes["identifier"] = identifier
+      }
       if (name != null) {
         attributes["name"] = name!!.toString(includeWrapperName = false)
       }
diff --git a/appactions/interaction/OWNERS b/appactions/interaction/OWNERS
index 1f59937..014a52a 100644
--- a/appactions/interaction/OWNERS
+++ b/appactions/interaction/OWNERS
@@ -1,5 +1,6 @@
 # Bug component: 1292315
 aliibrahim@google.com
 dennistwo@google.com
-jaazm@google.com
+jaazm@google.com #{LAST_RESORT_SUGGESTION}
 mkucharski@google.com
+raghavmehta@google.com
\ No newline at end of file
diff --git a/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/RobolectricGattServerTest.kt b/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/RobolectricGattServerTest.kt
index 2d4c379..740f3ed 100644
--- a/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/RobolectricGattServerTest.kt
+++ b/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/RobolectricGattServerTest.kt
@@ -118,7 +118,6 @@
             }
 
         bluetoothLe.openGattServer(listOf()).first().accept {
-            Assert.assertEquals(device.address, this.device.address)
         }
 
         Assert.assertTrue(opened.isCompleted)
diff --git a/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/ScanResultTest.kt b/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/ScanResultTest.kt
index 2e7b1fd..b2e834b 100644
--- a/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/ScanResultTest.kt
+++ b/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/ScanResultTest.kt
@@ -57,7 +57,7 @@
         assertEquals(scanResult.device.bondState, BluetoothDevice(fwkBluetoothDevice).bondState)
         assertEquals(scanResult.deviceAddress.address, address)
         assertEquals(scanResult.deviceAddress.addressType,
-            BluetoothAddress.ADDRESS_TYPE_RANDOM_STATIC)
+            BluetoothAddress.ADDRESS_TYPE_UNKNOWN)
         assertEquals(scanResult.isConnectable(), true)
         assertEquals(scanResult.timestampNanos, timeStampNanos)
         assertEquals(scanResult.getManufacturerSpecificData(1), null)
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothAddress.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothAddress.kt
index c289bdb..3c272a0 100644
--- a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothAddress.kt
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothAddress.kt
@@ -19,6 +19,7 @@
 import android.bluetooth.BluetoothAdapter
 import androidx.annotation.IntDef
 import androidx.annotation.RestrictTo
+import java.util.Objects
 
 /**
  * Represents a Bluetooth address for a remote device.
@@ -68,4 +69,14 @@
             else -> ADDRESS_TYPE_UNKNOWN
         }
     }
+
+    override fun equals(other: Any?): Boolean {
+        return other is BluetoothAddress &&
+            address == other.address &&
+            addressType == other.addressType
+    }
+
+    override fun hashCode(): Int {
+        return Objects.hash(address, addressType)
+    }
 }
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothDevice.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothDevice.kt
index 2c34db7..9275145 100644
--- a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothDevice.kt
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/BluetoothDevice.kt
@@ -42,10 +42,6 @@
     val name: String?
         get() = fwkDevice.name
 
-    @get:RestrictTo(RestrictTo.Scope.LIBRARY)
-    val address: String
-        get() = fwkDevice.address
-
     @get:RequiresPermission(
         anyOf = ["android.permission.BLUETOOTH",
             "android.permission.BLUETOOTH_CONNECT"]
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/ScanResult.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/ScanResult.kt
index 045b3de..1c48c65 100644
--- a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/ScanResult.kt
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/ScanResult.kt
@@ -45,7 +45,7 @@
     /** Bluetooth address for the remote device found. */
     val deviceAddress: BluetoothAddress
         get() = BluetoothAddress(fwkScanResult.device.address,
-            BluetoothAddress.ADDRESS_TYPE_RANDOM_STATIC)
+            BluetoothAddress.ADDRESS_TYPE_UNKNOWN)
 
     /** Device timestamp when the advertisement was last seen. */
     val timestampNanos: Long
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt
index c755d82..18841be 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt
@@ -66,7 +66,7 @@
         @SuppressLint("MissingPermission")
         fun bind(bluetoothDevice: BluetoothDevice) {
             currentBluetoothDevice = bluetoothDevice
-            textViewDeviceAddress.text = bluetoothDevice.address
+            textViewDeviceAddress.text = bluetoothDevice.id.toString()
             textViewDeviceName.text = bluetoothDevice.name
             textViewDeviceName.isVisible = bluetoothDevice.name.isNullOrEmpty().not()
         }
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
index 27ffe00..7a96d08 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.kt
@@ -226,14 +226,14 @@
 
     @SuppressLint("MissingPermission")
     private fun addNewTab(bluetoothDevice: BluetoothDevice): Tab {
-        val deviceAddress = bluetoothDevice.address
+        val deviceId = bluetoothDevice.id.toString()
         val deviceName = bluetoothDevice.name
 
         val newTab = binding.tabLayout.newTab()
         newTab.setCustomView(R.layout.tab_item_device)
 
         val customView = newTab.customView
-        customView?.findViewById<TextView>(R.id.text_view_address)?.text = deviceAddress
+        customView?.findViewById<TextView>(R.id.text_view_device_id)?.text = deviceId
         val textViewName = customView?.findViewById<TextView>(R.id.text_view_name)
         textViewName?.text = deviceName
         textViewName?.isVisible = deviceName.isNullOrEmpty().not()
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerViewModel.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerViewModel.kt
index 35f0072..0c4dfbc 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerViewModel.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerViewModel.kt
@@ -47,7 +47,7 @@
     }
 
     fun addScanResultIfNew(scanResult: ScanResult) {
-        val deviceAddress = scanResult.device.address
+        val deviceAddress = scanResult.deviceAddress.address
 
         if (_scanResultsMap.containsKey(deviceAddress).not()) {
             _scanResultsMap[deviceAddress] = scanResult
diff --git a/bluetooth/integration-tests/testapp/src/main/res/layout/tab_item_device.xml b/bluetooth/integration-tests/testapp/src/main/res/layout/tab_item_device.xml
index 7c24d4d..238672c 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/layout/tab_item_device.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/layout/tab_item_device.xml
@@ -28,7 +28,7 @@
         android:orientation="vertical">
 
         <TextView
-            android:id="@+id/text_view_address"
+            android:id="@+id/text_view_device_id"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textColor="@color/black"
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index dc00365..9353024 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -1,5 +1,3 @@
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
-
 buildscript {
     project.ext.supportRootFolder = project.projectDir.getParentFile()
     apply from: "repos.gradle"
@@ -19,27 +17,13 @@
 }
 
 apply from: "out.gradle"
-init.chooseOutDir()
+init.chooseBuildSrcBuildDir()
 
 ext.supportRootFolder = project.projectDir.getParentFile()
 apply from: "repos.gradle"
 apply plugin: "kotlin"
 
-allprojects {
-    repos.addMavenRepositories(repositories)
-
-    tasks.withType(KotlinCompile).configureEach {
-        kotlinOptions {
-            jvmTarget = "17"
-            freeCompilerArgs += [
-                    "-Werror",
-                    "-Xskip-metadata-version-check"
-            ]
-            languageVersion = "1.8"
-            apiVersion = "1.8"
-        }
-    }
-}
+repos.addMavenRepositories(repositories)
 
 dependencies {
     api(project("plugins"))
diff --git a/buildSrc/jetpad-integration/build.gradle b/buildSrc/jetpad-integration/build.gradle
index fc0c5cc..6941452 100644
--- a/buildSrc/jetpad-integration/build.gradle
+++ b/buildSrc/jetpad-integration/build.gradle
@@ -4,3 +4,6 @@
     sourceCompatibility = JavaVersion.VERSION_11
     targetCompatibility = JavaVersion.VERSION_11
 }
+
+apply from: "../out.gradle"
+init.chooseBuildSrcBuildDir()
diff --git a/buildSrc/out.gradle b/buildSrc/out.gradle
index 0ca9069..e0f12c2 100644
--- a/buildSrc/out.gradle
+++ b/buildSrc/out.gradle
@@ -39,17 +39,23 @@
     return new Tuple(outDir, buildSrcOut)
 }
 
-def chooseOutDir(subdir = "") {
+// Ideally this function would just be chooseBuildDir, but Gradle doesn't include the text ":buildSrc" in the project path
+def chooseBuildSrcBuildDir(subdir = "") {
     def (outDir, buildSrcOut) = getOutDir(subdir)
     project.ext.buildSrcOut = buildSrcOut
     project.ext.outDir = outDir
-    buildDir = new File(outDir, "$project.name/build")
-                .getCanonicalFile()
+    def pathAsFilepath = project.path.replace(":", "").replaceAll(":", "/")
+    project.layout.buildDirectory.set(new File(buildSrcOut, "$pathAsFilepath/build").getCanonicalFile())
+}
+
+def chooseOutDir(subdir = "") {
+    chooseBuildSrcBuildDir()
     subprojects {
         // Change buildDir first so that all plugins pick up the new value.
-        project.buildDir = new File("$project.parent.buildDir/../$project.name/build")
+        project.layout.buildDirectory.set(new File("$project.parent.buildDir/../$project.name/build"))
     }
 }
 
 ext.init.getOutDir = this.&getOutDir
 ext.init.chooseOutDir = this.&chooseOutDir
+ext.init.chooseBuildSrcBuildDir = this.&chooseBuildSrcBuildDir
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt
index 0f0e677..1304305 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dackka/GenerateMetadataTask.kt
@@ -119,7 +119,7 @@
 
     private fun generateReleaseNotesUrl(groupId: String): String {
         val library = groupId.removePrefix("androidx.").replace(".", "-")
-        return "https://developer.android.com/jetpack/androidx/releases/$library"
+        return "/jetpack/androidx/releases/$library"
     }
 
     companion object {
diff --git a/buildSrc/shared-dependencies.gradle b/buildSrc/shared-dependencies.gradle
index 96189f6..403bb79 100644
--- a/buildSrc/shared-dependencies.gradle
+++ b/buildSrc/shared-dependencies.gradle
@@ -1,6 +1,8 @@
 // This file applies dependencies common to projects in buildSrc
 
 apply from: "${buildscript.sourceFile.parent}/kotlin-dsl-dependency.gradle"
+// copy findGradleKotlinDsl to a local variable: https://github.com/gradle/gradle/issues/26057
+def findGradleKotlinDsl = project.findGradleKotlinDsl
 dependencies {
 
     // Gradle APIs
diff --git a/buildSrc/shared.gradle b/buildSrc/shared.gradle
index 02d35e4..f907dd2 100644
--- a/buildSrc/shared.gradle
+++ b/buildSrc/shared.gradle
@@ -1,4 +1,7 @@
 // This file applies configuration common to projects in buildSrc
+
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
 apply plugin: "kotlin"
 apply plugin: "java-gradle-plugin"
 
@@ -14,6 +17,8 @@
 dependencies {
     implementation(project(":jetpad-integration"))
 }
+apply from: "../out.gradle"
+init.chooseBuildSrcBuildDir()
 
 apply from: "../shared-dependencies.gradle"
 
@@ -30,3 +35,16 @@
 validatePlugins {
     enableStricterValidation = true
 }
+
+project.repos.addMavenRepositories(project.repositories)
+tasks.withType(KotlinCompile).configureEach {
+    kotlinOptions {
+        jvmTarget = "17"
+        freeCompilerArgs += [
+                "-Werror",
+                "-Xskip-metadata-version-check"
+        ]
+        languageVersion = "1.8"
+        apiVersion = "1.8"
+    }
+}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/impl/DeferrableSurface.java b/camera/camera-core/src/main/java/androidx/camera/core/impl/DeferrableSurface.java
index 98b0adf..58deea4 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/impl/DeferrableSurface.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/impl/DeferrableSurface.java
@@ -31,7 +31,6 @@
 import androidx.camera.core.Logger;
 import androidx.camera.core.impl.utils.executor.CameraXExecutors;
 import androidx.camera.core.impl.utils.futures.Futures;
-import androidx.camera.core.processing.SurfaceEdge;
 import androidx.concurrent.futures.CallbackToFutureAdapter;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -64,6 +63,7 @@
     /**
      * The exception that is returned by the ListenableFuture of {@link #getSurface()} if the
      * {@link Surface} backing the DeferrableSurface has already been closed.
+     *
      */
     @RestrictTo(Scope.LIBRARY_GROUP)
     public static final class SurfaceClosedException extends Exception {
@@ -111,10 +111,6 @@
     private CallbackToFutureAdapter.Completer<Void> mTerminationCompleter;
     private final ListenableFuture<Void> mTerminationFuture;
 
-    @GuardedBy("mLock")
-    private CallbackToFutureAdapter.Completer<Void> mCloseCompleter;
-    private final ListenableFuture<Void> mCloseFuture;
-
     @NonNull
     private final Size mPrescribedSize;
     private final int mPrescribedStreamFormat;
@@ -144,13 +140,6 @@
             return "DeferrableSurface-termination(" + DeferrableSurface.this + ")";
         });
 
-        mCloseFuture = CallbackToFutureAdapter.getFuture(completer -> {
-            synchronized (mLock) {
-                mCloseCompleter = completer;
-            }
-            return "DeferrableSurface-close(" + DeferrableSurface.this + ")";
-        });
-
         if (Logger.isDebugEnabled(TAG)) {
             printGlobalDebugCounts("Surface created", TOTAL_COUNT.incrementAndGet(),
                     USED_COUNT.get());
@@ -273,7 +262,6 @@
         synchronized (mLock) {
             if (!mClosed) {
                 mClosed = true;
-                mCloseCompleter.set(null);
 
                 if (mUseCount == 0) {
                     terminationCompleter = mTerminationCompleter;
@@ -293,21 +281,6 @@
     }
 
     /**
-     * Returns a future which completes when the deferrable surface is closed.
-     *
-     * <p>This is for propagating the closure to a upstream DeferrableSurface. For example,
-     * if StreamSharing is enabled, when Preview's DeferrableSurface is closed, the parent will
-     * listen to this future and close the connected {@link SurfaceEdge#getDeferrableSurface()}.
-     *
-     * @return A future signalling the deferrable surface is closed. Cancellation of this
-     * future is a no-op.
-     */
-    @NonNull
-    public ListenableFuture<Void> getCloseFuture() {
-        return Futures.nonCancellationPropagating(mCloseFuture);
-    }
-
-    /**
      * Decrements the use count.
      *
      * <p>If this causes the use count to go to zero and the surface has been closed, this will
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/internal/compat/quirk/LargeJpegImageQuirk.java b/camera/camera-core/src/main/java/androidx/camera/core/internal/compat/quirk/LargeJpegImageQuirk.java
index 56d98f2..c6ad529 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/internal/compat/quirk/LargeJpegImageQuirk.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/internal/compat/quirk/LargeJpegImageQuirk.java
@@ -32,7 +32,7 @@
  *     Description: Quirk required to check whether the captured JPEG image contains redundant
  *                  0's padding data. For example, Samsung A5 (2017) series devices have the
  *                  problem and result in the output JPEG image to be extremely large (about 32 MB).
- *     Device(s): Samsung Galaxy A5 (2017), A52, A70 and A72 series devices
+ *     Device(s): Samsung Galaxy A5 (2017), A52, A70, A72 and S7 series devices
  */
 @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
 public final class LargeJpegImageQuirk implements Quirk {
@@ -60,6 +60,9 @@
             // Samsung Galaxy A72 series devices
             "SM-A725F",
             "SM-A725M",
+            // Samsung Galaxy S7 series devices
+            "SM-G930T",
+            "SM-G930V",
             // Samsung Galaxy S22 series devices
             "SM-S901B",
             "SM-S901B/DS",
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/processing/DefaultSurfaceProcessor.java b/camera/camera-core/src/main/java/androidx/camera/core/processing/DefaultSurfaceProcessor.java
index 86a2789..7d70186 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/processing/DefaultSurfaceProcessor.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/processing/DefaultSurfaceProcessor.java
@@ -223,14 +223,7 @@
             surfaceOutput.updateTransformMatrix(mSurfaceOutputMatrix, mTextureMatrix);
             if (surfaceOutput.getFormat() == INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE) {
                 // Render GPU output directly.
-                try {
-                    mGlRenderer.render(surfaceTexture.getTimestamp(), mSurfaceOutputMatrix,
-                            surface);
-                } catch (RuntimeException e) {
-                    // This should not happen. However, when it happens, we catch the exception
-                    // to prevent the crash.
-                    Logger.e(TAG, "Failed to render with OpenGL.", e);
-                }
+                mGlRenderer.render(surfaceTexture.getTimestamp(), mSurfaceOutputMatrix, surface);
             } else {
                 checkState(surfaceOutput.getFormat() == ImageFormat.JPEG,
                         "Unsupported format: " + surfaceOutput.getFormat());
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/processing/SurfaceEdge.java b/camera/camera-core/src/main/java/androidx/camera/core/processing/SurfaceEdge.java
index db1fb86..12e389a 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/processing/SurfaceEdge.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/processing/SurfaceEdge.java
@@ -231,7 +231,7 @@
             throws DeferrableSurface.SurfaceClosedException {
         checkMainThread();
         checkNotClosed();
-        mSettableSurface.setProvider(provider, this::disconnect);
+        mSettableSurface.setProvider(provider);
     }
 
     /**
@@ -263,7 +263,7 @@
                 }));
         try {
             DeferrableSurface deferrableSurface = surfaceRequest.getDeferrableSurface();
-            if (mSettableSurface.setProvider(deferrableSurface, this::disconnect)) {
+            if (mSettableSurface.setProvider(deferrableSurface)) {
                 // TODO(b/286817690): consider close the deferrableSurface directly when the
                 //  SettableSurface is closed. The delay might cause issues on legacy devices.
                 mSettableSurface.getTerminationFuture().addListener(deferrableSurface::close,
@@ -628,8 +628,7 @@
          * @see SurfaceEdge#setProvider(DeferrableSurface)
          */
         @MainThread
-        public boolean setProvider(@NonNull DeferrableSurface provider,
-                @NonNull Runnable onProviderClosed)
+        public boolean setProvider(@NonNull DeferrableSurface provider)
                 throws SurfaceClosedException {
             checkMainThread();
             checkNotNull(provider);
@@ -650,8 +649,6 @@
             Futures.propagate(provider.getSurface(), mCompleter);
             provider.incrementUseCount();
             getTerminationFuture().addListener(provider::decrementUseCount, directExecutor());
-            // When the child is closed, close the parent too to stop rendering.
-            provider.getCloseFuture().addListener(onProviderClosed, directExecutor());
             return true;
         }
     }
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/impl/DeferrableSurfaceTest.java b/camera/camera-core/src/test/java/androidx/camera/core/impl/DeferrableSurfaceTest.java
index a35d440..30ff85a 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/impl/DeferrableSurfaceTest.java
+++ b/camera/camera-core/src/test/java/androidx/camera/core/impl/DeferrableSurfaceTest.java
@@ -16,8 +16,6 @@
 
 package androidx.camera.core.impl;
 
-import static androidx.camera.core.impl.utils.executor.CameraXExecutors.directExecutor;
-
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.Mockito.times;
@@ -27,6 +25,7 @@
 import android.view.Surface;
 
 import androidx.annotation.NonNull;
+import androidx.camera.core.impl.utils.executor.CameraXExecutors;
 import androidx.camera.core.impl.utils.futures.FutureCallback;
 import androidx.camera.core.impl.utils.futures.Futures;
 
@@ -88,17 +87,6 @@
     }
 
     @Test
-    public void close_closeFutureCompletes() {
-        // Arrange.
-        ListenableFuture<Void> closeFuture = mDeferrableSurface.getCloseFuture();
-        assertThat(closeFuture.isDone()).isFalse();
-        // Act.
-        mDeferrableSurface.close();
-        // Assert.
-        assertThat(closeFuture.isDone()).isTrue();
-    }
-
-    @Test
     public void terminationFutureFinishesWhenCompletelyDecremented()
             throws DeferrableSurface.SurfaceClosedException {
         Runnable listener = Mockito.mock(Runnable.class);
@@ -106,7 +94,7 @@
         mDeferrableSurface.incrementUseCount();
         mDeferrableSurface.close();
         mDeferrableSurface.getTerminationFuture().addListener(listener,
-                directExecutor());
+                CameraXExecutors.directExecutor());
         mDeferrableSurface.incrementUseCount();
         mDeferrableSurface.decrementUseCount();
         mDeferrableSurface.decrementUseCount();
@@ -120,7 +108,7 @@
 
         mDeferrableSurface.close();
         mDeferrableSurface.getTerminationFuture().addListener(listener,
-                directExecutor());
+                CameraXExecutors.directExecutor());
 
         Mockito.verify(listener, times(1)).run();
     }
@@ -162,7 +150,7 @@
         ArgumentCaptor<Throwable> throwableCaptor = ArgumentCaptor.forClass(Throwable.class);
 
         Futures.addCallback(surfaceListenableFuture, futureCallback,
-                directExecutor());
+                CameraXExecutors.directExecutor());
         verify(futureCallback, times(1)).onFailure(throwableCaptor.capture());
 
         assertThat(throwableCaptor.getValue()).isInstanceOf(
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEdgeTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEdgeTest.kt
index 2f552f36..6dac0c8 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEdgeTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/processing/SurfaceEdgeTest.kt
@@ -227,45 +227,18 @@
     }
 
     @Test
-    fun closeProvider_surfaceReleasedWhenRefCountingReaches0() {
-        // Arrange: create edge with ref counting incremented.
+    fun closeProviderAfterConnected_surfaceNotReleased() {
+        // Arrange.
         val surfaceRequest = surfaceEdge.createSurfaceRequest(FakeCamera())
         var result: SurfaceRequest.Result? = null
         surfaceRequest.provideSurface(fakeSurface, mainThreadExecutor()) {
             result = it
         }
-        val parentDeferrableSurface = surfaceEdge.deferrableSurface
-        parentDeferrableSurface.incrementUseCount()
         // Act: close the provider
         surfaceRequest.deferrableSurface.close()
         shadowOf(getMainLooper()).idle()
-        // Assert: the surface is not released because the parent has ref counting.
+        // Assert: the surface is not released because the parent is not closed.
         assertThat(result).isNull()
-        // Act: decrease ref counting
-        parentDeferrableSurface.decrementUseCount()
-        shadowOf(getMainLooper()).idle()
-        // Assert: the surface is released because the parent has not ref counting.
-        assertThat(result!!.resultCode)
-            .isEqualTo(SurfaceRequest.Result.RESULT_SURFACE_USED_SUCCESSFULLY)
-    }
-
-    @Test
-    fun closeChildProvider_parentEdgeClosed() {
-        // Arrange.
-        val parentEdge = SurfaceEdge(
-            PREVIEW, INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE,
-            StreamSpec.builder(INPUT_SIZE).build(), SENSOR_TO_BUFFER, true, Rect(), 0,
-            ROTATION_NOT_SPECIFIED, false
-        )
-        val childDeferrableSurface = surfaceEdge.deferrableSurface
-        parentEdge.setProvider(childDeferrableSurface)
-        // Act.
-        childDeferrableSurface.close()
-        shadowOf(getMainLooper()).idle()
-        // Assert.
-        assertThat(parentEdge.deferrableSurface.isClosed).isTrue()
-        // Clean up.
-        parentEdge.close()
     }
 
     @Test(expected = SurfaceClosedException::class)
diff --git a/collection/collection/api/current.txt b/collection/collection/api/current.txt
index 9c4a095..5b455fb 100644
--- a/collection/collection/api/current.txt
+++ b/collection/collection/api/current.txt
@@ -264,18 +264,18 @@
 
   @kotlin.jvm.JvmInline public final value class PairFloatFloat {
     ctor public PairFloatFloat(float first, float second);
-    method public operator float component1();
-    method public operator float component2();
-    method public float getFirst();
-    method public float getSecond();
-    property public final float first;
-    property public final float second;
+    method public inline operator float component1();
+    method public inline operator float component2();
+    method public inline float getFirst();
+    method public inline float getSecond();
+    property public final inline float first;
+    property public final inline float second;
   }
 
   @kotlin.jvm.JvmInline public final value class PairIntInt {
     ctor public PairIntInt(int first, int second);
-    method public operator int component1();
-    method public operator int component2();
+    method public inline operator int component1();
+    method public inline operator int component2();
     method public int getFirst();
     method public int getSecond();
     property public final int first;
@@ -284,8 +284,8 @@
 
   public final class PairLongLong {
     ctor public PairLongLong(long first, long second);
-    method public operator long component1();
-    method public operator long component2();
+    method public inline operator long component1();
+    method public inline operator long component2();
     method public long getFirst();
     method public long getSecond();
     property public final long first;
diff --git a/collection/collection/api/restricted_current.txt b/collection/collection/api/restricted_current.txt
index 0f927a4..d8c1713 100644
--- a/collection/collection/api/restricted_current.txt
+++ b/collection/collection/api/restricted_current.txt
@@ -266,18 +266,18 @@
 
   @kotlin.jvm.JvmInline public final value class PairFloatFloat {
     ctor public PairFloatFloat(float first, float second);
-    method public operator float component1();
-    method public operator float component2();
-    method public float getFirst();
-    method public float getSecond();
-    property public final float first;
-    property public final float second;
+    method public inline operator float component1();
+    method public inline operator float component2();
+    method public inline float getFirst();
+    method public inline float getSecond();
+    property public final inline float first;
+    property public final inline float second;
   }
 
   @kotlin.jvm.JvmInline public final value class PairIntInt {
     ctor public PairIntInt(int first, int second);
-    method public operator int component1();
-    method public operator int component2();
+    method public inline operator int component1();
+    method public inline operator int component2();
     method public int getFirst();
     method public int getSecond();
     property public final int first;
@@ -286,8 +286,8 @@
 
   public final class PairLongLong {
     ctor public PairLongLong(long first, long second);
-    method public operator long component1();
-    method public operator long component2();
+    method public inline operator long component1();
+    method public inline operator long component2();
     method public long getFirst();
     method public long getSecond();
     property public final long first;
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/PackingUtils.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/PackingUtils.kt
index 983a5a3..00d1b22 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/PackingUtils.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/PackingUtils.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@file:Suppress("NOTHING_TO_INLINE")
+@file:Suppress("NOTHING_TO_INLINE", "KotlinRedundantDiagnosticSuppress")
 
 package androidx.collection
 
@@ -23,40 +23,12 @@
 internal inline fun packFloats(val1: Float, val2: Float): Long {
     val v1 = val1.toBits().toLong()
     val v2 = val2.toBits().toLong()
-    return v1.shl(32) or (v2 and 0xFFFFFFFF)
-}
-
-/**
- * Unpacks the first Float value in [packFloats] from its returned Long.
- */
-internal inline fun unpackFloat1(value: Long): Float {
-    return Float.fromBits(value.shr(32).toInt())
-}
-
-/**
- * Unpacks the second Float value in [packFloats] from its returned Long.
- */
-internal inline fun unpackFloat2(value: Long): Float {
-    return Float.fromBits(value.and(0xFFFFFFFF).toInt())
+    return (v1 shl 32) or (v2 and 0xFFFFFFFF)
 }
 
 /**
  * Packs two Int values into one Long value for use in inline classes.
  */
 internal inline fun packInts(val1: Int, val2: Int): Long {
-    return val1.toLong().shl(32) or (val2.toLong() and 0xFFFFFFFF)
-}
-
-/**
- * Unpacks the first Int value in [packInts] from its returned ULong.
- */
-internal inline fun unpackInt1(value: Long): Int {
-    return value.shr(32).toInt()
-}
-
-/**
- * Unpacks the second Int value in [packInts] from its returned ULong.
- */
-internal inline fun unpackInt2(value: Long): Int {
-    return value.and(0xFFFFFFFF).toInt()
+    return (val1.toLong() shl 32) or (val2.toLong() and 0xFFFFFFFF)
 }
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/PairFloatFloat.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/PairFloatFloat.kt
index c0e82f1..84462e9 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/PairFloatFloat.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/PairFloatFloat.kt
@@ -13,15 +13,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+@file:Suppress("NOTHING_TO_INLINE", "KotlinRedundantDiagnosticSuppress")
 
 package androidx.collection
 
+import kotlin.jvm.JvmField
+import kotlin.jvm.JvmInline
+
 /**
  * Container to ease passing around a tuple of two [Float] values.
  */
-@kotlin.jvm.JvmInline
-public value class PairFloatFloat internal constructor(internal val packedValue: Long) {
-
+@JvmInline
+public value class PairFloatFloat internal constructor(
+    @PublishedApi @JvmField internal val packedValue: Long
+) {
     /**
      * Constructs a [PairFloatFloat] with two [Float] values.
      *
@@ -33,18 +38,14 @@
     /**
      * The first value in the pair.
      */
-    public val first: Float
-        get() {
-            return unpackFloat1(packedValue)
-        }
+    public inline val first: Float
+        get() = Float.fromBits((packedValue shr 32).toInt())
 
     /**
      * The second value in the pair.
      */
-    public val second: Float
-        get() {
-            return unpackFloat2(packedValue)
-        }
+    public inline val second: Float
+        get() = Float.fromBits((packedValue and 0xFFFFFFFF).toInt())
 
     /**
      * Returns the [first] component of the pair. For instance, the first component
@@ -56,7 +57,8 @@
      * val (first, second) = myPair
      * ```
      */
-    public operator fun component1(): Float = first
+    // NOTE: Unpack the value directly because using `first` forces an invokestatic
+    public inline operator fun component1(): Float = Float.fromBits((packedValue shr 32).toInt())
 
     /**
      * Returns the [second] component of the pair. For instance, the second component
@@ -68,9 +70,9 @@
      * val (first, second) = myPair
      * ```
      */
-    public operator fun component2(): Float = second
+    // NOTE: Unpack the value directly because using `second` forces an invokestatic
+    public inline operator fun component2(): Float =
+        Float.fromBits((packedValue and 0xFFFFFFFF).toInt())
 
-    override fun toString(): String {
-        return "PairFloatFloat{" + first + " " + second + "}";
-    }
+    override fun toString(): String = "($first, $second)"
 }
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/PairIntInt.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/PairIntInt.kt
index a7d6158..941a5f8 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/PairIntInt.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/PairIntInt.kt
@@ -13,15 +13,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+@file:Suppress("NOTHING_TO_INLINE", "KotlinRedundantDiagnosticSuppress")
 
 package androidx.collection
 
+import kotlin.jvm.JvmField
+import kotlin.jvm.JvmInline
+
 /**
  * Container to ease passing around a tuple of two [Int] values.
  */
-@kotlin.jvm.JvmInline
-public value class PairIntInt internal constructor(internal val packedValue: Long) {
-
+@JvmInline
+public value class PairIntInt internal constructor(
+    @PublishedApi @JvmField internal val packedValue: Long
+) {
     /**
      * Constructs a [PairIntInt] with two [Int] values.
      *
@@ -34,17 +39,13 @@
      * The first value in the pair.
      */
     public val first: Int
-        get() {
-            return unpackInt1(packedValue)
-        }
+        get() = (packedValue shr 32).toInt()
 
     /**
      * The second value in the pair.
      */
     public val second: Int
-        get() {
-            return unpackInt2(packedValue)
-        }
+        get() = (packedValue and 0xFFFFFFFF).toInt()
 
     /**
      * Returns the [first] component of the pair. For instance, the first component
@@ -56,7 +57,8 @@
      * val (first, second) = myPair
      * ```
      */
-    public operator fun component1(): Int = first
+    // NOTE: Unpack the value directly because using `first` forces an invokestatic
+    public inline operator fun component1(): Int = (packedValue shr 32).toInt()
 
     /**
      * Returns the [second] component of the pair. For instance, the second component
@@ -68,9 +70,8 @@
      * val (first, second) = myPair
      * ```
      */
-    public operator fun component2(): Int = second
+    // NOTE: Unpack the value directly because using `second` forces an invokestatic
+    public inline operator fun component2(): Int = (packedValue and 0xFFFFFFFF).toInt()
 
-    override fun toString(): String {
-        return "PairIntInt{" + first + " " + second + "}";
-    }
+    override fun toString(): String = "($first, $second)"
 }
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/PairLongLong.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/PairLongLong.kt
index e58a458..7184f9a 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/PairLongLong.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/PairLongLong.kt
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+@file:Suppress("NOTHING_TO_INLINE", "KotlinRedundantDiagnosticSuppress")
 
 package androidx.collection
 
@@ -23,7 +24,6 @@
  * @param second the second value in the pair
  */
 public class PairLongLong public constructor(public val first: Long, public val second: Long) {
-
     /**
      * Returns the [first] component of the pair. For instance, the first component
      * of `PairLongLong(3, 4)` is `3`.
@@ -34,7 +34,7 @@
      * val (first, second) = myPair
      * ```
      */
-    public operator fun component1(): Long = first
+    public inline operator fun component1(): Long = first
 
     /**
      * Returns the [second] component of the pair. For instance, the second component
@@ -46,7 +46,7 @@
      * val (first, second) = myPair
      * ```
      */
-    public operator fun component2(): Long = second
+    public inline operator fun component2(): Long = second
 
     /**
      * Checks the two values for equality.
@@ -71,6 +71,6 @@
     }
 
     override fun toString(): String {
-        return "PairLongLong{" + first + " " + second + "}";
+        return "($first, $second)";
     }
 }
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterMap.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterMap.kt
index c9e9317..a555bc6 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterMap.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterMap.kt
@@ -249,6 +249,16 @@
  * [asMap] to create a thin wrapper around a [ScatterMap]. Please refer to
  * [asMap] for more details and caveats.
  *
+ * **ScatterMap and SimpleArrayMap**: like [SimpleArrayMap],
+ * [ScatterMap]/[MutableScatterMap] is designed to avoid the allocation of
+ * extra objects when inserting new entries in the map. However, the
+ * implementation of [ScatterMap]/[MutableScatterMap] offers better performance
+ * characteristics compared to [SimpleArrayMap] and is thus generally
+ * preferable. If memory usage is a concern, [SimpleArrayMap] automatically
+ * shrinks its storage to avoid using more memory than necessary. You can
+ * also control memory usage with [MutableScatterMap] by manually calling
+ * [MutableScatterMap.trim].
+ *
  * @see [MutableScatterMap]
  */
 public sealed class ScatterMap<K, V> {
@@ -716,6 +726,16 @@
  * method [asMutableMap] to create a thin wrapper around a [MutableScatterMap].
  * Please refer to [asMutableMap] for more details and caveats.
  *
+ * **MutableScatterMap and SimpleArrayMap**: like [SimpleArrayMap],
+ * [MutableScatterMap] is designed to avoid the allocation of
+ * extra objects when inserting new entries in the map. However, the
+ * implementation of [MutableScatterMap] offers better performance
+ * characteristics compared to [SimpleArrayMap] and is thus generally
+ * preferable. If memory usage is a concern, [SimpleArrayMap] automatically
+ * shrinks its storage to avoid using more memory than necessary. You can
+ * also control memory usage with [MutableScatterMap] by manually calling
+ * [MutableScatterMap.trim].
+ *
  * @constructor Creates a new [MutableScatterMap]
  * @param initialCapacity The initial desired capacity for this container.
  * the container will honor this value by guaranteeing its internal structures
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/SimpleArrayMap.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/SimpleArrayMap.kt
index d0d2319..21fad0d 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/SimpleArrayMap.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/SimpleArrayMap.kt
@@ -51,6 +51,12 @@
  * class can be preferable since it doesn't bring in any of the implementation of those
  * APIs, allowing that code to be stripped by ProGuard.
  *
+ * **NOTE:** Consider using [MutableScatterMap] instead of this class. [MutableScatterMap] also
+ * avoids creating a new object per entry but offers better performance characteristics. If
+ * a [Map] interface is required, see [MutableScatterMap.asMap]. If a [MutableMap] interface is
+ * required, see [MutableScatterMap.asMutableMap]. A [MutableScatterMap] can also be passed as
+ * a [ScatterMap] to provide a read-only API surface.
+ *
  * @constructor Create a new [SimpleArrayMap] with a given initial capacity. The default capacity of
  * an array map is 0, and will grow once items are added to it.
  */
diff --git a/collection/collection/src/jvmMain/java/androidx/collection/ArrayMap.java b/collection/collection/src/jvmMain/java/androidx/collection/ArrayMap.java
index 2a79a6c..5ecc0bc 100644
--- a/collection/collection/src/jvmMain/java/androidx/collection/ArrayMap.java
+++ b/collection/collection/src/jvmMain/java/androidx/collection/ArrayMap.java
@@ -54,6 +54,11 @@
  * you have no control over this shrinking -- if you set a capacity and then remove an
  * item, it may reduce the capacity to better match the current size.  In the future an
  * explicit call to set the capacity should turn off this aggressive shrinking behavior.</p>
+ *
+ * <p><strong>NOTE:</strong> Consider using {@link MutableScatterMap} instead of this class.
+ * {@link MutableScatterMap} also avoids creating an extra object per entry but offers overall
+ * better performance characteristics. If a {@link Map}-like interface is required, please
+ * see {@link MutableScatterMap#asMap()} and {@link MutableScatterMap#asMutableMap()}.</p>
  */
 public class ArrayMap<K, V> extends SimpleArrayMap<K, V> implements Map<K, V> {
     @Nullable
diff --git a/collection/collection/src/jvmMain/kotlin/androidx/collection/ArrayMap.kt b/collection/collection/src/jvmMain/kotlin/androidx/collection/ArrayMap.kt
index cb30c41..3e4c81a 100644
--- a/collection/collection/src/jvmMain/kotlin/androidx/collection/ArrayMap.kt
+++ b/collection/collection/src/jvmMain/kotlin/androidx/collection/ArrayMap.kt
@@ -18,7 +18,11 @@
 
 package androidx.collection
 
-/** Returns an empty new [ArrayMap]. */
+/**
+ * Returns an empty new [ArrayMap].
+ * **NOTE:** Consider using [mutableScatterMapOf] instead. [MutableScatterMap] also
+ * avoids creating a new object per entry but offers better performance characteristics.
+ */
 public inline fun <K, V> arrayMapOf(): ArrayMap<K, V> = ArrayMap()
 
 /**
@@ -27,6 +31,9 @@
  *
  * If multiple pairs have the same key, the resulting map will contain the value from the last of
  * those pairs.
+ *
+ * **NOTE:** Consider using [mutableScatterMapOf] instead. [MutableScatterMap] also
+ * avoids creating a new object per entry but offers better performance characteristics.
  */
 public fun <K, V> arrayMapOf(vararg pairs: Pair<K, V>): ArrayMap<K, V> {
     val map = ArrayMap<K, V>(pairs.size)
diff --git a/compose/animation/animation-core/lint-baseline.xml b/compose/animation/animation-core/lint-baseline.xml
index b9a2423..6302da6 100644
--- a/compose/animation/animation-core/lint-baseline.xml
+++ b/compose/animation/animation-core/lint-baseline.xml
@@ -2,6 +2,87 @@
 <issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="cli" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
 
     <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="fun &lt;V : AnimationVector> VectorizedAnimationSpec&lt;V>.createAnimation("
+        errorLine2="                                                     ~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/animation/core/Animation.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="fun estimateAnimationDurationMillis("
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/animation/core/SpringEstimation.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="fun estimateAnimationDurationMillis("
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/animation/core/SpringEstimation.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="fun estimateAnimationDurationMillis("
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/animation/core/SpringEstimation.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="    var playTimeNanos by mutableLongStateOf(0L)"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="    var isSeeking: Boolean by mutableStateOf(false)"
+        errorLine2="        ~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="    fun setPlaytimeAfterInitialAndTargetStateEstablished("
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="    inner class DeferredAnimation&lt;T, V : AnimationVector> internal constructor("
+        errorLine2="                ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="fun &lt;S, T, V : AnimationVector> Transition&lt;S>.createDeferredAnimation("
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt"/>
+    </issue>
+
+    <issue
         id="PrimitiveInLambda"
         message="Use a functional interface instead of lambda syntax for lambdas with primitive values in method animateFloatAsState has parameter &apos;finishedListener&apos; with type Function1&lt;? super Float, Unit>."
         errorLine1="    finishedListener: ((Float) -> Unit)? = null"
diff --git a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/EnterExitTransition.kt b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/EnterExitTransition.kt
index f5a9d27..2dd0cdd 100644
--- a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/EnterExitTransition.kt
+++ b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/EnterExitTransition.kt
@@ -26,15 +26,12 @@
 import androidx.compose.animation.core.TwoWayConverter
 import androidx.compose.animation.core.VectorConverter
 import androidx.compose.animation.core.VisibilityThreshold
-import androidx.compose.animation.core.animateFloat
-import androidx.compose.animation.core.animateValue
 import androidx.compose.animation.core.createDeferredAnimation
 import androidx.compose.animation.core.spring
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Immutable
 import androidx.compose.runtime.Stable
 import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.setValue
@@ -856,26 +853,8 @@
     exit: ExitTransition,
     label: String
 ): Modifier {
-    // Active enter & active exit reference the enter and exit transition that is currently being
-    // used. It is important to preserve the active enter/exit that was previously used before
-    // changing target state, such that if the previous enter/exit is interrupted, we still hold
-    // reference to the enter/exit that define those animations and therefore could recover.
-    var activeEnter by remember(this) { mutableStateOf(enter) }
-    var activeExit by remember(this) { mutableStateOf(exit) }
-    if (currentState == targetState && currentState == EnterExitState.Visible) {
-        if (isSeeking) {
-            // When seeking, the timing is different and there's no need to handle interruptions.
-            activeEnter = enter
-            activeExit = exit
-        } else {
-            activeEnter = EnterTransition.None
-            activeExit = ExitTransition.None
-        }
-    } else if (targetState == EnterExitState.Visible) {
-        activeEnter += enter
-    } else {
-        activeExit += exit
-    }
+    val activeEnter = trackActiveEnter(enter = enter)
+    val activeExit = trackActiveExit(exit = exit)
 
     val shouldAnimateSlide = activeEnter.data.slide != null || activeExit.data.slide != null
     val shouldAnimateSizeChange =
@@ -912,11 +891,55 @@
 }
 
 @Composable
+internal fun Transition<EnterExitState>.trackActiveEnter(enter: EnterTransition): EnterTransition {
+    // Active enter & active exit reference the enter and exit transition that is currently being
+    // used. It is important to preserve the active enter/exit that was previously used before
+    // changing target state, such that if the previous enter/exit is interrupted, we still hold
+    // reference to the enter/exit that define those animations and therefore could recover.
+    var activeEnter by remember(this) { mutableStateOf(enter) }
+    if (currentState == targetState && currentState == EnterExitState.Visible) {
+        if (isSeeking) {
+            // When seeking, the timing is different and there's no need to handle interruptions.
+            activeEnter = enter
+        } else {
+            activeEnter = EnterTransition.None
+        }
+    } else if (targetState == EnterExitState.Visible) {
+        activeEnter += enter
+    }
+    return activeEnter
+}
+
+@Composable
+internal fun Transition<EnterExitState>.trackActiveExit(exit: ExitTransition): ExitTransition {
+    // Active enter & active exit reference the enter and exit transition that is currently being
+    // used. It is important to preserve the active enter/exit that was previously used before
+    // changing target state, such that if the previous enter/exit is interrupted, we still hold
+    // reference to the enter/exit that define those animations and therefore could recover.
+    var activeExit by remember(this) { mutableStateOf(exit) }
+    if (currentState == targetState && currentState == EnterExitState.Visible) {
+        if (isSeeking) {
+            // When seeking, the timing is different and there's no need to handle interruptions.
+            activeExit = exit
+        } else {
+            activeExit = ExitTransition.None
+        }
+    } else if (targetState != EnterExitState.Visible) {
+        activeExit += exit
+    }
+    return activeExit
+}
+
+internal fun interface GraphicsLayerBlockForEnterExit {
+    fun init(): GraphicsLayerScope.() -> Unit
+}
+
+@Composable
 private fun Transition<EnterExitState>.createGraphicsLayerBlock(
     enter: EnterTransition,
     exit: ExitTransition,
     label: String
-): GraphicsLayerScope.() -> Unit {
+): GraphicsLayerBlockForEnterExit {
 
     val shouldAnimateAlpha = enter.data.fade != null || exit.data.fade != null
     val shouldAnimateScale = enter.data.scale != null || exit.data.scale != null
@@ -924,8 +947,27 @@
     // Fade - it's important to put fade in the end. Otherwise fade will clip slide.
     // We'll animate if at any point during the transition fadeIn/fadeOut becomes non-null. This
     // would ensure the removal of fadeIn/Out amid a fade animation doesn't result in a jump.
-    val alpha by if (shouldAnimateAlpha) {
-        animateFloat(
+    val alphaAnimation = if (shouldAnimateAlpha) {
+        createDeferredAnimation(typeConverter = Float.VectorConverter,
+            label = remember { "$label alpha" }
+        )
+    } else null
+
+    val scaleAnimation = if (shouldAnimateScale) {
+        createDeferredAnimation(typeConverter = Float.VectorConverter,
+            label = remember { "$label scale" }
+        )
+    } else null
+
+    val transformOriginAnimation = if (shouldAnimateScale) {
+        createDeferredAnimation(
+            TransformOriginVectorConverter,
+            label = "TransformOriginInterruptionHandling"
+        )
+    } else null
+
+    return GraphicsLayerBlockForEnterExit {
+        val alpha = alphaAnimation?.animate(
             transitionSpec = {
                 when {
                     EnterExitState.PreEnter isTransitioningTo EnterExitState.Visible ->
@@ -937,7 +979,6 @@
                     else -> DefaultAlphaAndScaleSpring
                 }
             },
-            label = remember { "$label alpha" }
         ) {
             when (it) {
                 EnterExitState.Visible -> 1f
@@ -945,12 +986,8 @@
                 EnterExitState.PostExit -> exit.data.fade?.alpha ?: 1f
             }
         }
-    } else {
-        DefaultAlpha
-    }
 
-    return if (shouldAnimateScale) {
-        val scale by animateFloat(
+        val scale = scaleAnimation?.animate(
             transitionSpec = {
                 when {
                     EnterExitState.PreEnter isTransitioningTo EnterExitState.Visible ->
@@ -961,8 +998,7 @@
 
                     else -> DefaultAlphaAndScaleSpring
                 }
-            },
-            label = remember { "$label scale" }
+            }
         ) {
             when (it) {
                 EnterExitState.Visible -> 1f
@@ -978,10 +1014,7 @@
             }
         // Animate transform origin if there's any change. If scale is only defined for enter or
         // exit, use the same transform origin for both.
-        val transformOrigin by animateValue(
-            TransformOriginVectorConverter,
-            label = "TransformOriginInterruptionHandling"
-        ) {
+        val transformOrigin = transformOriginAnimation?.animate({ spring() }) {
             when (it) {
                 EnterExitState.Visible -> transformOriginWhenVisible
                 EnterExitState.PreEnter ->
@@ -993,16 +1026,12 @@
         }
 
         val block: GraphicsLayerScope.() -> Unit = {
-            this.alpha = alpha
-            this.scaleX = scale
-            this.scaleY = scale
-            this.transformOrigin = transformOrigin
+            this.alpha = alpha?.value ?: 1f
+            this.scaleX = scale?.value ?: 1f
+            this.scaleY = scale?.value ?: 1f
+            this.transformOrigin = transformOrigin?.value ?: TransformOrigin.Center
         }
         block
-    } else if (shouldAnimateAlpha) {
-        { this.alpha = alpha }
-    } else {
-        {}
     }
 }
 
@@ -1012,7 +1041,6 @@
         convertFromVector = { TransformOrigin(it.v1, it.v2) }
     )
 
-private val DefaultAlpha = mutableFloatStateOf(1f)
 private val DefaultAlphaAndScaleSpring = spring<Float>(stiffness = Spring.StiffnessMediumLow)
 
 private val DefaultOffsetAnimationSpec = spring(
@@ -1027,7 +1055,7 @@
     var slideAnimation: Transition<EnterExitState>.DeferredAnimation<IntOffset, AnimationVector2D>?,
     var enter: EnterTransition,
     var exit: ExitTransition,
-    var graphicsLayerBlock: GraphicsLayerScope.() -> Unit
+    var graphicsLayerBlock: GraphicsLayerBlockForEnterExit
 ) : LayoutModifierNodeWithPassThroughIntrinsics() {
 
     private var lookaheadConstraintsAvailable = false
@@ -1119,6 +1147,7 @@
                 placeable.place(0, 0)
             }
         } else {
+            val layerBlock = graphicsLayerBlock.init()
             // Measure the content based on the current constraints passed down from parent.
             // AnimatedContent will measure outgoing children with a cached constraints to avoid
             // re-layout the outgoing content. At the animateEnterExit() level, it's not best not
@@ -1141,7 +1170,7 @@
                 ?: IntOffset.Zero) + slideOffset
             return layout(currentSize.width, currentSize.height) {
                 placeable.placeWithLayer(
-                    offset.x + offsetDelta.x, offset.y + offsetDelta.y, 0f, graphicsLayerBlock
+                    offset.x + offsetDelta.x, offset.y + offsetDelta.y, 0f, layerBlock
                 )
             }
         }
@@ -1184,7 +1213,7 @@
     var slideAnimation: Transition<EnterExitState>.DeferredAnimation<IntOffset, AnimationVector2D>?,
     var enter: EnterTransition,
     var exit: ExitTransition,
-    var graphicsLayerBlock: GraphicsLayerScope.() -> Unit
+    var graphicsLayerBlock: GraphicsLayerBlockForEnterExit
 ) : ModifierNodeElement<EnterExitTransitionModifierNode>() {
     override fun create(): EnterExitTransitionModifierNode =
         EnterExitTransitionModifierNode(
diff --git a/compose/foundation/foundation/lint-baseline.xml b/compose/foundation/foundation/lint-baseline.xml
index b49d292..220f977 100644
--- a/compose/foundation/foundation/lint-baseline.xml
+++ b/compose/foundation/foundation/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="cli" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="NewApi"
@@ -11,6 +11,24 @@
     </issue>
 
     <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class TextDelegate("
+        errorLine2="      ~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/foundation/text/TextDelegate.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="        fun applyCompositionDecoration("
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/foundation/text/TextFieldDelegate.kt"/>
+    </issue>
+
+    <issue
         id="BanThreadSleep"
         message="Uses Thread.sleep()"
         errorLine1="            Thread.sleep(5)"
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerStateTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerStateTest.kt
index 3c397d7..816340a 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerStateTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/pager/PagerStateTest.kt
@@ -540,6 +540,89 @@
     }
 
     @Test
+    fun targetPage_valueAfterScrollingAfterMidpoint() {
+        createPager(initialPage = 5, modifier = Modifier.fillMaxSize())
+
+        var previousCurrentPage = pagerState.currentPage
+
+        val forwardDelta = (pagerSize * 0.7f) * scrollForwardSign
+        onPager().performTouchInput {
+            down(layoutStart)
+            if (vertical) {
+                moveBy(Offset(0f, forwardDelta))
+            } else {
+                moveBy(Offset(forwardDelta, 0f))
+            }
+        }
+
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isNotEqualTo(previousCurrentPage)
+            assertThat(pagerState.targetPage).isEqualTo(previousCurrentPage + 1)
+        }
+
+        onPager().performTouchInput { up() }
+
+        rule.runOnIdle {
+            previousCurrentPage = pagerState.currentPage
+        }
+
+        val backwardDelta = (pagerSize * 0.7f) * scrollForwardSign * -1
+        onPager().performTouchInput {
+            down(layoutEnd)
+            if (vertical) {
+                moveBy(Offset(0f, backwardDelta))
+            } else {
+                moveBy(Offset(backwardDelta, 0f))
+            }
+        }
+
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isNotEqualTo(previousCurrentPage)
+            assertThat(pagerState.targetPage).isEqualTo(previousCurrentPage - 1)
+        }
+
+        onPager().performTouchInput { up() }
+    }
+
+    @Test
+    fun targetPage_valueAfterScrollingForwardAndBackward() {
+        createPager(initialPage = 5, modifier = Modifier.fillMaxSize())
+
+        val startCurrentPage = pagerState.currentPage
+
+        val forwardDelta = (pagerSize * 0.8f) * scrollForwardSign
+        onPager().performTouchInput {
+            down(layoutStart)
+            if (vertical) {
+                moveBy(Offset(0f, forwardDelta))
+            } else {
+                moveBy(Offset(forwardDelta, 0f))
+            }
+        }
+
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isNotEqualTo(startCurrentPage)
+            assertThat(pagerState.targetPage).isEqualTo(startCurrentPage + 1)
+        }
+
+        val backwardDelta = (pagerSize * 0.2f) * scrollForwardSign * -1
+        onPager().performTouchInput {
+            if (vertical) {
+                moveBy(Offset(0f, backwardDelta))
+            } else {
+                moveBy(Offset(backwardDelta, 0f))
+            }
+        }
+
+        rule.runOnIdle {
+            assertThat(pagerState.currentPage).isNotEqualTo(startCurrentPage)
+            assertThat(pagerState.targetPage).isEqualTo(startCurrentPage)
+        }
+
+        onPager().performTouchInput { up() }
+    }
+
+    @Test
     fun settledPage_onAnimationScroll_shouldChangeOnScrollFinishedOnly() {
         // Arrange
         var settledPageChanges = 0
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/OverscrollConfiguration.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/OverscrollConfiguration.kt
index 56ee290..59ae137 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/OverscrollConfiguration.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/OverscrollConfiguration.kt
@@ -24,6 +24,11 @@
 /**
  * Metadata for overscroll effects for android platform.
  *
+ * Note: this API is experimental and liable to be changed / removed. [glowColor] only applies
+ * before Android S and so might be misleading to have in a generic configuration object, and
+ * [drawPadding] may be moved to a different part of the API surface / removed depending on changes
+ * to [OverscrollEffect].
+ *
  * @param glowColor color for the glow effect, if the platform effect is a glow effect, otherwise
  * ignored.
  * @param drawPadding the amount of padding to apply from scrollable container bounds to
@@ -61,6 +66,8 @@
 /**
  * Composition local to provide configuration for scrolling containers down the
  * hierarchy. `null` means there will be no overscroll at all.
+ *
+ * Note: this is experimental since the underlying [OverscrollConfiguration] is also experimental.
  */
 @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
 @ExperimentalFoundationApi
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Overscroll.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Overscroll.kt
index 927a72e..3fbf538 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Overscroll.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Overscroll.kt
@@ -39,6 +39,15 @@
  * [androidx.compose.foundation.gestures.scrollable]. Then you can draw the effect on top of the
  * scrolling content using [Modifier.overscroll].
  *
+ * Note: this API is currently experimental and liable to change. The overall behavioral
+ * characteristics of [applyToScroll] and [applyToFling] are unlikely to change, but the
+ * relationship and layering between the stateful part of overscroll and the [effectModifier] is
+ * likely to be changed in the future. This should not have a large impact on custom overscroll
+ * implementations, but it may require you to separate parts of the implementation into different
+ * parts that implement different interfaces. Fewer changes are expected if you are not implementing
+ * a custom OverscrollEffect, but instead are just calling [applyToFling] and [applyToScroll] on
+ * an existing instance.
+ *
  * @sample androidx.compose.foundation.samples.OverscrollSample
  */
 @ExperimentalFoundationApi
@@ -130,6 +139,10 @@
  * also need to propagate events to the [overscrollEffect], most commonly by using a
  * [androidx.compose.foundation.gestures.scrollable].
  *
+ * Note: this API is experimental because [OverscrollEffect] is also experimental. Depending on
+ * changes to OverscrollEffect, this API may be modified / removed, but there will be a similar API
+ * to render the visual part of an OverscrollEffect as a modifier.
+ *
  * @sample androidx.compose.foundation.samples.OverscrollSample
  *
  * @param overscrollEffect the [OverscrollEffect] to render
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt
index 1e2219a..f9e81a1 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt
@@ -187,6 +187,8 @@
     internal var upDownDifference: Offset by mutableStateOf(Offset.Zero)
     internal var snapRemainingScrollOffset by mutableFloatStateOf(0f)
 
+    private var isScrollingForward: Boolean by mutableStateOf(false)
+
     private val scrollPosition = PagerScrollPosition(initialPage, 0, this)
 
     internal val firstVisiblePage: Int get() = scrollPosition.firstVisiblePage
@@ -227,7 +229,7 @@
      * Keeps the scrolling direction during the previous calculation in order to be able to
      * detect the scrolling direction change.
      */
-    private var wasScrollingForward = false
+    private var wasPrefetchingForward = false
 
     /** Backing state for PagerLayoutInfo */
     private var pagerLayoutInfoState = mutableStateOf<PagerLayoutInfo>(EmptyLayoutInfo)
@@ -328,7 +330,11 @@
         } else if (snapRemainingScrollOffset == 0.0f) {
             // act on scroll only
             if (abs(currentPageOffsetFraction) >= abs(positionThresholdFraction)) {
-                currentPage + currentPageOffsetFraction.sign.toInt()
+                if (isScrollingForward) {
+                    firstVisiblePage + 1
+                } else {
+                    firstVisiblePage
+                }
             } else {
                 currentPage
             }
@@ -531,6 +537,9 @@
     internal fun applyMeasureResult(result: PagerMeasureResult) {
         scrollPosition.updateFromMeasureResult(result)
         scrollToBeConsumed -= result.consumedScroll
+        if (result.consumedScroll != 0.0f) {
+            isScrollingForward = result.consumedScroll < 0
+        }
         pagerLayoutInfoState.value = result
         canScrollForward = result.canScrollForward
         canScrollBackward = (result.firstVisiblePage?.index ?: 0) != 0 ||
@@ -603,8 +612,8 @@
         }
         val info = layoutInfo
         if (info.visiblePagesInfo.isNotEmpty()) {
-            val scrollingForward = delta < 0
-            val indexToPrefetch = if (scrollingForward) {
+            val isPrefetchingForward = delta < 0
+            val indexToPrefetch = if (isPrefetchingForward) {
                 info.visiblePagesInfo.last().index + info.beyondBoundsPageCount + PagesToPrefetch
             } else {
                 info.visiblePagesInfo.first().index - info.beyondBoundsPageCount - PagesToPrefetch
@@ -612,14 +621,14 @@
             if (indexToPrefetch != this.indexToPrefetch &&
                 indexToPrefetch in 0 until pageCount
             ) {
-                if (wasScrollingForward != scrollingForward) {
+                if (wasPrefetchingForward != isPrefetchingForward) {
                     // the scrolling direction has been changed which means the last prefetched
                     // is not going to be reached anytime soon so it is safer to dispose it.
                     // if this item is already visible it is safe to call the method anyway
                     // as it will be no-op
                     currentPrefetchHandle?.cancel()
                 }
-                this.wasScrollingForward = scrollingForward
+                this.wasPrefetchingForward = isPrefetchingForward
                 this.indexToPrefetch = indexToPrefetch
                 currentPrefetchHandle = prefetchState.schedulePrefetch(
                     indexToPrefetch, premeasureConstraints
@@ -630,7 +639,7 @@
 
     private fun cancelPrefetchIfVisibleItemsChanged(info: PagerLayoutInfo) {
         if (indexToPrefetch != -1 && info.visiblePagesInfo.isNotEmpty()) {
-            val expectedPrefetchIndex = if (wasScrollingForward) {
+            val expectedPrefetchIndex = if (wasPrefetchingForward) {
                 info.visiblePagesInfo.last().index + info.beyondBoundsPageCount + PagesToPrefetch
             } else {
                 info.visiblePagesInfo.first().index - info.beyondBoundsPageCount - PagesToPrefetch
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/GapBuffer.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/GapBuffer.kt
index 64d4653..87fe591 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/GapBuffer.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/GapBuffer.kt
@@ -196,7 +196,6 @@
  * is requested, this class flush the buffer and create new String, then start new gap buffer.
  *
  * @param text The initial text
- * @suppress
  */
 internal class PartialGapBuffer(text: CharSequence) {
     internal companion object {
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt
index b4bbc9c..c579b53 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/BottomSheetScaffold.kt
@@ -241,8 +241,6 @@
             "the BottomSheetScaffold composable?"
     }
 
-    internal val lastVelocity: Float get() = anchoredDraggableState.lastVelocity
-
     companion object {
 
         /**
@@ -611,7 +609,6 @@
         val sheetPlaceables = subcompose(BottomSheetScaffoldLayoutSlot.Sheet) {
             bottomSheet(layoutHeight)
         }.map { it.measure(looseConstraints) }
-        val sheetOffsetY = sheetOffset().roundToInt()
 
         val topBarPlaceables = topBar?.let {
             subcompose(BottomSheetScaffoldLayoutSlot.TopBar, topBar)
@@ -629,26 +626,32 @@
         }
         val fabWidth = fabPlaceable?.fastMaxBy { it.width }?.width ?: 0
         val fabHeight = fabPlaceable?.fastMaxBy { it.height }?.height ?: 0
-        val fabOffsetX = when (floatingActionButtonPosition) {
-            FabPosition.Start -> FabSpacing.roundToPx()
-            FabPosition.Center -> (layoutWidth - fabWidth) / 2
-            else -> layoutWidth - fabWidth - FabSpacing.roundToPx()
-        }
-        // In case sheet peek height < (FAB height / 2), give the FAB some minimum space
-        val fabOffsetY = if (sheetPeekHeight.toPx() < fabHeight / 2) {
-            sheetOffsetY - fabHeight - FabSpacing.roundToPx()
-        } else sheetOffsetY - (fabHeight / 2)
 
         val snackbarPlaceables = subcompose(BottomSheetScaffoldLayoutSlot.Snackbar, snackbarHost)
             .map { it.measure(looseConstraints) }
         val snackbarWidth = snackbarPlaceables.fastMaxBy { it.width }?.width ?: 0
         val snackbarHeight = snackbarPlaceables.fastMaxBy { it.height }?.height ?: 0
-        val snackbarOffsetX = (layoutWidth - snackbarWidth) / 2
-        val snackbarOffsetY = when (sheetState.currentValue) {
-            Collapsed -> fabOffsetY - snackbarHeight
-            Expanded -> layoutHeight - snackbarHeight
-        }
+
         layout(layoutWidth, layoutHeight) {
+            val sheetOffsetY = sheetOffset().roundToInt()
+
+            val fabOffsetX = when (floatingActionButtonPosition) {
+                FabPosition.Start -> FabSpacing.roundToPx()
+                FabPosition.Center -> (layoutWidth - fabWidth) / 2
+                else -> layoutWidth - fabWidth - FabSpacing.roundToPx()
+            }
+
+            // In case sheet peek height < (FAB height / 2), give the FAB some minimum space
+            val fabOffsetY = if (sheetPeekHeight.toPx() < fabHeight / 2) {
+                sheetOffsetY - fabHeight - FabSpacing.roundToPx()
+            } else sheetOffsetY - (fabHeight / 2)
+
+            val snackbarOffsetX = (layoutWidth - snackbarWidth) / 2
+            val snackbarOffsetY = when (sheetState.currentValue) {
+                Collapsed -> fabOffsetY - snackbarHeight
+                Expanded -> layoutHeight - snackbarHeight
+            }
+
             // Placement order is important for elevation
             bodyPlaceables.fastForEach { it.placeRelative(0, topBarHeight) }
             topBarPlaceables?.fastForEach { it.placeRelative(0, 0) }
diff --git a/compose/material3/material3-lint/src/main/java/androidx/compose/material3/lint/MaterialImportDetector.kt b/compose/material3/material3-lint/src/main/java/androidx/compose/material3/lint/MaterialImportDetector.kt
index 33c73a5..b7ee362 100644
--- a/compose/material3/material3-lint/src/main/java/androidx/compose/material3/lint/MaterialImportDetector.kt
+++ b/compose/material3/material3-lint/src/main/java/androidx/compose/material3/lint/MaterialImportDetector.kt
@@ -53,6 +53,7 @@
             ) {
                 // Ignore explicitly allowed imports
                 if (AllowlistedSubpackages.any { importString.contains(it) }) return
+                if (AllowlistedImports.any { importString == it }) return
 
                 context.report(
                     UsingMaterialAndMaterial3Libraries,
@@ -94,3 +95,8 @@
     // ignore
     "$MaterialPackage.pullrefresh"
 )
+
+// TODO: b/261760718 - remove this when pullrefresh is added to m3
+private val AllowlistedImports = listOf(
+    "$MaterialPackage.ExperimentalMaterialApi"
+)
diff --git a/compose/material3/material3-lint/src/test/java/androidx/compose/material3/lint/MaterialImportDetectorTest.kt b/compose/material3/material3-lint/src/test/java/androidx/compose/material3/lint/MaterialImportDetectorTest.kt
index 065d628..5bdd89c 100644
--- a/compose/material3/material3-lint/src/test/java/androidx/compose/material3/lint/MaterialImportDetectorTest.kt
+++ b/compose/material3/material3-lint/src/test/java/androidx/compose/material3/lint/MaterialImportDetectorTest.kt
@@ -65,6 +65,43 @@
         """
     )
 
+    private val ExperimentalMaterialApiStub = bytecodeStub(
+        filename = "ExperimentalMaterialApi.kt",
+        filepath = "androidx/compose/material",
+        checksum = 0x6caaf88f,
+        """
+            package androidx.compose.material
+
+            @RequiresOptIn(
+                "This material API is experimental and is likely to change or to be removed in" +
+                    " the future."
+            )
+            @Retention(AnnotationRetention.BINARY)
+            annotation class ExperimentalMaterialApi
+        """,
+"""
+        META-INF/main.kotlin_module:
+        H4sIAAAAAAAA/2NgYGBmYGBgBGIOBijgUuWSTMxLKcrPTKnQS87PLcgvTtXL
+        TSxJLcpMzBHicCotKcnP8y7hMuNSxalMr6A0J6coNa0otThDiDcAyAmCcID6
+        dLgUcOsryiwoyEkV4ggC00DValxSOFUbI7mGl4s5LT9fiC0ktbjEu0SJQYsB
+        ANpB3LXcAAAA
+        """,
+        """
+        androidx/compose/material/ExperimentalMaterialApi.class:
+        H4sIAAAAAAAA/5VSwW4TMRB93pAmpEDTAiVpKDUcyq3bFm6ctgjQSimtEoRU
+        5eQkQ+Nmd52uvVF6y41/4oAijnwUYlY0JBJFiMv4zbxnzxvb3398+QrgJZ4J
+        HKiknxrdn/g9E4+MJT9WjlKtIv/NZMQgpsSp6Pi6GIx0CUKgeqHGyo9Ucu6f
+        dC+o50ooCOwsqipJjFNOm8QPfsMSigKbzaFxkU78Fl1mOiV7MnJh8kqgFJO1
+        6pwEzj4MtJVzIzI4DSXntORHsu28FukhRVfSGdkbcFuSJs2TLsmUYjMmFiXS
+        DUh+ylyW0p7A9rz9ksMWOT6VEbsojlWUsYfnN+gWkyzvWDkK3wetMwHZvHH+
+        Ze3uPySnJtK9q9zG62bQbgusz20ck1N95RRzXjwu8PuJPJTzAAEx5PpE59k+
+        o/6BQH02LVe8mlfxqo3yt89ebTY99PbF0WyaCw4FXjT/+/G5Ozfb+gu7N3QC
+        lbbJ0h691RHfYr2V8VwxfdRWdyNaXKAVaFxzYTL+g91li7jFrVby8VDADkcP
+        TyB5fcd5hblVwh3cxb1fcA1VrKOIjQ4KIe6HeBDiITYZ4lGIGuodCIstNDrw
+        LB5bbOMpH7bKu/lLo2xx+yc4GLrsGQMAAA==
+        """
+    )
+
     private val Material3ButtonStub = bytecodeStub(
         filename = "Button.kt",
         filepath = "androidx/compose/material3",
@@ -187,6 +224,7 @@
                 package foo
 
                 import androidx.compose.material.Button
+                import androidx.compose.material.ExperimentalMaterialApi
                 import androidx.compose.material3.Button
                 import androidx.compose.material.ripple.rememberRipple
                 import androidx.compose.material.icons.Icons
@@ -196,6 +234,7 @@
             """
             ),
             MaterialButtonStub,
+            ExperimentalMaterialApiStub,
             Material3ButtonStub,
             RippleStub,
             IconsStub,
@@ -229,6 +268,7 @@
             """
             ),
             MaterialButtonStub,
+            ExperimentalMaterialApiStub,
             Material3ButtonStub,
             RippleStub,
             IconsStub,
diff --git a/compose/runtime/runtime/lint-baseline.xml b/compose/runtime/runtime/lint-baseline.xml
index 60f721c..9776ca0 100644
--- a/compose/runtime/runtime/lint-baseline.xml
+++ b/compose/runtime/runtime/lint-baseline.xml
@@ -1,5 +1,41 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-beta05" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta05)" variant="all" version="8.1.0-beta05">
+<issues format="6" by="lint 8.1.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0)" variant="all" version="8.1.0">
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="fun simulateHotReload(context: Any) = HotReloader.simulateHotReload(context)"
+        errorLine2="    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/runtime/Composition.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="fun invalidateGroupsWithKey(key: Int) = HotReloader.invalidateGroupsWithKey(key)"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/runtime/Composition.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="fun currentCompositionErrors(): List&lt;Pair&lt;Exception, Boolean>> ="
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/runtime/Composition.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="fun clearCompositionErrors() = HotReloader.clearErrors()"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/runtime/Composition.kt"/>
+    </issue>
 
     <issue
         id="ExperimentalPropertyAnnotation"
diff --git a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/DialogTest.kt b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/DialogTest.kt
index 07d9416..ac3bfe0 100644
--- a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/DialogTest.kt
+++ b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/DialogTest.kt
@@ -16,41 +16,67 @@
 
 package androidx.compose.ui.inspection
 
+import android.view.inspector.WindowInspector
 import androidx.compose.ui.inspection.inspector.InspectorNode
 import androidx.compose.ui.inspection.inspector.MutableInspectorNode
-import androidx.compose.ui.inspection.rules.ComposeInspectionRule
+import androidx.compose.ui.inspection.rules.JvmtiRule
 import androidx.compose.ui.inspection.rules.sendCommand
 import androidx.compose.ui.inspection.testdata.DialogTestActivity
 import androidx.compose.ui.inspection.util.GetComposablesCommand
+import androidx.compose.ui.inspection.util.GetUpdateSettingsCommand
 import androidx.compose.ui.inspection.util.toMap
+import androidx.compose.ui.test.junit4.createAndroidComposeRule
 import androidx.compose.ui.unit.IntRect
+import androidx.inspection.testing.InspectorTester
 import androidx.test.filters.LargeTest
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.runBlocking
 import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.ComposableNode
 import layoutinspector.compose.inspection.LayoutInspectorComposeProtocol.GetComposablesResponse
-import org.junit.Ignore
+import org.junit.After
+import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
+import org.junit.rules.RuleChain
 
 @LargeTest
 class DialogTest {
-    @get:Rule
-    val rule = ComposeInspectionRule(DialogTestActivity::class)
+    private val rule = createAndroidComposeRule<DialogTestActivity>()
 
-    @Ignore // b/273151077
+    @get:Rule
+    val chain = RuleChain.outerRule(JvmtiRule()).around(rule)!!
+
+    private lateinit var inspectorTester: InspectorTester
+
+    @Before
+    fun before() {
+        runBlocking {
+            inspectorTester = InspectorTester(inspectorId = "layoutinspector.compose.inspection")
+        }
+    }
+
+    @After
+    fun after() {
+        inspectorTester.dispose()
+    }
+
     @Test
     fun dialogLocation(): Unit = runBlocking {
-        assertThat(rule.roots).hasSize(2)
-        val appViewId = rule.roots.first().uniqueDrawingId
-        val dialogViewId = rule.roots.last().uniqueDrawingId
-        val app = rule.inspectorTester.sendCommand(GetComposablesCommand(appViewId))
+        inspectorTester.sendCommand(
+            GetUpdateSettingsCommand()
+        ).updateSettingsResponse
+
+        val roots = WindowInspector.getGlobalWindowViews()
+        assertThat(roots).hasSize(2)
+        val appViewId = roots.first().uniqueDrawingId
+        val dialogViewId = roots.last().uniqueDrawingId
+        val app = inspectorTester.sendCommand(GetComposablesCommand(appViewId))
             .getComposablesResponse
-        val dialog = rule.inspectorTester.sendCommand(GetComposablesCommand(dialogViewId))
+        val dialog = inspectorTester.sendCommand(GetComposablesCommand(dialogViewId))
             .getComposablesResponse
         val appRoots = app.roots()
         val dialogRoots = dialog.roots()
-        val dialogViewRoot = rule.roots.last()
+        val dialogViewRoot = roots.last()
         assertThat(appRoots).hasSize(1)
         assertThat(dialogRoots).hasSize(1)
         assertThat(appRoots.single().name).isEqualTo("Column")
diff --git a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/PreviewActivityTest.kt b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/PreviewActivityTest.kt
index 748707e..0d53bfd 100644
--- a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/PreviewActivityTest.kt
+++ b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/PreviewActivityTest.kt
@@ -24,15 +24,18 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.inspection.framework.ancestors
 import androidx.compose.ui.inspection.inspector.RESERVED_FOR_GENERATED_IDS
-import androidx.compose.ui.inspection.rules.DebugViewAttributeRule
+import androidx.compose.ui.inspection.rules.JvmtiRule
 import androidx.compose.ui.inspection.rules.sendCommand
 import androidx.compose.ui.inspection.util.GetComposablesCommand
+import androidx.compose.ui.inspection.util.GetUpdateSettingsCommand
 import androidx.compose.ui.inspection.util.toMap
 import androidx.compose.ui.tooling.PreviewActivity
 import androidx.inspection.testing.InspectorTester
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.runBlocking
+import org.junit.After
 import org.junit.Before
+import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.rules.RuleChain
@@ -51,26 +54,38 @@
     private val activityTestRule = androidx.test.rule.ActivityTestRule(PreviewActivity::class.java)
 
     @get:Rule
-    val chain = RuleChain.outerRule(DebugViewAttributeRule()).around(activityTestRule)!!
+    val chain = RuleChain.outerRule(activityTestRule).around(JvmtiRule())!!
 
-    private lateinit var intent: Intent
+    private lateinit var inspectorTester: InspectorTester
 
     @Before
     fun setup() {
-        intent = Intent(activityTestRule.activity, PreviewActivity::class.java)
-    }
-
-    @Test
-    fun testPreviewTopComposableHasAnAchor(): Unit = runBlocking() {
+        val intent = Intent(activityTestRule.activity, PreviewActivity::class.java)
         intent.putExtra(
             "composable",
             "androidx.compose.ui.inspection.PreviewActivityTestKt.MainBlock"
         )
         activityTestRule.launchActivity(intent)
+        runBlocking {
+            inspectorTester = InspectorTester(inspectorId = "layoutinspector.compose.inspection")
+        }
+    }
+
+    @After
+    fun after() {
+        inspectorTester.dispose()
+    }
+
+    @Ignore("b/295186037")
+    @Test
+    fun testPreviewTopComposableHasAnAchor(): Unit = runBlocking() {
+        inspectorTester.sendCommand(
+            GetUpdateSettingsCommand()
+        ).updateSettingsResponse
+
         val mainContent: View =
             activityTestRule.activity.findViewById<ViewGroup>(android.R.id.content)
         val root = mainContent.ancestors().lastOrNull()
-        val inspectorTester = InspectorTester("layoutinspector.compose.inspection")
         val rootId = root!!.uniqueDrawingId
         val composables = inspectorTester.sendCommand(
             GetComposablesCommand(rootId, skipSystemComposables = false)
@@ -82,10 +97,6 @@
         assertThat(strings[node.name]).isEqualTo("MainBlock")
         assertThat(node.id).isLessThan(RESERVED_FOR_GENERATED_IDS)
     }
-
-    private fun View.isAndroidComposeView(): Boolean {
-        return javaClass.canonicalName == "androidx.compose.ui.platform.AndroidComposeView"
-    }
 }
 
 @Suppress("unused")
diff --git a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/RecompositionTest.kt b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/RecompositionTest.kt
index 8c38ba9..b9d0d03 100644
--- a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/RecompositionTest.kt
+++ b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/RecompositionTest.kt
@@ -17,7 +17,6 @@
 package androidx.compose.ui.inspection
 
 import android.view.inspector.WindowInspector
-import androidx.compose.ui.inspection.rules.DebugViewAttributeRule
 import androidx.compose.ui.inspection.rules.JvmtiRule
 import androidx.compose.ui.inspection.rules.sendCommand
 import androidx.compose.ui.inspection.testdata.RecompositionTestActivity
@@ -48,13 +47,12 @@
     private val rule = createAndroidComposeRule<RecompositionTestActivity>()
 
     @get:Rule
-    val chain = RuleChain.outerRule(JvmtiRule()).around(DebugViewAttributeRule()).around(rule)!!
+    val chain = RuleChain.outerRule(JvmtiRule()).around(rule)!!
 
     private lateinit var inspectorTester: InspectorTester
 
     @Before
     fun before() {
-        JvmtiRule.ensureInitialised()
         runBlocking {
             inspectorTester = InspectorTester(inspectorId = "layoutinspector.compose.inspection")
         }
@@ -87,6 +85,10 @@
             GetAllParametersCommand(rootId, skipSystemComposables = false)
         ).getAllParametersResponse
 
+        if (composables.rootsList.single().nodesList.isEmpty()) {
+            error("No nodes returned. Check that the compose inspector was successfully enabled.")
+        }
+
         // Buttons have double recompose counts, as they are
         // recomposed on the down event for the press indication
         var nodes = Nodes(composables, parameters)
diff --git a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/inspector/LayoutInspectorTreeTest.kt b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/inspector/LayoutInspectorTreeTest.kt
index dcccbb0..635450c 100644
--- a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/inspector/LayoutInspectorTreeTest.kt
+++ b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/inspector/LayoutInspectorTreeTest.kt
@@ -1272,8 +1272,6 @@
  *
  * @param compositionDataRecord [CompositionDataRecord] to record the SlotTable used in the
  * composition of [content]
- *
- * @suppress
  */
 @Composable
 @OptIn(InternalComposeApi::class)
diff --git a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/rules/DebugViewAttributeRule.kt b/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/rules/DebugViewAttributeRule.kt
deleted file mode 100644
index 25eff04..0000000
--- a/compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/rules/DebugViewAttributeRule.kt
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.ui.inspection.rules
-
-import android.provider.Settings
-import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
-import org.junit.Assume.assumeTrue
-import org.junit.rules.ExternalResource
-
-private const val TEST_PACKAGE = "androidx.compose.ui.inspection.test"
-private const val SETTINGS_TIMEOUT = 5000 // 5 seconds
-private const val DEBUG_VIEW_ATTRIBUTES = "debug_view_attributes_application_package"
-
-class DebugViewAttributeRule : ExternalResource() {
-
-    override fun before() {
-        getInstrumentation().uiAutomation.executeShellCommand(
-            "settings put global $DEBUG_VIEW_ATTRIBUTES $TEST_PACKAGE"
-        )
-        assumeDebugViewAttributes(TEST_PACKAGE)
-    }
-
-    override fun after() {
-        getInstrumentation().uiAutomation.executeShellCommand(
-            "settings delete global $DEBUG_VIEW_ATTRIBUTES"
-        )
-        assumeDebugViewAttributes(null)
-    }
-
-    private fun assumeDebugViewAttributes(expected: String?) {
-        val timeout = SETTINGS_TIMEOUT / 1000F
-        val contentResolver = getInstrumentation().targetContext.contentResolver
-        assumeTrue(
-            "Assumed $DEBUG_VIEW_ATTRIBUTES would be $expected within $timeout seconds",
-            busyWait {
-                Settings.Global.getString(contentResolver, DEBUG_VIEW_ATTRIBUTES) == expected
-            }
-        )
-    }
-
-    private fun busyWait(predicate: () -> Boolean): Boolean {
-        val deadline = System.currentTimeMillis() + SETTINGS_TIMEOUT
-
-        do {
-            if (predicate()) {
-                return true
-            }
-            Thread.sleep(50)
-        } while (System.currentTimeMillis() < deadline)
-
-        return false
-    }
-}
diff --git a/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/ComposeLayoutInspector.kt b/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/ComposeLayoutInspector.kt
index 6388008..5dd79bc 100644
--- a/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/ComposeLayoutInspector.kt
+++ b/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/ComposeLayoutInspector.kt
@@ -16,12 +16,17 @@
 
 package androidx.compose.ui.inspection
 
+import android.util.Log
 import android.view.View
 import android.view.inspector.WindowInspector
 import androidx.compose.ui.inspection.compose.AndroidComposeViewWrapper
 import androidx.compose.ui.inspection.compose.convertToParameterGroup
 import androidx.compose.ui.inspection.compose.flatten
+import androidx.compose.ui.inspection.framework.addSlotTable
 import androidx.compose.ui.inspection.framework.flatten
+import androidx.compose.ui.inspection.framework.hasSlotTable
+import androidx.compose.ui.inspection.framework.isAndroidComposeView
+import androidx.compose.ui.inspection.framework.signature
 import androidx.compose.ui.inspection.inspector.InspectorNode
 import androidx.compose.ui.inspection.inspector.LayoutInspectorTree
 import androidx.compose.ui.inspection.inspector.NodeParameterReference
@@ -31,7 +36,9 @@
 import androidx.compose.ui.inspection.proto.toComposableRoot
 import androidx.compose.ui.inspection.util.NO_ANCHOR_ID
 import androidx.compose.ui.inspection.util.ThreadUtils
+import androidx.compose.ui.platform.isDebugInspectorInfoEnabled
 import androidx.compose.ui.unit.IntOffset
+import androidx.inspection.ArtTooling
 import androidx.inspection.Connection
 import androidx.inspection.Inspector
 import androidx.inspection.InspectorEnvironment
@@ -55,6 +62,7 @@
 private const val LAYOUT_INSPECTION_ID = "layoutinspector.compose.inspection"
 private const val MAX_RECURSIONS = 2
 private const val MAX_ITERABLE_SIZE = 5
+private const val TAG = "ComposeLayoutInspector"
 
 // created by java.util.ServiceLoader
 class ComposeLayoutInspectorFactory :
@@ -115,6 +123,10 @@
             return _cachedNodes
         }
 
+    init {
+        enableInspection(environment.artTooling())
+    }
+
     override fun onReceiveCommand(data: ByteArray, callback: CommandCallback) {
         val command = try {
             Command.parseFrom(data)
@@ -417,6 +429,82 @@
         }
         return wrappers
     }
+
+    /**
+     * Enable inspection in this app.
+     */
+    @Suppress("BanUncheckedReflection")
+    private fun enableInspection(artTooling: ArtTooling) {
+        // Enable debug inspector information.
+        enableDebugInspectorInfo()
+
+        // Install a hook that will add a slot table to any AndroidComposeViews added later.
+        // This is needed to get composables from dialogs etc.
+        val wrapper = Class.forName("androidx.compose.ui.platform.WrappedComposition")
+        val method = wrapper.declaredMethods.firstOrNull { it.name == "setContent" } ?: return
+        val field = wrapper.getDeclaredMethod("getOwner")
+        val signature = method.signature
+        artTooling.registerEntryHook(wrapper, signature) { wr, _ ->
+            val owner = field(wr) as? View
+            owner?.addSlotTable()
+        }
+
+        // Add slot tables to all already existing AndroidComposeViews:
+        addSlotTableToComposeViews()
+    }
+
+    /**
+     * Add a slot table to all AndroidComposeViews that doesn't already have one.
+     */
+    private fun addSlotTableToComposeViews() = ThreadUtils.runOnMainThread {
+        val roots = WindowInspector.getGlobalWindowViews()
+        val composeViews = roots.flatMap { it.flatten() }.filter { it.isAndroidComposeView() }
+
+        if (composeViews.any { !it.hasSlotTable }) {
+            val slotTablesAdded = composeViews.sumOf { it.addSlotTable() }
+            if (slotTablesAdded > 0) {
+                // The slot tables added to existing views will be empty until the composables
+                // are reloaded. Do that now:
+                hotReload()
+            }
+        }
+    }.get()
+
+    /**
+     * Perform a hot reload after adding SlotTable storage.
+     *
+     * This will populate the slot tables that were just added.
+     */
+    @Suppress("BanUncheckedReflection")
+    private fun hotReload() {
+        val hotReload = Class.forName("androidx.compose.runtime.HotReloader")
+        val companion = hotReload.getField("Companion").get(null)
+        val save = companion.javaClass.getDeclaredMethod("saveStateAndDispose", Any::class.java)
+        val load = companion.javaClass.getDeclaredMethod("loadStateAndCompose", Any::class.java)
+        save.isAccessible = true
+        load.isAccessible = true
+        // Add a context parameter even though it is not currently used.
+        // (It was required in earlier versions of the Compose runtime.)
+        val context = Class.forName("android.app.ActivityThread")
+            .getDeclaredMethod("currentApplication").apply { isAccessible = true }.invoke(null)
+        val state = save(companion, context)
+        load(companion, state)
+    }
+
+    private fun enableDebugInspectorInfo() {
+        // Set isDebugInspectorInfoEnabled to true via reflection such that R8 cannot see the
+        // assignment. This allows the InspectorInfo lambdas to be stripped from release builds.
+        if (!isDebugInspectorInfoEnabled) {
+            try {
+                val packageClass = Class.forName("androidx.compose.ui.platform.InspectableValueKt")
+                val field = packageClass.getDeclaredField("isDebugInspectorInfoEnabled")
+                field.isAccessible = true
+                field.setBoolean(null, true)
+            } catch (ex: Exception) {
+                Log.w(TAG, "Could not access isDebugInspectorInfoEnabled.", ex)
+            }
+        }
+    }
 }
 
 private fun Inspector.CommandCallback.reply(initResponse: Response.Builder.() -> Unit) {
diff --git a/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/compose/AndroidComposeViewWrapper.kt b/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/compose/AndroidComposeViewWrapper.kt
index cd729bb..4f65cc5 100644
--- a/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/compose/AndroidComposeViewWrapper.kt
+++ b/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/compose/AndroidComposeViewWrapper.kt
@@ -22,23 +22,13 @@
 import androidx.compose.ui.R
 import androidx.compose.ui.inspection.framework.ancestors
 import androidx.compose.ui.inspection.framework.getChildren
+import androidx.compose.ui.inspection.framework.isAndroidComposeView
 import androidx.compose.ui.inspection.framework.isRoot
 import androidx.compose.ui.inspection.inspector.InspectorNode
 import androidx.compose.ui.inspection.inspector.LayoutInspectorTree
 import androidx.compose.ui.inspection.util.ThreadUtils
 
 /**
- * Returns true if this view represents a special type that bridges between the legacy UI
- * framework and Jetpack Compose.
- *
- * Note: AndroidComposeView lives in compose.ui but is internal, which is why we need to check
- * indirectly like this. TODO(b/177998085): Expose this class to our library.
- */
-private fun View.isAndroidComposeView(): Boolean {
-    return javaClass.canonicalName == "androidx.compose.ui.platform.AndroidComposeView"
-}
-
-/**
  * Returns true if the view is contained in a layout generated by the platform / system.
  *
  * <ul>
diff --git a/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/framework/JavaExtensions.kt b/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/framework/JavaExtensions.kt
new file mode 100644
index 0000000..0091ac6
--- /dev/null
+++ b/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/framework/JavaExtensions.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.ui.inspection.framework
+
+import java.lang.reflect.Method
+
+val Method.signature: String
+    get() {
+        val sb = StringBuilder()
+        sb.append(name).append('(')
+        parameterTypes.forEach {
+            sb.append(it.signature)
+        }
+        sb.append(')').append(returnType.signature)
+        return sb.toString()
+    }
+
+val <T> Class<T>.signature: String
+    get() {
+        if (isPrimitive) {
+            return when (this) {
+                java.lang.Boolean.TYPE -> "Z"
+                java.lang.Byte.TYPE -> "B"
+                Character.TYPE -> "C"
+                java.lang.Short.TYPE -> "S"
+                Integer.TYPE -> "I"
+                java.lang.Long.TYPE -> "J"
+                java.lang.Float.TYPE -> "F"
+                java.lang.Double.TYPE -> "D"
+                Void.TYPE -> "V"
+                else -> error("Unknown primitive type")
+            }
+        }
+        return "L${name.replace('.', '/')};"
+    }
diff --git a/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/framework/ViewExtensions.kt b/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/framework/ViewExtensions.kt
index da400e4..d9e481d 100644
--- a/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/framework/ViewExtensions.kt
+++ b/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/framework/ViewExtensions.kt
@@ -18,7 +18,11 @@
 
 import android.view.View
 import android.view.ViewGroup
+import androidx.compose.runtime.tooling.CompositionData
+import androidx.compose.ui.R
 import androidx.compose.ui.inspection.util.ThreadUtils
+import java.util.Collections
+import java.util.WeakHashMap
 
 fun ViewGroup.getChildren(): List<View> {
     ThreadUtils.assertOnMainThread()
@@ -46,3 +50,34 @@
         next
     }
 }
+
+/**
+ * Returns true if this view represents a special type that bridges between the legacy UI
+ * framework and Jetpack Compose.
+ *
+ * Note: AndroidComposeView lives in compose.ui but is internal, which is why we need to check
+ * indirectly like this. TODO(b/177998085): Expose this class to our library.
+ */
+fun View.isAndroidComposeView(): Boolean {
+    return javaClass.canonicalName == "androidx.compose.ui.platform.AndroidComposeView"
+}
+
+/**
+ * Return true if this view already has a slot table.
+ */
+val View.hasSlotTable: Boolean
+    get() = getTag(R.id.inspection_slot_table_set) is Set<*>
+
+/**
+ * Adds a slot table to this view. Return 1 if added, 0 if not.
+ */
+fun View.addSlotTable(): Int {
+    if (hasSlotTable) {
+        return 0
+    }
+    setTag(
+        R.id.inspection_slot_table_set,
+        Collections.newSetFromMap(WeakHashMap<CompositionData, Boolean>())
+    )
+    return 1
+}
diff --git a/compose/ui/ui-text/lint-baseline.xml b/compose/ui/ui-text/lint-baseline.xml
index 8eb1759..240a988 100644
--- a/compose/ui/ui-text/lint-baseline.xml
+++ b/compose/ui/ui-text/lint-baseline.xml
@@ -29,6 +29,222 @@
     </issue>
 
     <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal open class BaselineShiftSpan(val multiplier: Float) : MetricAffectingSpan() {"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/BaselineShiftSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="fun emptyCacheFontFamilyResolver(context: Context): FontFamily.Resolver {"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/text/font/FontFamilyResolver.android.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class FontFeatureSpan(val fontFeatureSettings: String) : MetricAffectingSpan() {"
+        errorLine2="               ~~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/FontFeatureSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class PartialGapBuffer(var text: String) {"
+        errorLine2="      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/ui/text/input/GapBuffer.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class IndentationFixSpan : LeadingMarginSpan {"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/IndentationFixSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal object LayoutCompat {"
+        errorLine2="                ~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal fun Layout.getLineForOffset(@IntRange(from = 0) offset: Int, upstream: Boolean): Int {"
+        errorLine2="                    ~~~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class LayoutHelper(val layout: Layout) {"
+        errorLine2="               ~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class LayoutIntrinsics("
+        errorLine2="               ~~~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/LayoutIntrinsics.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class LetterSpacingSpanEm(val letterSpacing: Float) : MetricAffectingSpan() {"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEm.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class LetterSpacingSpanPx(@Px val letterSpacing: Float) : MetricAffectingSpan() {"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPx.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class LineHeightSpan("
+        errorLine2="               ~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/LineHeightSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class LineHeightStyleSpan("
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/LineHeightStyleSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class PlaceholderSpan("
+        errorLine2="               ~~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/PlaceholderSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal data class Segment("
+        errorLine2="                    ~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal object SegmentBreaker {"
+        errorLine2="                ~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="enum class SegmentType {"
+        errorLine2="           ~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentType.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class ShadowSpan("
+        errorLine2="               ~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/ShadowSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal open class SkewXSpan(val skewX: Float) : MetricAffectingSpan() {"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/SkewXSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="object StaticLayoutFactory {"
+        errorLine2="       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class TextDecorationSpan("
+        errorLine2="               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/TextDecorationSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class TextLayout constructor("
+        errorLine2="               ~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class TypefaceSpan(val typeface: Typeface) : MetricAffectingSpan() {"
+        errorLine2="               ~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/TypefaceSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class WordBoundary("
+        errorLine2="               ~~~~~~~~~~~~">
+        <location
+            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/selection/WordBoundary.kt"/>
+    </issue>
+
+    <issue
         id="ListIterator"
         message="Creating an unnecessary Iterator to iterate through a List"
         errorLine1="                        &quot;&apos;$key&apos; must be unique. Actual [ [${value.joinToString()}]&quot;"
diff --git a/compose/ui/ui-tooling-preview/lint-baseline.xml b/compose/ui/ui-tooling-preview/lint-baseline.xml
new file mode 100644
index 0000000..beb06e4
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/lint-baseline.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.1.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0)" variant="all" version="8.1.0">
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="annotation class Device"
+        errorLine2="                 ~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/preview/Device.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="annotation class Wallpaper"
+        errorLine2="                 ~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/preview/Wallpaper.kt"/>
+    </issue>
+
+</issues>
diff --git a/compose/ui/ui-tooling/lint-baseline.xml b/compose/ui/ui-tooling/lint-baseline.xml
index 4f98a68..0265d07 100644
--- a/compose/ui/ui-tooling/lint-baseline.xml
+++ b/compose/ui/ui-tooling/lint-baseline.xml
@@ -1,5 +1,50 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-beta05" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta05)" variant="all" version="8.1.0-beta05">
+<issues format="6" by="lint 8.1.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0)" variant="all" version="8.1.0">
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="data class ViewInfo("
+        errorLine2="           ~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class ComposeViewAdapter : FrameLayout {"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="    internal lateinit var clock: PreviewAnimationClock"
+        errorLine2="                          ~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="    fun hasAnimations() = hasAnimations"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class PreviewActivity : ComponentActivity() {"
+        errorLine2="      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/PreviewActivity.kt"/>
+    </issue>
 
     <issue
         id="BanThreadSleep"
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/Inspectable.kt b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/Inspectable.kt
index 9014cde..9f78e81 100644
--- a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/Inspectable.kt
+++ b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/Inspectable.kt
@@ -47,8 +47,6 @@
  *
  * @param compositionDataRecord [CompositionDataRecord] to record the SlotTable used in the
  * composition of [content]
- *
- * @suppress
  */
 @Composable
 internal fun Inspectable(
diff --git a/compose/ui/ui/lint-baseline.xml b/compose/ui/ui/lint-baseline.xml
index 24d2ebd..f5406d2 100644
--- a/compose/ui/ui/lint-baseline.xml
+++ b/compose/ui/ui/lint-baseline.xml
@@ -2,8 +2,8 @@
 <issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
-        id="BanHideAnnotation"
-        message="@hide is not allowed in Javadoc"
+        id="BanHideTag"
+        message="@hide is not allowed in documentation"
         errorLine1="    fun findViewByAccessibilityIdTraversal(accessibilityId: Int): View? {"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -11,6 +11,15 @@
     </issue>
 
     <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="    var showLayoutBounds: Boolean"
+        errorLine2="        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/commonMain/kotlin/androidx/compose/ui/node/Owner.kt"/>
+    </issue>
+
+    <issue
         id="BanThreadSleep"
         message="Uses Thread.sleep()"
         errorLine1="                Thread.sleep(sleepTime)"
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/autofill/FakeViewStructure.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/autofill/FakeViewStructure.kt
index c5b7241..8c5cb3a 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/autofill/FakeViewStructure.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/autofill/FakeViewStructure.kt
@@ -49,7 +49,6 @@
  * @param autofillHints The autofill hint. If this value not specified, we use heuristics to
  * determine what data to use while performing autofill.
  *
- * @suppress
  */
 @RequiresApi(Build.VERSION_CODES.O)
 internal data class FakeViewStructure(
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/node/ViewInterop.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/node/ViewInterop.android.kt
index bfeff03..14c132f 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/node/ViewInterop.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/node/ViewInterop.android.kt
@@ -22,9 +22,6 @@
 import androidx.compose.ui.util.fastFirstOrNull
 import androidx.compose.ui.util.fastForEach
 
-/**
- * @suppress
- */
 // TODO(b/150806128): We should decide if we want to make this public API or not. Right now it is needed
 //  for convenient LayoutParams usage in compose with views.
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -35,9 +32,6 @@
     fun didUpdate(view: View, parent: ViewGroup)
 }
 
-/**
- * @suppress
- */
 // TODO(b/150806128): We should decide if we want to make this public API or not. Right now it is needed
 //  for convenient LayoutParams usage in compose with views.
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/Wrapper.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/Wrapper.android.kt
index a9d8c5f..e7be751 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/Wrapper.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/Wrapper.android.kt
@@ -15,13 +15,9 @@
  */
 package androidx.compose.ui.platform
 
-import android.os.Build
-import android.util.Log
 import android.view.View
 import android.view.ViewGroup
-import androidx.annotation.DoNotInline
 import androidx.annotation.MainThread
-import androidx.annotation.RequiresApi
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Composition
 import androidx.compose.runtime.CompositionContext
@@ -39,10 +35,6 @@
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleEventObserver
 import androidx.lifecycle.LifecycleOwner
-import java.util.Collections
-import java.util.WeakHashMap
-
-private val TAG = "Wrapper"
 
 // TODO(chuckj): This is a temporary work-around until subframes exist so that
 // nextFrame() inside recompose() doesn't really start a new frame, but a new subframe
@@ -90,13 +82,6 @@
     parent: CompositionContext,
     content: @Composable () -> Unit
 ): Composition {
-    if (inspectionWanted(owner)) {
-        owner.setTag(
-            R.id.inspection_slot_table_set,
-            Collections.newSetFromMap(WeakHashMap<CompositionData, Boolean>())
-        )
-        enableDebugInspectorInfo()
-    }
     val original = Composition(UiApplier(owner.root), parent)
     val wrapped = owner.view.getTag(R.id.wrapped_composition_tag)
         as? WrappedComposition
@@ -107,21 +92,6 @@
     return wrapped
 }
 
-private fun enableDebugInspectorInfo() {
-    // Set isDebugInspectorInfoEnabled to true via reflection such that R8 cannot see the
-    // assignment. This allows the InspectorInfo lambdas to be stripped from release builds.
-    if (!isDebugInspectorInfoEnabled) {
-        try {
-            val packageClass = Class.forName("androidx.compose.ui.platform.InspectableValueKt")
-            val field = packageClass.getDeclaredField("isDebugInspectorInfoEnabled")
-            field.isAccessible = true
-            field.setBoolean(null, true)
-        } catch (ignored: Exception) {
-            Log.w(TAG, "Could not access isDebugInspectorInfoEnabled. Please set explicitly.")
-        }
-    }
-}
-
 private class WrappedComposition(
     val owner: AndroidComposeView,
     val original: Composition
@@ -195,30 +165,3 @@
     ViewGroup.LayoutParams.WRAP_CONTENT,
     ViewGroup.LayoutParams.WRAP_CONTENT
 )
-
-/**
- * Determines if inspection is wanted for the Layout Inspector.
- *
- * When DEBUG_VIEW_ATTRIBUTES an/or DEBUG_VIEW_ATTRIBUTES_APPLICATION_PACKAGE is turned on for the
- * current application the Layout Inspector is inspecting. An application cannot directly access
- * these global settings, nor is the static field: View.sDebugViewAttributes available.
- *
- *
- * Instead check if the attributeSourceResourceMap is not empty.
- */
-private fun inspectionWanted(owner: AndroidComposeView): Boolean =
-    Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&
-        WrapperVerificationHelperMethods.attributeSourceResourceMap(owner).isNotEmpty()
-
-/**
- * This class is here to ensure that the classes that use this API will get verified and can be
- * AOT compiled. It is expected that this class will soft-fail verification, but the classes
- * which use this method will pass.
- */
-@RequiresApi(Build.VERSION_CODES.Q)
-internal object WrapperVerificationHelperMethods {
-    @RequiresApi(Build.VERSION_CODES.Q)
-    @DoNotInline
-    fun attributeSourceResourceMap(view: View): Map<Int, Int> =
-        view.attributeSourceResourceMap
-}
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/CompositionLocals.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/CompositionLocals.kt
index ccf8840..704fe1a 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/CompositionLocals.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/CompositionLocals.kt
@@ -16,6 +16,7 @@
 
 package androidx.compose.ui.platform
 
+import androidx.annotation.RestrictTo
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocal
 import androidx.compose.runtime.CompositionLocalProvider
@@ -91,13 +92,12 @@
 
 /**
  * The CompositionLocal to provide platform font loading methods.
- *
- * @suppress
  */
 @Suppress("DEPRECATION")
 @Deprecated("LocalFontLoader is replaced with LocalFontFamilyResolver",
     replaceWith = ReplaceWith("LocalFontFamilyResolver")
 )
+@get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 val LocalFontLoader = staticCompositionLocalOf<Font.ResourceLoader> {
     noLocalProvidedFor("LocalFontLoader")
 }
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/window/Popup.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/window/Popup.kt
index e68401c..1cee60c 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/window/Popup.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/window/Popup.kt
@@ -22,8 +22,6 @@
 import androidx.compose.ui.unit.IntRect
 import androidx.compose.ui.unit.IntSize
 import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.height
-import androidx.compose.ui.unit.width
 
 /**
  * Calculates the position of a [Popup] on screen.
@@ -65,37 +63,26 @@
         popupContentSize: IntSize
     ): IntOffset {
         // TODO: Decide which is the best way to round to result without reimplementing Alignment.align
-        var popupPosition = IntOffset(0, 0)
 
-        // Get the aligned point inside the parent
-        val parentAlignmentPoint = alignment.align(
+        val anchorAlignmentPoint = alignment.align(
             IntSize.Zero,
-            IntSize(anchorBounds.width, anchorBounds.height),
+            anchorBounds.size,
             layoutDirection
         )
-        // Get the aligned point inside the child
-        val relativePopupPos = alignment.align(
+        // Note the negative sign. Popup alignment point contributes negative offset.
+        val popupAlignmentPoint = -alignment.align(
             IntSize.Zero,
-            IntSize(popupContentSize.width, popupContentSize.height),
+            popupContentSize,
             layoutDirection
         )
-
-        // Add the position of the parent
-        popupPosition += IntOffset(anchorBounds.left, anchorBounds.top)
-
-        // Add the distance between the parent's top left corner and the alignment point
-        popupPosition += parentAlignmentPoint
-
-        // Subtract the distance between the children's top left corner and the alignment point
-        popupPosition -= IntOffset(relativePopupPos.x, relativePopupPos.y)
-
-        // Add the user offset
-        val resolvedOffset = IntOffset(
+        val resolvedUserOffset = IntOffset(
             offset.x * (if (layoutDirection == LayoutDirection.Ltr) 1 else -1),
             offset.y
         )
-        popupPosition += resolvedOffset
 
-        return popupPosition
+        return anchorBounds.topLeft +
+            anchorAlignmentPoint +
+            popupAlignmentPoint +
+            resolvedUserOffset
     }
 }
diff --git a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/autofill/FakeViewStructure.kt b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/autofill/FakeViewStructure.kt
index 2d8163e..e240645 100644
--- a/compose/ui/ui/src/test/kotlin/androidx/compose/ui/autofill/FakeViewStructure.kt
+++ b/compose/ui/ui/src/test/kotlin/androidx/compose/ui/autofill/FakeViewStructure.kt
@@ -49,7 +49,6 @@
  * @param autofillHints The autofill hint. If this value not specified, we use heuristics to
  * determine what data to use while performing autofill.
  *
- * @suppress
  */
 @RequiresApi(Build.VERSION_CODES.O)
 internal data class FakeAndroidViewStructure(
diff --git a/core/core/src/androidTest/java/androidx/core/app/PersonTest.java b/core/core/src/androidTest/java/androidx/core/app/PersonTest.java
index 2f7a774..51e2765 100644
--- a/core/core/src/androidTest/java/androidx/core/app/PersonTest.java
+++ b/core/core/src/androidTest/java/androidx/core/app/PersonTest.java
@@ -16,11 +16,14 @@
 
 package androidx.core.app;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
 
 import android.graphics.Bitmap;
+import android.net.Uri;
 import android.os.Bundle;
 import android.os.PersistableBundle;
 
@@ -228,4 +231,72 @@
         Person person = new Person.Builder().setUri(TEST_URI).build();
         assertEquals(TEST_URI, person.resolveToLegacyUri());
     }
+
+    @Test
+    public void equalsAndHashCode_minimalPersons_areEqual() {
+        Person person1 = createMinimalPerson();
+        Person person2 = createMinimalPerson();
+
+        assertThat(person1.equals(person2)).isTrue();
+        assertThat(person1.hashCode()).isEqualTo(person2.hashCode());
+    }
+
+    @Test
+    public void equalsAndHashCode_differentName_areNotEqual() {
+        Person person1 = createMinimalPersonBuilder().setName("Person1").build();
+        Person person2 = createMinimalPersonBuilder().setName("Person2").build();
+
+        assertThat(person1.equals(person2)).isFalse();
+        assertThat(person1.hashCode()).isNotEqualTo(person2.hashCode());
+    }
+
+    @Test
+    public void equalsAndHashCode_differentKey_areNotEqual() {
+        Person person1 = createMinimalPersonBuilder().setKey("Person1").build();
+        Person person2 = createMinimalPersonBuilder().setKey("Person2").build();
+
+        assertThat(person1.equals(person2)).isFalse();
+        assertThat(person1.hashCode()).isNotEqualTo(person2.hashCode());
+    }
+
+    @Test
+    public void equalsAndHashCode_differentUri_areNotEqual() {
+        Uri uri1 =
+                Uri.parse("http://foo.com/test/sender/uri1");
+        Uri uri2 =
+                Uri.parse("http://foo.com/test/sender/uri2");
+        Person person1 = createMinimalPersonBuilder().setUri(
+                uri1.toString()).build();
+        Person person2 = createMinimalPersonBuilder().setName(
+                uri2.toString()).build();
+
+        assertThat(person1.equals(person2)).isFalse();
+        assertThat(person1.hashCode()).isNotEqualTo(person2.hashCode());
+    }
+
+    @Test
+    public void equalsAndHashCode_differentBot_areNotEqual() {
+        Person person1 = createMinimalPersonBuilder().setBot(true).build();
+        Person person2 = createMinimalPersonBuilder().setBot(false).build();
+
+        assertThat(person1.equals(person2)).isFalse();
+        assertThat(person1.hashCode()).isNotEqualTo(person2.hashCode());
+    }
+
+    @Test
+    public void equalsAndHashCode_differentImportant_areNotEqual() {
+        Person person1 = createMinimalPersonBuilder().setImportant(true).build();
+        Person person2 = createMinimalPersonBuilder().setImportant(false).build();
+
+        assertThat(person1.equals(person2)).isFalse();
+        assertThat(person1.hashCode()).isNotEqualTo(person2.hashCode());
+    }
+
+    private Person.Builder createMinimalPersonBuilder() {
+        return new Person.Builder();
+    }
+
+    private Person createMinimalPerson() {
+        return createMinimalPersonBuilder().build();
+    }
 }
diff --git a/core/core/src/main/java/androidx/core/app/Person.java b/core/core/src/main/java/androidx/core/app/Person.java
index 6fd9467..030001e 100644
--- a/core/core/src/main/java/androidx/core/app/Person.java
+++ b/core/core/src/main/java/androidx/core/app/Person.java
@@ -28,6 +28,8 @@
 import androidx.annotation.RestrictTo;
 import androidx.core.graphics.drawable.IconCompat;
 
+import java.util.Objects;
+
 /**
  * Provides an immutable reference to an entity that appears repeatedly on different surfaces of the
  * platform. For example, this could represent the sender of a message.
@@ -223,6 +225,49 @@
         return "";
     }
 
+    @Override
+    public boolean equals(@Nullable Object otherObject) {
+        if (otherObject == null) {
+            return false;
+        }
+
+        if (!(otherObject instanceof Person)) {
+            return false;
+        }
+
+        Person otherPerson = (Person) otherObject;
+
+        // If a unique ID was provided, use it
+        String key1 = getKey();
+        String key2 = otherPerson.getKey();
+        if (key1 != null || key2 != null) {
+            return Objects.equals(key1, key2);
+        }
+
+        // CharSequence doesn't have well-defined "equals" behavior -- convert to String instead
+        String name1 = Objects.toString(getName());
+        String name2 = Objects.toString(otherPerson.getName());
+
+        // Fallback: Compare field-by-field
+        return
+                Objects.equals(name1, name2)
+                        && Objects.equals(getUri(), otherPerson.getUri())
+                        && Objects.equals(isBot(), otherPerson.isBot())
+                        && Objects.equals(isImportant(), otherPerson.isImportant());
+    }
+
+    @Override
+    public int hashCode() {
+        // If a unique ID was provided, use it
+        String key = getKey();
+        if (key != null) {
+            return key.hashCode();
+        }
+
+        // Fallback: Use hash code for individual fields
+        return Objects.hash(getName(), getUri(), isBot(), isImportant());
+    }
+
     /** Builder for the immutable {@link Person} class. */
     public static class Builder {
         @Nullable CharSequence mName;
diff --git a/development/benchmarks-chrome-extension/README.md b/development/benchmarks-chrome-extension/README.md
index 49a48d1..a9e27b6 100644
--- a/development/benchmarks-chrome-extension/README.md
+++ b/development/benchmarks-chrome-extension/README.md
@@ -5,3 +5,7 @@
 <br/>
 
 ![Example](./docs/example.png)
+
+## Installation
+
+To install the extension, use [this](https://chrome.google.com/webstore/a/google.com/detail/androidx-benchmarks-exten/gmjlmhomfjcbnkmlpfgnbigliekmpiho) link.
diff --git a/development/build_log_simplifier/messages.ignore b/development/build_log_simplifier/messages.ignore
index 92eb11f..b5a9bc6 100644
--- a/development/build_log_simplifier/messages.ignore
+++ b/development/build_log_simplifier/messages.ignore
@@ -2,8 +2,6 @@
 # Comments and blank lines are ignored.
 # Before adding a suppression to this file, please attempt to suppress the output inside the generating tool instead.
 # Messages that only sometimes appear in stdout/stderr should be exempted in message-flakes.ignore, because this file (messages.ignore) may be automatically garbage collected whereas that one will not be.
-# > Task :icing:extractIncludeDebugAndroidTestProto
-proto file '[^ ]*' directly specified in configuration\. It's likely you specified files\('path/to/foo\.proto'\) or fileTree\('path/to/directory'\) in protobuf or compile configuration\. This makes you vulnerable to https://github\.com/google/protobuf\-gradle\-plugin/issues/[0-9][0-9]*\. Please use files\('path/to/directory'\) instead\.
 OUT_DIR=\$OUT_DIR
 DIST_DIR=\$DIST_DIR
 CHECKOUT=\$CHECKOUT
@@ -84,8 +82,6 @@
 A fine\-grained performance profile is available\: use the \-\-scan option\.
 # > Task :viewpager2:viewpager2:compileDebugAndroidTestKotlin
 w\: \$SUPPORT\/viewpager[0-9]+\/viewpager[0-9]+\/src\/androidTest\/java\/androidx\/viewpager[0-9]+\/widget\/HostFragmentBackStackTest\.kt\: \([0-9]+\, [0-9]+\)\: \'enableDebugLogging\(Boolean\)\: Unit\' is deprecated\. Deprecated in Java
-#> Task :docs-public:unzipJvmSources
-Encountered duplicate path "androidx/test/espresso/remote/.*.java" during copy operation configured with DuplicatesStrategy.WARN
 # > Task :docs-public:dackkaDocs
 ERROR: An attempt to write .*
 WARNING: no common sourceSet for androidx\.compose\..*, falling back to \.single\(\) when resolving @sample androidx\.compose\..*
@@ -247,6 +243,8 @@
 WARNING: do not use 'an' before the exception type in an @throws statement\. This is against jdoc spec, will be an error in the next version of dackka, and your exception is not being linked and looks bad\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[DocumentationLink\(dri=kotlin/IllegalArgumentException///PointingToDeclaration/, children=\[Text\(body=IllegalArgumentException, children=\[\], params=\{\}\)\], params=\{href=\[IllegalArgumentException\]\}\), Text\(body= if address is invalid\., children=\[\], params=\{\}\)\], params=\{\}\)\], params=\{\}, name=MARKDOWN_FILE\), name=an, exceptionAddress=null\)\.
 WARNING: link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un\-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params=\{\}\)\], params=\{\}\)\], params=\{\}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\)\.`
 WARNING: link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un\-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I/O issues\., children=\[\], params=\{\}\)\], params=\{\}\)\], params=\{\}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\)\.`
+WARNING: link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un\-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\. Deleting by invalid identifiers such as a non\-existing identifier or deleting the same record multiple times will result in IPC failure\., children=\[\], params=\{\}\)\], params=\{\}\)\], params=\{\}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\)\.`
+WARNING: link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un\-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\. Update with invalid identifiers will result in IPC failure\., children=\[\], params=\{\}\)\], params=\{\}\)\], params=\{\}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\)\.`
 WARNING: link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un\-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=when an exception is encountered when writing data to disk, children=\[\], params=\{\}\)\], params=\{\}\)\], params=\{\}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\)\.`
 WARNING: link to @throws type ComposeTimeoutException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un\-documented override function, but the exception class is not in scope in the inheriting class\? The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=If the condition is not satisfied after , children=\[\], params=\{\}\), DocumentationLink\(dri=androidx\.compose\.ui\.test\.junit[0-9]+/AndroidComposeTestRule/waitUntil/\#kotlin\.Long\#kotlin\.Function[0-9]+\[kotlin\.Boolean\]/PointingToCallableParameters\([0-9]+\)/, children=\[Text\(body=timeoutMillis, children=\[\], params=\{\}\)\], params=\{href=\[timeoutMillis\]\}\), Text\(body=\., children=\[\], params=\{\}\)\], params=\{\}\)\], params=\{\}, name=MARKDOWN_FILE\), name=ComposeTimeoutException, exceptionAddress=null\)\.`
 WARN: Missing @param tag for parameter `text` of function androidx\.compose\.ui\.text//AnnotatedString/\#kotlin\.String\#androidx\.compose\.ui\.text\.SpanStyle\#androidx\.compose\.ui\.text\.ParagraphStyle\?/PointingToDeclaration/
@@ -1010,309 +1008,6 @@
 w: file://\$SUPPORT/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/TextFieldVisualTransformationMagnifierTest\.kt:[0-9]+:[0-9]+ 'RequiresDevice' is deprecated\. Deprecated in Java
 # > Task :compose:ui:ui:compileDebugAndroidTestKotlin
 w: file://\$SUPPORT/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PopupTestUtils\.kt:[0-9]+:[0-9]+ 'getter for windowLayoutParams: EspressoOptional<WindowManager\.LayoutParams!>!' is deprecated\. Deprecated in Java
-# > Task :compose:ui:ui-inspection:dexInspectorRelease
-Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$FakeJavaAnnotationConstructor\$asString\$[0-9]+'s kotlin\.Metadata: null
-Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$Instance's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.framework\.ViewExtensionsKt\$ancestors\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.Java[0-9]+RepeatableContainerLoader\$Cache's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmPropertySignature's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.InspectorNode\$WhenMappings's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KotlinReflectionInternalError's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$findFunctionDescriptor\$allMembers\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.RuntimeTypeMapperKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCallerKt\$createAnnotationInstance\$hashCode\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KMutableProperty[0-9]+Impl\$_setter\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.compose\.AndroidComposeViewWrapper\$Companion's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KParameterImpl\$type\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KClasses\$isSubclassOf\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$Data\$members\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCaller's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.UiToolingDataApi's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_parameters\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.LambdaLocation's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeImpl's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$getComposableNodes\$data\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ModuleByClassLoaderKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmPropertySignature\$JavaField's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$supertypes\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$expand\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KProperty[0-9]+Impl\$Getter's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCaller\$CallMode's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KFunctionImpl\$caller\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldSetter\$BoundInstance's kotlin\.Metadata: null
-Info:
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$Instance's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.ParameterInformation's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.IllegalPropertyDelegateAccessException's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.InlineClassAwareCaller's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KClasses\$defaultType\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.PackageHashesKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_returnType\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$FakeJavaAnnotationConstructor\$asString\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.InlineClassAwareCaller\$BoxUnboxData's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$loadConstantsFromStaticFinal\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KProperty[0-9]+Impl's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$handleGetAllParametersCommand\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.ContextCache's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.RuntimeTypeMapperKt\$signature\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterKind's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$BoundConstructor's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$handleUnknownCommand\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.InlineClassAwareCallerKt's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$ParameterCreator\$findBestResourceFont\$\$inlined\$filterIsInstance\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.InlineClassConverter\$loadTypeMapper\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Getter\$descriptor\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KClasses's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KMutableProperty[0-9]+Impl\$Setter's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CachesKt\$CACHE_FOR_BASE_CLASSIFIERS\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_returnType\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeParameterImpl's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeImpl\$arguments\$[0-9]+\$parameterizedTypeArguments\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KMutableProperty[0-9]+Impl's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterType's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$JvmStaticInObject's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldGetter\$BoundInstance's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.compose\.ComposeExtensionsKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ComputableClassValue's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$loadConstantsFromObjectInstance\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.RecompositionHandler\$MethodKey's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Setter\$descriptor\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_annotations\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$belongsToView\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeImpl\$arguments\$[0-9]+\$[0-9]+\$type\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$typeParameters\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldSetter\$BoundJvmStaticInObject's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.KTypesJvm's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.RecompositionHandler\$Data's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CachesKt\$K_PACKAGE_CACHE\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$supertypes\$[0-9]+\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$MemberBelonginess's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmPropertySignature\$JavaMethodProperty's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KFunctionImpl\$descriptor\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldSetter\$Static's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_parameters\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldGetter\$BoundJvmStaticInObject's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$declaredNonStaticMembers\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$inheritedStaticMembers\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.NodeGroup's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KCallables\$callSuspendBy\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$ParameterCreator\$lookup\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.proto\.ViewExtensionsKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImplKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmPropertySignature\$KotlinProperty's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldGetter\$JvmStaticInObject's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldGetter's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$AccessorForHiddenConstructor's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$inheritedNonStaticMembers\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KProperty[0-9]+Impl\$delegateSource\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.SlotTreeKt\$extractParameterInfo\$\$inlined\$sortedBy\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$data\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$handleGetComposablesCommand\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.WeakClassLoaderBox's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$constructors\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCallerKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_parameters\$[0-9]+\$invoke\$\$inlined\$sortBy\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldSetter\$JvmStaticInObject's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ReflectionObjectRenderer\$renderLambda\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KParameterImpl\$annotations\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.KClassesJvm's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Accessor's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$JavaMethod's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$belongsToView\$[0-9]+\$invoke\$\$inlined\$filterIsInstance\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.ReflectLambdaKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Getter's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ScopedReflectionFactory's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.SlotTreeKt's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$getComposableFromAnchor\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.ExperimentalReflectionOnLambdas's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$parseLayoutInfo\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.RuntimeTypeMapper's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$WhenMappings's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.Parameter's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.util\.AnchorMap's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$Data\$multifileFacade\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCallerKt\$createAnnotationInstance\$toString\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCallerKt\$createAnnotationInstance\$toString\$[0-9]+\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$belongsToView\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.RecompositionHandlerKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KParameterImpl's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ConcurrentHashMapCache's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CacheByClassKt's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.InspectorNode's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.RecompositionHandler's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$annotations\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.ReflectLambdaKt\$reflect\$descriptor\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$BoundInstance's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$Data\$moduleData\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$handleGetParameterDetailsCommand\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ReflectionObjectRenderer's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.proto\.ComposeExtensionsKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeImpl\$arguments\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.compose\.AndroidComposeViewWrapperKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.SourceContext's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$findPropertyDescriptor\$mostVisibleProperties\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$SubCompositionRoots's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$allStaticMembers\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$handleGetParametersCommand\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.EmptyContainerForLocal's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KClassifiers's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.CompositionCallStack's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Companion's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$loadConstantsFrom\$[0-9]+\$topClass\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.InternalUnderlyingValOfInlineClass\$Unbound's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeParameterImpl\$upperBounds\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KAnnotatedElements's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.ParseError's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$CacheTree's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$allMembers\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeImpl\$arguments\$[0-9]+\$WhenMappings's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.Group's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KClasses\$allSupertypes\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassifierImpl's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ReflectionObjectRenderer\$renderFunction\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CachesKt\$K_CLASS_CACHE\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.compose\.AndroidComposeViewWrapper's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$Static's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.FunctionWithAllInvokes's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$BoundJvmStaticInObject's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldGetter\$Static's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.TypeOfImplKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ReflectionObjectRenderer\$WhenMappings's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ReflectionScope's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$Data\$metadata\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.framework\.ViewExtensionsKt\$flatten\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$ParameterCreator\$unwrap\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.FunctionWithAllInvokes\$DefaultImpls's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$Data\$kotlinClass\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$declaredStaticMembers\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$allNonStaticMembers\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KProperty[0-9]+Impl\$delegateValue\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.InternalUnderlyingValOfInlineClass\$Bound's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ReflectionScope\$Companion's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KProperty[0-9]+Impl\$_getter\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CacheByClass's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.NodeParameterReference's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CachesKt\$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.proto\.StringTable's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$getLocalProperty\$[0-9]+\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KClassifiers\$WhenMappings's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$stitchTreesByLayoutInfo\$[0-9]+\$parentLayout\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspectorFactory's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.Caller's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.proto\.StringTable\$put\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.InlineClassConverter's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$convert\$group\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.LambdaLocation\$Companion's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldSetter's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KFunctionImpl\$defaultCaller\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KTypes's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.ReflectJvmMapping's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$loadConstantsFrom\$related\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$getLocalProperty\$[0-9]+\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$data\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.InspectorNodeKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.Java[0-9]+RepeatableContainerLoader's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KCallables\$callSuspend\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.SourceInformationContext's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Method\$BoundStatic's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KCallables's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeParameterImpl\$WhenMappings's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$ParameterCreator's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$simpleName\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.InlineClassConverter\$notInlineType\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.InternalUnderlyingValOfInlineClass's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$handleUpdateSettingsCommand\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.ThrowingCaller's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmPropertySignature\$MappedKotlinProperty's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Constructor's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$getMembers\$visitor\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.util\.IntArrayKt's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTreeKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.KCallablesJvm's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ReflectionScopeKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.JoinedKey's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CachesKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$descriptor\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$stitchTreesByLayoutInfo\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.SourceLocation's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$Data\$scope\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.ReflectJvmMapping\$WhenMappings's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$objectInstance\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CachesKt\$CACHE_FOR_GENERIC_CLASSIFIERS\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$getAndroidComposeViews\$roots\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspector\$CacheData's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.IllegalCallableAccessException's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$declaredMembers\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$JavaConstructor's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.Caller\$DefaultImpls's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.NoSuchPropertyException's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$Data's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KFunctionImpl's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.MutableInspectorNode's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldSetter\$Instance's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactoryKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$FieldGetter\$Instance's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$sealedSubclasses\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$KotlinConstructor's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.CreateKCallableVisitor's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.AnnotationConstructorCaller\$Origin's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$Companion's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$findDeepParentTree\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.UtilKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Getter\$caller\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Setter\$caller\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$Setter's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$FakeJavaAnnotationConstructor's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.util\.AnchorMapKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.EmptyGroup's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.BoundCaller's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$WhenMappings's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPackageImpl\$Data's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.ComposeLayoutInspectorKt's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.QuadBounds's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$JavaConstructor\$asString\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.full\.KProperties's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeImpl\$classifier\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$StitchInfo's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.ClassValueCache's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$KotlinFunction's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$create\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.SourceLocationInfo's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.androidx\.compose\.ui\.tooling\.data\.CallGroup's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.calls\.CallerImpl\$AccessorForHiddenBoundConstructor's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl\$_typeParameters\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.util\.ThreadUtils's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$nestedClasses\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$supertypes\$[0-9]+\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.NodeParameter's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$_descriptor\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$findPropertyDescriptor\$allMembers\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.ParameterFactory\$ModifierCollector's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree\$parseLayoutInfo\$\$inlined\$filterIsInstance\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KPropertyImpl\$_javaField\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.proto\.ComposeExtensionsKt\$WhenMappings's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.RawParameter's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.JvmFunctionSignature\$FakeJavaAnnotationConstructor\$special\$\$inlined\$sortedBy\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KTypeParameterOwnerImpl's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.inspector\.LayoutInspectorTree's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.framework\.ViewExtensionsKt's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.UtilKt\$WhenMappings's kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KDeclarationContainerImpl\$Companion's kotlin\.Metadata: null
-Info: Unexpected error while reading androidx\.compose\.ui\.inspection\.compose\.ComposeExtensionsKt\$flatten\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KClassImpl\$Data\$qualifiedName\$[0-9]+'s kotlin\.Metadata: null
-Info: Unexpected error while reading deps\.ui\.inspection\.kotlin\.reflect\.jvm\.internal\.KCallableImpl's kotlin\.Metadata: null
 # b/271306193 remove after aosp/2589888 :emoji:emoji:spdxSbomForRelease
 spdx sboms require a version but project: noto\-emoji\-compat\-flatbuffers has no specified version
 # > Configure project :androidx-demos
diff --git a/development/plot-benchmarks/src/transforms/standard-mappers.ts b/development/plot-benchmarks/src/transforms/standard-mappers.ts
index 6b3646a..b7140a7 100644
--- a/development/plot-benchmarks/src/transforms/standard-mappers.ts
+++ b/development/plot-benchmarks/src/transforms/standard-mappers.ts
@@ -54,14 +54,18 @@
   const min = flattened[0];
   const max = flattened[flattened.length - 1];
   let targetPoints: Point[] | null = null;
-  let pN: number = 0;
+  let pMin: number = 0;
+  let pMax: number = 0;
   let maxFreq: number = 0;
   const histogram = new Array(buckets).fill(0);
   const slots = buckets - 1; // The actual number of slots in the histogram
   for (let i = 0; i < flattened.length; i += 1) {
     const value = flattened[i];
+    if (value < target) {
+      pMin += 1;
+    }
     if (value >= target) {
-      pN += 1;
+      pMax += 1;
     }
     const n = normalize(value, min, max);
     const index = Math.ceil(n * slots);
@@ -75,7 +79,9 @@
     const index = Math.ceil(n * slots);
     targetPoints = selectPoints(buckets, index, maxFreq);
   }
-  return [singlePoints(histogram), targetPoints, (pN / flattened.length)];
+  // Pay attention to both sides of the normal distribution.
+  let p = Math.min(pMin / flattened.length, pMax / flattened.length);
+  return [singlePoints(histogram), targetPoints, p];
 }
 
 function selectPoints(buckets: number, index: number, target: number) {
@@ -118,7 +124,7 @@
  * Generates a series label.
  */
 function labelFor<T>(metric: Metric<T>, source: string): string {
-  return `${source} {${metric.class}${metric.benchmark}} - ${metric.label}`;
+  return `${source} {${metric.class} ${metric.benchmark}} - ${metric.label}`;
 }
 
 export function datasetName(metric: Metric<any>): string {
diff --git a/development/plot-benchmarks/src/workers/service.ts b/development/plot-benchmarks/src/workers/service.ts
index 9ee37e0..34cb393 100644
--- a/development/plot-benchmarks/src/workers/service.ts
+++ b/development/plot-benchmarks/src/workers/service.ts
@@ -9,6 +9,7 @@
     }
 
     const series: Series[] = [];
+    const standard = metrics.standard;
     const sampled = metrics.sampled;
     if (sampled) {
       for (let i = 0; i < sampled.length; i += 1) {
@@ -22,6 +23,9 @@
             const reference = comparables[0];
             for (let j = 1; j < comparables.length; j += 1) {
               const target = comparables[j];
+              if (!(reference && target)) {
+                continue;
+              }
               const [delta, distribution] = this.buildDistribution(reference, target);
               const [points, pPlots, p] = histogramPoints([distribution], 20, delta);
               series.push({
@@ -47,9 +51,73 @@
         }
       }
     }
+    if (standard) {
+      for (let i = 0; i < standard.length; i += 1) {
+        const metric = standard[i];
+        const name = datasetName(metric);
+        if (activeDatasets.has(name)) {
+          const data: Record<string, ChartData<number>> = metric.data;
+          const entries = Object.entries(data);
+          const comparables: ChartData<number>[] = entries.map(entry => entry[1]);
+          if (comparables.length > 1) {
+            const reference = comparables[0];
+            for (let j = 1; j < comparables.length; j += 1) {
+              const target = comparables[j];
+              if (!(reference && target)) {
+                continue;
+              }
+              const [delta, distribution] = this.buildStandardDistribution(reference, target);
+              const [points, pPlots, p] = histogramPoints([distribution], 20, delta);
+              series.push({
+                label: `${name} { ${metric.label} } - Likelihood`,
+                type: "line",
+                data: points,
+                options: {
+                  tension: 0.3
+                }
+              });
+              if (pPlots && pPlots.length > 0) {
+                series.push({
+                  label: `${name} { ${metric.label} } - { P = ${p} }`,
+                  type: "bar",
+                  data: pPlots,
+                  options: {
+                    tension: 0.01
+                  }
+                });
+              }
+            }
+          }
+        }
+      }
+    }
     return series;
   }
 
+  private buildStandardDistribution(
+    reference: ChartData<number>,
+    target: ChartData<number>,
+    N: number = 100_000): [number, number[]] {
+    // Compute delta mean
+    const referenceData = reference.values;
+    const targetData = target.values;
+    const referenceMean = this.mean(referenceData);
+    const targetMean = this.mean(targetData);
+    const deltaMean = referenceMean - targetMean;
+    // Simulate
+    const rs = referenceData.length;
+    const ts = targetData.length;
+    const combined: number[] = [...referenceData, ...targetData];
+    const means: number[] = [];
+    for (let i = 0; i < N; i += 1) {
+      const [r, t] = this.shuffleSplit(combined, [rs, ts]);
+      const mr = this.mean(r);
+      const mt = this.mean(t);
+      means.push(mr - mt);
+    }
+    return [deltaMean, means];
+  }
+
   private buildDistribution(
     reference: ChartData<number[]>,
     target: ChartData<number[]>,
@@ -60,17 +128,17 @@
     const targetData = target.values;
     const referenceMedian = this.arrayMedian(referenceData);
     const targetMedian = this.arrayMedian(targetData);
-    const deltaMedian = Math.abs(referenceMedian - targetMedian);
+    const deltaMedian = referenceMedian - targetMedian;
     // Simulate
     const rs = referenceData.length;
     const ts = targetData.length;
     const combined: number[][] = [...referenceData, ...targetData];
-    const medians = [];
+    const medians: number[] = [];
     for (let i = 0; i < N; i += 1) {
       const [r, t] = this.shuffleSplit(combined, [rs, ts]);
       const mr = this.arrayMedian(r);
       const mt = this.arrayMedian(t);
-      medians.push(Math.abs(mr - mt));
+      medians.push(mr - mt);
     }
     return [deltaMedian, medians];
   }
@@ -101,6 +169,15 @@
     return this.median(data.flat());
   }
 
+  private mean(data: number[]): number {
+    if (data.length <= 0) return 0;
+    let sum = 0;
+    for (let i = 0; i < data.length; i += 1) {
+      sum += data[i];
+    }
+    return (sum / data.length);
+  }
+
   private median(data: number[]): number {
     const copy = [...data];
     // Default comparator coerces types to string !
diff --git a/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetUtils.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetUtils.kt
index 853e676..1b39006 100644
--- a/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetUtils.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/AppWidgetUtils.kt
@@ -177,8 +177,6 @@
 
 /**
  * [Tracing] contains methods for tracing sections of GlanceAppWidget.
- *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 object Tracing {
diff --git a/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/MyPackageReplacedReceiver.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/MyPackageReplacedReceiver.kt
index fc925c8..c326752 100644
--- a/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/MyPackageReplacedReceiver.kt
+++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/MyPackageReplacedReceiver.kt
@@ -24,7 +24,6 @@
 /**
  * Broadcast receiver handling updates after a package update. Useful to know if classes appeared
  * or disappeared and need cleaning.
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 class MyPackageReplacedReceiver : BroadcastReceiver() {
diff --git a/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/Border.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/Border.kt
index 5cc212d..2901825 100644
--- a/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/Border.kt
+++ b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/Border.kt
@@ -50,14 +50,12 @@
     BorderModifier(BorderDimension(resourceId = width), color)
 )
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public data class BorderModifier(
     public val width: BorderDimension,
     public val color: ColorProvider
 ) : GlanceModifier.Element
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public data class BorderDimension(
     public val dp: Dp = 0.dp,
diff --git a/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/curved/GlanceCurvedModifier.kt b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/curved/GlanceCurvedModifier.kt
index 1130cea..0ba9ad7 100644
--- a/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/curved/GlanceCurvedModifier.kt
+++ b/glance/glance-wear-tiles/src/main/java/androidx/glance/wear/tiles/curved/GlanceCurvedModifier.kt
@@ -136,7 +136,6 @@
     } + "]"
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 inline fun <reified T> GlanceCurvedModifier.findModifier(): T? =
     this.foldIn<T?>(null) { acc, cur ->
@@ -150,7 +149,6 @@
 /**
  * Find the last modifier of the given type, and create a new [GlanceCurvedModifier] which is
  * equivalent with the previous one, but without any modifiers of specified type.
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 inline fun <reified T> GlanceCurvedModifier.extractModifier(): Pair<T?, GlanceCurvedModifier> =
@@ -166,7 +164,6 @@
         null to this
     }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public data class SweepAngleModifier(public val degrees: Float) : GlanceCurvedModifier.Element
 
@@ -176,7 +173,6 @@
 public fun GlanceCurvedModifier.sweepAngleDegrees(degrees: Float) =
     this.then(SweepAngleModifier(degrees))
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public data class ThicknessModifier(public val thickness: Dp) : GlanceCurvedModifier.Element
 
@@ -186,7 +182,6 @@
 public fun GlanceCurvedModifier.thickness(thickness: Dp) =
     this.then(ThicknessModifier(thickness))
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public data class ActionCurvedModifier(public val action: Action) : GlanceCurvedModifier.Element
 
@@ -196,7 +191,6 @@
 public fun GlanceCurvedModifier.clickable(onClick: Action): GlanceCurvedModifier =
     this.then(ActionCurvedModifier(onClick))
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public data class SemanticsCurvedModifier(
     val configuration: SemanticsConfiguration
diff --git a/glance/glance/api/current.ignore b/glance/glance/api/current.ignore
new file mode 100644
index 0000000..a50b08f
--- /dev/null
+++ b/glance/glance/api/current.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedPackage: androidx.glance.session:
+    Removed package androidx.glance.session
diff --git a/glance/glance/api/current.txt b/glance/glance/api/current.txt
index 8f1b4c1..818bc2f 100644
--- a/glance/glance/api/current.txt
+++ b/glance/glance/api/current.txt
@@ -431,13 +431,6 @@
 
 }
 
-package androidx.glance.session {
-
-  public final class SessionManagerKt {
-  }
-
-}
-
 package androidx.glance.state {
 
   public interface GlanceStateDefinition<T> {
diff --git a/glance/glance/api/restricted_current.ignore b/glance/glance/api/restricted_current.ignore
new file mode 100644
index 0000000..a50b08f
--- /dev/null
+++ b/glance/glance/api/restricted_current.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedPackage: androidx.glance.session:
+    Removed package androidx.glance.session
diff --git a/glance/glance/api/restricted_current.txt b/glance/glance/api/restricted_current.txt
index 8f1b4c1..818bc2f 100644
--- a/glance/glance/api/restricted_current.txt
+++ b/glance/glance/api/restricted_current.txt
@@ -431,13 +431,6 @@
 
 }
 
-package androidx.glance.session {
-
-  public final class SessionManagerKt {
-  }
-
-}
-
 package androidx.glance.state {
 
   public interface GlanceStateDefinition<T> {
diff --git a/glance/glance/src/main/java/androidx/glance/Applier.kt b/glance/glance/src/main/java/androidx/glance/Applier.kt
index be62b74..47ca782 100644
--- a/glance/glance/src/main/java/androidx/glance/Applier.kt
+++ b/glance/glance/src/main/java/androidx/glance/Applier.kt
@@ -22,7 +22,6 @@
 
 /**
  * Applier for the Glance composition.
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class Applier(root: EmittableWithChildren) : AbstractApplier<Emittable>(root) {
diff --git a/glance/glance/src/main/java/androidx/glance/Background.kt b/glance/glance/src/main/java/androidx/glance/Background.kt
index 61763ce..67e1195 100644
--- a/glance/glance/src/main/java/androidx/glance/Background.kt
+++ b/glance/glance/src/main/java/androidx/glance/Background.kt
@@ -22,7 +22,6 @@
 import androidx.glance.layout.ContentScale
 import androidx.glance.unit.ColorProvider
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class BackgroundModifier private constructor(
     val colorProvider: ColorProvider?,
diff --git a/glance/glance/src/main/java/androidx/glance/Button.kt b/glance/glance/src/main/java/androidx/glance/Button.kt
index ff70130..c40d42c 100644
--- a/glance/glance/src/main/java/androidx/glance/Button.kt
+++ b/glance/glance/src/main/java/androidx/glance/Button.kt
@@ -128,7 +128,6 @@
     )
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class EmittableButton : Emittable {
     override var modifier: GlanceModifier = GlanceModifier
@@ -151,7 +150,6 @@
         "colors=$colors modifier=$modifier, maxLines=$maxLines)"
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 fun EmittableButton.toEmittableText() = EmittableText().also {
     it.modifier = modifier
diff --git a/glance/glance/src/main/java/androidx/glance/Emittables.kt b/glance/glance/src/main/java/androidx/glance/Emittables.kt
index 5b03dbf..b9cf2f2 100644
--- a/glance/glance/src/main/java/androidx/glance/Emittables.kt
+++ b/glance/glance/src/main/java/androidx/glance/Emittables.kt
@@ -20,14 +20,12 @@
 import androidx.glance.layout.Alignment
 import androidx.glance.text.TextStyle
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 interface Emittable {
     var modifier: GlanceModifier
     fun copy(): Emittable
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 abstract class EmittableWithChildren(
     internal var maxDepth: Int = Int.MAX_VALUE,
@@ -39,13 +37,11 @@
         children.joinToString(",\n").prependIndent("  ")
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 abstract class EmittableLazyItemWithChildren : EmittableWithChildren() {
     var alignment: Alignment = Alignment.CenterStart
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 abstract class EmittableWithText : Emittable {
     var text: String = ""
@@ -53,7 +49,6 @@
     var maxLines: Int = Int.MAX_VALUE
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 abstract class EmittableCheckable : EmittableWithText() {
     var checked: Boolean = false
diff --git a/glance/glance/src/main/java/androidx/glance/GlanceNode.kt b/glance/glance/src/main/java/androidx/glance/GlanceNode.kt
index 9be3709..efec449 100644
--- a/glance/glance/src/main/java/androidx/glance/GlanceNode.kt
+++ b/glance/glance/src/main/java/androidx/glance/GlanceNode.kt
@@ -24,7 +24,6 @@
 import androidx.compose.runtime.DisallowComposableCalls
 import androidx.compose.runtime.Updater
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 @Composable
 inline fun <T : Emittable> GlanceNode(
@@ -34,7 +33,6 @@
     ComposeNode<T, Applier>(factory, update)
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 @Composable
 inline fun <T : Emittable> GlanceNode(
diff --git a/glance/glance/src/main/java/androidx/glance/Image.kt b/glance/glance/src/main/java/androidx/glance/Image.kt
index 5248736..ae5f43e 100644
--- a/glance/glance/src/main/java/androidx/glance/Image.kt
+++ b/glance/glance/src/main/java/androidx/glance/Image.kt
@@ -36,20 +36,17 @@
 interface ImageProvider
 
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-/** @suppress */
 class AndroidResourceImageProvider(@DrawableRes val resId: Int) : ImageProvider {
     override fun toString() = "AndroidResourceImageProvider(resId=$resId)"
 }
 
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-/** @suppress */
 class BitmapImageProvider(val bitmap: Bitmap) : ImageProvider {
     override fun toString() =
         "BitmapImageProvider(bitmap=Bitmap(${bitmap.width}px x ${bitmap.height}px))"
 }
 
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-/** @suppress */
 class IconImageProvider(val icon: Icon) : ImageProvider {
     override fun toString() = "IconImageProvider(icon=$icon)"
 }
@@ -78,11 +75,9 @@
 fun ImageProvider(icon: Icon): ImageProvider = IconImageProvider(icon)
 
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-/** @suppress */
 interface ColorFilterParams
 
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-/** @suppress */
 class TintColorFilterParams(val colorProvider: ColorProvider) : ColorFilterParams {
     override fun toString() =
         "TintColorFilterParams(colorProvider=$colorProvider))"
@@ -104,7 +99,6 @@
 }
 
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-/** @suppress */
 class EmittableImage : Emittable {
     override var modifier: GlanceModifier = GlanceModifier
     var provider: ImageProvider? = null
@@ -127,7 +121,6 @@
 }
 
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-/** @suppress */
 fun EmittableImage.isDecorative(): Boolean {
     val semanticsConfiguration = modifier.findModifier<SemanticsModifier>()?.configuration
     return semanticsConfiguration?.getOrNull(SemanticsProperties.ContentDescription)?.get(0)
diff --git a/glance/glance/src/main/java/androidx/glance/Utils.kt b/glance/glance/src/main/java/androidx/glance/Utils.kt
index 0d827b9..26ea613 100644
--- a/glance/glance/src/main/java/androidx/glance/Utils.kt
+++ b/glance/glance/src/main/java/androidx/glance/Utils.kt
@@ -18,7 +18,6 @@
  * limitations under the License.
  */
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 inline fun <reified T> GlanceModifier.findModifier(): T? = this.foldIn<T?>(null) { acc, cur ->
     if (cur is T) {
@@ -31,7 +30,6 @@
 /**
  * Find the last modifier of the given type, and create a new [GlanceModifier] which is equivalent
  * with the previous one, but without any modifiers of specified type.
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 inline fun <reified T> GlanceModifier.extractModifier(): Pair<T?, GlanceModifier> =
diff --git a/glance/glance/src/main/java/androidx/glance/Visibility.kt b/glance/glance/src/main/java/androidx/glance/Visibility.kt
index afad489..5863c2c 100644
--- a/glance/glance/src/main/java/androidx/glance/Visibility.kt
+++ b/glance/glance/src/main/java/androidx/glance/Visibility.kt
@@ -30,7 +30,6 @@
     Gone
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 data class VisibilityModifier(val visibility: Visibility) : GlanceModifier.Element
 
diff --git a/glance/glance/src/main/java/androidx/glance/action/Action.kt b/glance/glance/src/main/java/androidx/glance/action/Action.kt
index 422872d..d214afe 100644
--- a/glance/glance/src/main/java/androidx/glance/action/Action.kt
+++ b/glance/glance/src/main/java/androidx/glance/action/Action.kt
@@ -61,7 +61,6 @@
 ): GlanceModifier =
     this.then(ActionModifier(action(key, block)))
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class ActionModifier(val action: Action) : GlanceModifier.Element {
     override fun toString(): String {
diff --git a/glance/glance/src/main/java/androidx/glance/action/StartActivityAction.kt b/glance/glance/src/main/java/androidx/glance/action/StartActivityAction.kt
index 73b92aa..aa04c21 100644
--- a/glance/glance/src/main/java/androidx/glance/action/StartActivityAction.kt
+++ b/glance/glance/src/main/java/androidx/glance/action/StartActivityAction.kt
@@ -22,14 +22,12 @@
 import androidx.annotation.RestrictTo
 import androidx.glance.ExperimentalGlanceApi
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 interface StartActivityAction : Action {
     val parameters: ActionParameters
     val activityOptions: Bundle?
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class StartActivityComponentAction(
     val componentName: ComponentName,
@@ -37,7 +35,6 @@
     override val activityOptions: Bundle?,
 ) : StartActivityAction
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class StartActivityClassAction(
     val activityClass: Class<out Activity>,
diff --git a/glance/glance/src/main/java/androidx/glance/layout/Box.kt b/glance/glance/src/main/java/androidx/glance/layout/Box.kt
index 22328de..acc6c2e 100644
--- a/glance/glance/src/main/java/androidx/glance/layout/Box.kt
+++ b/glance/glance/src/main/java/androidx/glance/layout/Box.kt
@@ -24,7 +24,6 @@
 import androidx.glance.GlanceNode
 import androidx.glance.unit.Dimension
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class EmittableBox : EmittableWithChildren() {
     override var modifier: GlanceModifier = GlanceModifier
diff --git a/glance/glance/src/main/java/androidx/glance/layout/Column.kt b/glance/glance/src/main/java/androidx/glance/layout/Column.kt
index 17fa31d..6e1e4e1 100644
--- a/glance/glance/src/main/java/androidx/glance/layout/Column.kt
+++ b/glance/glance/src/main/java/androidx/glance/layout/Column.kt
@@ -24,7 +24,6 @@
 import androidx.glance.GlanceNode
 import androidx.glance.unit.Dimension
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class EmittableColumn : EmittableWithChildren() {
     override var modifier: GlanceModifier = GlanceModifier
diff --git a/glance/glance/src/main/java/androidx/glance/layout/Padding.kt b/glance/glance/src/main/java/androidx/glance/layout/Padding.kt
index c48ab3c..a5027be 100644
--- a/glance/glance/src/main/java/androidx/glance/layout/Padding.kt
+++ b/glance/glance/src/main/java/androidx/glance/layout/Padding.kt
@@ -178,7 +178,6 @@
 private fun Int.toPadding() =
     if (this == 0) PaddingDimension() else PaddingDimension(this)
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 fun GlanceModifier.collectPadding(): PaddingModifier? =
     foldIn<PaddingModifier?>(null) { acc, modifier ->
@@ -189,7 +188,6 @@
         }
     }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 fun GlanceModifier.collectPaddingInDp(resources: Resources) =
     collectPadding()?.toDp(resources)
@@ -199,7 +197,6 @@
         acc + (resources.getDimension(res) / resources.displayMetrics.density).dp
     }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 data class PaddingModifier(
     val left: PaddingDimension = PaddingDimension(),
@@ -231,7 +228,6 @@
         )
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 data class PaddingDimension(
     val dp: Dp = 0.dp,
@@ -250,7 +246,6 @@
     }
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 data class PaddingInDp(
     val left: Dp = 0.dp,
diff --git a/glance/glance/src/main/java/androidx/glance/layout/Row.kt b/glance/glance/src/main/java/androidx/glance/layout/Row.kt
index 0259c9a9..4fe0201 100644
--- a/glance/glance/src/main/java/androidx/glance/layout/Row.kt
+++ b/glance/glance/src/main/java/androidx/glance/layout/Row.kt
@@ -24,7 +24,6 @@
 import androidx.glance.GlanceNode
 import androidx.glance.unit.Dimension
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class EmittableRow : EmittableWithChildren() {
     override var modifier: GlanceModifier = GlanceModifier
diff --git a/glance/glance/src/main/java/androidx/glance/layout/SizeModifiers.kt b/glance/glance/src/main/java/androidx/glance/layout/SizeModifiers.kt
index f64ee76..6f50629 100644
--- a/glance/glance/src/main/java/androidx/glance/layout/SizeModifiers.kt
+++ b/glance/glance/src/main/java/androidx/glance/layout/SizeModifiers.kt
@@ -25,7 +25,6 @@
 /**
  * Modifier to represent the width of an element.
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class WidthModifier(val width: Dimension) : GlanceModifier.Element
@@ -52,7 +51,6 @@
 /**
  * Modifier to represent the height of an element.
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class HeightModifier(val height: Dimension) : GlanceModifier.Element
diff --git a/glance/glance/src/main/java/androidx/glance/layout/Spacer.kt b/glance/glance/src/main/java/androidx/glance/layout/Spacer.kt
index 2f665e9..f5b8e79 100644
--- a/glance/glance/src/main/java/androidx/glance/layout/Spacer.kt
+++ b/glance/glance/src/main/java/androidx/glance/layout/Spacer.kt
@@ -22,7 +22,6 @@
 import androidx.glance.GlanceModifier
 import androidx.glance.GlanceNode
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class EmittableSpacer : Emittable {
     override var modifier: GlanceModifier = GlanceModifier
diff --git a/glance/glance/src/main/java/androidx/glance/semantics/SemanticsModifier.kt b/glance/glance/src/main/java/androidx/glance/semantics/SemanticsModifier.kt
index 76f5ad3..3d107cd 100644
--- a/glance/glance/src/main/java/androidx/glance/semantics/SemanticsModifier.kt
+++ b/glance/glance/src/main/java/androidx/glance/semantics/SemanticsModifier.kt
@@ -18,7 +18,6 @@
 import androidx.annotation.RestrictTo
 import androidx.glance.GlanceModifier
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 data class SemanticsModifier(
     val configuration: SemanticsConfiguration
diff --git a/glance/glance/src/main/java/androidx/glance/session/GlobalSnapshotManager.kt b/glance/glance/src/main/java/androidx/glance/session/GlobalSnapshotManager.kt
index 42bdefa..285f564 100644
--- a/glance/glance/src/main/java/androidx/glance/session/GlobalSnapshotManager.kt
+++ b/glance/glance/src/main/java/androidx/glance/session/GlobalSnapshotManager.kt
@@ -32,7 +32,6 @@
  * notifications (which are necessary in order for recompositions to be scheduled in response to
  * state changes). These will be sent on Dispatchers.Default.
  * This is based on [androidx.compose.ui.platform.GlobalSnapshotManager].
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 object GlobalSnapshotManager {
diff --git a/glance/glance/src/main/java/androidx/glance/session/Session.kt b/glance/glance/src/main/java/androidx/glance/session/Session.kt
index 3c4ecf4..673b47a 100644
--- a/glance/glance/src/main/java/androidx/glance/session/Session.kt
+++ b/glance/glance/src/main/java/androidx/glance/session/Session.kt
@@ -28,7 +28,6 @@
  * [Session] is implemented by Glance surfaces in order to provide content for the
  * composition and process the results of recomposition.
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 abstract class Session(val key: String) {
diff --git a/glance/glance/src/main/java/androidx/glance/session/SessionManager.kt b/glance/glance/src/main/java/androidx/glance/session/SessionManager.kt
index d14b141..5b83da2 100644
--- a/glance/glance/src/main/java/androidx/glance/session/SessionManager.kt
+++ b/glance/glance/src/main/java/androidx/glance/session/SessionManager.kt
@@ -34,7 +34,6 @@
  * [SessionManager] is the entrypoint for Glance surfaces to start a session worker that will handle
  * their composition.
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 interface SessionManager {
@@ -62,8 +61,7 @@
         get() = "KEY"
 }
 
-/** @suppress */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+@get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 val GlanceSessionManager: SessionManager = SessionManagerImpl(SessionWorker::class.java)
 
 internal class SessionManagerImpl(
diff --git a/glance/glance/src/main/java/androidx/glance/state/GlanceStateDefinition.kt b/glance/glance/src/main/java/androidx/glance/state/GlanceStateDefinition.kt
index 90fa4b3..e22c5c8 100644
--- a/glance/glance/src/main/java/androidx/glance/state/GlanceStateDefinition.kt
+++ b/glance/glance/src/main/java/androidx/glance/state/GlanceStateDefinition.kt
@@ -58,7 +58,6 @@
  * Interface for an object that manages configuration for glanceables using the given
  * GlanceStateDefinition.
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 interface ConfigManager {
@@ -104,7 +103,6 @@
  * relevant to the representation of views, but not surface specific view data. For example, the
  * month displayed on a calendar rather than actual calendar entries.
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 object GlanceState : ConfigManager {
diff --git a/glance/glance/src/main/java/androidx/glance/text/Text.kt b/glance/glance/src/main/java/androidx/glance/text/Text.kt
index 2f9974a..d1e2a95 100644
--- a/glance/glance/src/main/java/androidx/glance/text/Text.kt
+++ b/glance/glance/src/main/java/androidx/glance/text/Text.kt
@@ -58,7 +58,6 @@
     val defaultTextStyle: TextStyle = TextStyle(color = defaultTextColor)
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class EmittableText : EmittableWithText() {
     override var modifier: GlanceModifier = GlanceModifier
diff --git a/glance/glance/src/main/java/androidx/glance/unit/ColorProvider.kt b/glance/glance/src/main/java/androidx/glance/unit/ColorProvider.kt
index c1d5693..cf6292b 100644
--- a/glance/glance/src/main/java/androidx/glance/unit/ColorProvider.kt
+++ b/glance/glance/src/main/java/androidx/glance/unit/ColorProvider.kt
@@ -47,13 +47,11 @@
     return ResourceColorProvider(resId)
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 data class FixedColorProvider(val color: Color) : ColorProvider {
     override fun getColor(context: Context) = color
 }
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 data class ResourceColorProvider(@ColorRes val resId: Int) : ColorProvider {
     override fun getColor(context: Context): Color {
diff --git a/glance/glance/src/main/java/androidx/glance/unit/Dimension.kt b/glance/glance/src/main/java/androidx/glance/unit/Dimension.kt
index b7cee11..72f742f 100644
--- a/glance/glance/src/main/java/androidx/glance/unit/Dimension.kt
+++ b/glance/glance/src/main/java/androidx/glance/unit/Dimension.kt
@@ -25,7 +25,6 @@
  * These should only be used internally; developers should be using the width/height Modifiers
  * below rather than this class directly.
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 sealed class Dimension {
diff --git a/health/connect/connect-client/lint-baseline.xml b/health/connect/connect-client/lint-baseline.xml
index 1762dc6..6729a05 100644
--- a/health/connect/connect-client/lint-baseline.xml
+++ b/health/connect/connect-client/lint-baseline.xml
@@ -2,6 +2,258 @@
 <issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class AggregateDataRequest(override val proto: RequestProto.AggregateDataRequest) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/AggregateDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class AggregateDataResponse(override val proto: ResponseProto.AggregateDataResponse) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/AggregateDataResponse.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class ChangesEvent(override val proto: ChangeProto.ChangesEvent) :"
+        errorLine2="      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/changes/ChangesEvent.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class DeleteDataRangeRequest(override val proto: RequestProto.DeleteDataRangeRequest) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/DeleteDataRangeRequest.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class DeleteDataRequest("
+        errorLine2="      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/DeleteDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="annotation class ErrorCode {"
+        errorLine2="                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/error/ErrorCode.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class ErrorStatus"
+        errorLine2="      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/error/ErrorStatus.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class ExerciseRoute(override val proto: DataProto.DataPoint.SubTypeDataList) :"
+        errorLine2="      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/exerciseroute/ExerciseRoute.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class GetChangesRequest(override val proto: RequestProto.GetChangesRequest) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/GetChangesRequest.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class GetChangesResponse(override val proto: ResponseProto.GetChangesResponse) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/GetChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class GetChangesTokenRequest(override val proto: RequestProto.GetChangesTokenRequest) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/GetChangesTokenRequest.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class GetChangesTokenResponse(override val proto: ResponseProto.GetChangesTokenResponse) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/GetChangesTokenResponse.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="interface HealthDataAsyncClient {"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/HealthDataAsyncClient.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="object HealthDataService {"
+        errorLine2="       ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/HealthDataService.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class InsertDataResponse(val dataPointUids: List&lt;String>) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/InsertDataResponse.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class Permission(override val proto: PermissionProto.Permission) :"
+        errorLine2="      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/permission/Permission.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class ReadDataRangeRequest(override val proto: RequestProto.ReadDataRangeRequest) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/ReadDataRangeRequest.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class ReadDataRangeResponse(override val proto: ResponseProto.ReadDataRangeResponse) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/ReadDataRangeResponse.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class ReadDataRequest(override val proto: RequestProto.ReadDataRequest) :"
+        errorLine2="      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/ReadDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class ReadDataResponse(override val proto: ResponseProto.ReadDataResponse) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/ReadDataResponse.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class ReadExerciseRouteRequest(override val proto: RequestProto.ReadExerciseRouteRequest) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/ReadExerciseRouteRequest.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class ReadExerciseRouteResponse(override val proto: ResponseProto.ReadExerciseRouteResponse) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/ReadExerciseRouteResponse.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class RegisterForDataNotificationsRequest("
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RegisterForDataNotificationsRequest.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class RequestContext("
+        errorLine2="      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="object SharedMemory27Impl {"
+        errorLine2="       ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/impl/data/SharedMemory27Impl.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class UnregisterFromDataNotificationsRequest("
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UnregisterFromDataNotificationsRequest.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class UpsertDataRequest(val dataPoints: List&lt;DataProto.DataPoint>) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class UpsertExerciseRouteRequest(val sessionUid: String, val route: DataProto.DataPoint) :"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertExerciseRouteRequest.kt"/>
+    </issue>
+
+    <issue
         id="BanSynchronizedMethods"
         message="Use of synchronized methods is not recommended"
         errorLine1="    private synchronized void handleRetriableDisconnection(Throwable throwable) {"
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
index d70451d..15a36b41 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
@@ -517,7 +517,6 @@
         /**
          * Tag used in SDK debug logs.
          *
-         * @suppress
          */
         @RestrictTo(RestrictTo.Scope.LIBRARY)
         internal const val HEALTH_CONNECT_CLIENT_TAG = "HealthConnectClient"
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/changes/ChangesEvent.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/changes/ChangesEvent.kt
index fbaff9f..5e96387 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/changes/ChangesEvent.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/changes/ChangesEvent.kt
@@ -24,7 +24,6 @@
  * @property nextChangesToken Continuation token to access the next changes.
  * @property changes List of changes required to sync.
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 class ChangesEvent
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt
index 8d6bfec..ceb540b 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt
@@ -58,7 +58,6 @@
  * Kotlin extension implementation that exposes kotlin coroutines rather than guava
  * ListenableFutures.
  *
- * @suppress
  */
 class HealthConnectClientImpl
 internal constructor(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt
index 8c2d24c..0a7a446 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt
@@ -64,7 +64,6 @@
 /**
  * Implements the [HealthConnectClient] with APIs in UpsideDownCake.
  *
- * @suppress
  */
 @RequiresApi(api = 34)
 class HealthConnectClientUpsideDownImpl : HealthConnectClient, PermissionController {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeConverter.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeConverter.kt
index c0b99c1..b9a683b 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeConverter.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeConverter.kt
@@ -25,7 +25,6 @@
 /**
  * Converts public API object into internal proto for ipc.
  *
- * @suppress
  */
 fun KClass<out Record>.toDataTypeName(): String =
     RECORDS_CLASS_NAME_MAP[this] ?: throw UnsupportedOperationException("Not supported yet: $this")
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt
index 2ae08f6..34af571 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt
@@ -22,8 +22,6 @@
 
 /**
  * Provides conversion to proto value objects.
- *
- * @suppress
  */
 internal fun longVal(value: Long): DataProto.Value =
     DataProto.Value.newBuilder().setLongVal(value).build()
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/request/DeleteDataRangeRequestToProto.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/request/DeleteDataRangeRequestToProto.kt
index 52f25a5c..1d6688f 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/request/DeleteDataRangeRequestToProto.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/request/DeleteDataRangeRequestToProto.kt
@@ -28,7 +28,6 @@
 /**
  * Converts public API object into internal proto for ipc.
  *
- * @suppress
  */
 fun toDeleteDataRangeRequestProto(
     dataTypeKC: KClass<out Record>,
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt
index 14927dc..6043cee 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt
@@ -28,7 +28,6 @@
 /**
  * Converts public API object into internal proto for ipc.
  *
- * @suppress
  */
 fun <T : Record> toReadDataRangeRequestProto(
     request: ReadRecordsRequest<T>
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRequestToProto.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRequestToProto.kt
index f52550a..d5cf5d7 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRequestToProto.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRequestToProto.kt
@@ -25,8 +25,6 @@
 
 /**
  * Converts public API object into internal proto for ipc.
- *
- * @suppress
  */
 fun toReadDataRequestProto(
     dataTypeKC: KClass<out Record>,
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt
index 4a1ad59..a127717 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt
@@ -28,8 +28,6 @@
 
 /**
  * Converts proto response to public API object.
- *
- * @suppress
  */
 fun toChangesResponse(proto: ResponseProto.GetChangesResponse): ChangesResponse {
     return ChangesResponse(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToReadRecordsResponse.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToReadRecordsResponse.kt
index d5bfa96..5597800 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToReadRecordsResponse.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToReadRecordsResponse.kt
@@ -25,8 +25,6 @@
 
 /**
  * Converts public API object into internal proto for ipc.
- *
- * @suppress
  */
 @Suppress("UNCHECKED_CAST") // Safe to cast as the type should match
 fun <T : Record> toReadRecordsResponse(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/time/TimeRangeFilterConverter.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/time/TimeRangeFilterConverter.kt
index 47c9378b4..1f2dc46 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/time/TimeRangeFilterConverter.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/time/TimeRangeFilterConverter.kt
@@ -23,8 +23,6 @@
 
 /**
  * Converts public API object into internal proto for ipc.
- *
- * @suppress
  */
 @SuppressWarnings("NewApi") // TODO(b/208786847) figure a way to suppress false positive NewApi
 fun TimeRangeFilter.toProto(): TimeProto.TimeSpec {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/package-info.java b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/package-info.java
index a030e03..43483b0 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/package-info.java
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/package-info.java
@@ -15,6 +15,6 @@
  */
 
 @RestrictTo(RestrictTo.Scope.LIBRARY)
-package androidx.health.data.client.impl;
+package androidx.health.connect.client.impl;
 
 import androidx.annotation.RestrictTo;
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/AccessTypes.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/AccessTypes.kt
index 6cb7c5d..697b300 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/AccessTypes.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/AccessTypes.kt
@@ -32,7 +32,6 @@
 /**
  * Type of access to health data: read or write.
  *
- * @suppress
  */
 @Retention(AnnotationRetention.SOURCE)
 @IntDef(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodGlucoseRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodGlucoseRecord.kt
index ccaa87b..a604c33 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodGlucoseRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodGlucoseRecord.kt
@@ -138,7 +138,6 @@
      * List of supported blood glucose specimen sources (type of body fluid used to measure the
      * blood glucose).
      *
-     * @suppress
      */
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(
@@ -157,8 +156,8 @@
 
     /**
      * Temporal relationship of measurement time to a meal.
-     * @suppress
      */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(
         value =
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodPressureRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodPressureRecord.kt
index 4e94b15..3d2ccc3 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodPressureRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodPressureRecord.kt
@@ -109,7 +109,6 @@
 
     /**
      * The user's body position when a health measurement is taken.
-     * @suppress
      */
     internal object BodyPosition {
         const val STANDING_UP = "standing_up"
@@ -120,8 +119,8 @@
 
     /**
      * The arm and part of the arm where a blood pressure measurement was taken.
-     * @suppress
      */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(
         value =
@@ -137,7 +136,6 @@
 
     /**
      * The user's body position when a health measurement is taken.
-     * @suppress
      */
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(
@@ -150,6 +148,7 @@
                 BODY_POSITION_RECLINING
             ]
     )
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
     annotation class BodyPositions
 
     companion object {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyTemperatureMeasurementLocation.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyTemperatureMeasurementLocation.kt
index 1b4c836..02ee03f 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyTemperatureMeasurementLocation.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyTemperatureMeasurementLocation.kt
@@ -67,8 +67,6 @@
 
 /**
  * Where on the user's body a temperature measurement was taken from.
- *
- * @suppress
  */
 @Target(AnnotationTarget.PROPERTY, AnnotationTarget.TYPE)
 @Retention(AnnotationRetention.SOURCE)
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/CervicalMucusRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/CervicalMucusRecord.kt
index 95249de..5498979 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/CervicalMucusRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/CervicalMucusRecord.kt
@@ -96,7 +96,6 @@
 
     /**
      * List of supported Cervical Mucus Sensation types on Health Platform.
-     * @suppress
      */
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(value = [SENSATION_UNKNOWN, SENSATION_LIGHT, SENSATION_MEDIUM, SENSATION_HEAVY])
@@ -115,7 +114,6 @@
 
     /**
      * The consistency or appearance of the user's cervical mucus.
-     * @suppress
      */
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSegment.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSegment.kt
index 6afd2ee..b9e4cf65 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSegment.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSegment.kt
@@ -397,7 +397,6 @@
         /**
          * List of supported segment types on Health Platform.
          *
-         * @suppress
          */
         @Retention(AnnotationRetention.SOURCE)
         @RestrictTo(RestrictTo.Scope.LIBRARY)
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSessionRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSessionRecord.kt
index 8a33653..ecd1acf 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSessionRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSessionRecord.kt
@@ -353,8 +353,6 @@
 
     /**
      * List of supported activities on Health Platform.
-     *
-     * @suppress
      */
     @Retention(AnnotationRetention.SOURCE)
     @RestrictTo(RestrictTo.Scope.LIBRARY)
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MealType.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MealType.kt
index 6849832..74c612d 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MealType.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MealType.kt
@@ -63,8 +63,8 @@
 
 /**
  * Type of meal.
- * @suppress
  */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
 @Retention(AnnotationRetention.SOURCE)
 @IntDef(
     value =
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MenstruationFlowRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MenstruationFlowRecord.kt
index 6d49491..c35793f 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MenstruationFlowRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MenstruationFlowRecord.kt
@@ -70,7 +70,6 @@
     }
     /**
      * How heavy the user's menstruation flow was.
-     * @suppress
      */
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(value = [FLOW_UNKNOWN, FLOW_LIGHT, FLOW_MEDIUM, FLOW_HEAVY])
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/OvulationTestRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/OvulationTestRecord.kt
index f5cf136..e1edea5 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/OvulationTestRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/OvulationTestRecord.kt
@@ -103,7 +103,6 @@
 
     /**
      * The result of a user's ovulation test.
-     * @suppress
      */
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(value = [RESULT_INCONCLUSIVE, RESULT_POSITIVE, RESULT_HIGH, RESULT_NEGATIVE])
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SexualActivityRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SexualActivityRecord.kt
index 9c5b578..6d18990 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SexualActivityRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SexualActivityRecord.kt
@@ -84,7 +84,6 @@
 
     /**
      * Whether protection was used during sexual activity.
-     * @suppress
      */
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepSessionRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepSessionRecord.kt
index 4aafec9..d2a6b91 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepSessionRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepSessionRecord.kt
@@ -152,8 +152,6 @@
 
     /**
      * Type of sleep stage.
-     *
-     * @suppress
      */
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepStageRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepStageRecord.kt
index f1af1da..5508729 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepStageRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepStageRecord.kt
@@ -95,8 +95,6 @@
 
     /**
      * Type of sleep stage.
-     *
-     * @suppress
      */
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt
index 87a60cf..094f963 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt
@@ -107,7 +107,6 @@
 
     /**
      * VO2 max (maximal aerobic capacity) measurement method.
-     * @suppress
      */
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/Device.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/Device.kt
index a6bfd853..6c981b2 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/Device.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/Device.kt
@@ -68,7 +68,6 @@
 
     /**
      * List of supported device types on Health Platform.
-     * @suppress
      */
     @Retention(AnnotationRetention.SOURCE)
     @IntDef(
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/DeviceTypes.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/DeviceTypes.kt
index 3481655..d3c6e79 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/DeviceTypes.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/DeviceTypes.kt
@@ -22,7 +22,6 @@
 /**
  * List of supported device types on Health Platform.
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 object DeviceTypes {
diff --git a/libraryversions.toml b/libraryversions.toml
index 4d00f37..a1f6e3f 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -155,7 +155,7 @@
 WEAR_REMOTE_INTERACTIONS = "1.1.0-alpha01"
 WEAR_TILES = "1.3.0-alpha01"
 WEAR_WATCHFACE = "1.2.0-alpha09"
-WEBKIT = "1.8.0-rc01"
+WEBKIT = "1.9.0-alpha01"
 WINDOW = "1.2.0-beta02"
 WINDOW_EXTENSIONS = "1.2.0-rc01"
 WINDOW_EXTENSIONS_CORE = "1.1.0-alpha01"
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateHandle.kt b/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateHandle.kt
index 6c9d4b8..7ee6c18 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateHandle.kt
+++ b/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateHandle.kt
@@ -390,9 +390,6 @@
             return SavedStateHandle(state)
         }
 
-        /**
-         * @suppress
-         */
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         fun validateValue(value: Any?): Boolean {
             if (value == null) {
diff --git a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
index 7beaf03..53ffa1b 100644
--- a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
+++ b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
@@ -95,9 +95,6 @@
         }
     }
 
-    /**
-     * @suppress
-     */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public open class OnRequeryFactory {
         public open fun onRequery(viewModel: ViewModel) {}
@@ -213,7 +210,6 @@
             private var sInstance: NewInstanceFactory? = null
 
             /**
-             * @suppress
              * Retrieve a singleton instance of NewInstanceFactory.
              *
              * @return A valid [NewInstanceFactory]
diff --git a/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt b/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt
index 7de1624..9af2442 100644
--- a/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt
+++ b/lint-checks/src/main/java/androidx/build/lint/AndroidXIssueRegistry.kt
@@ -41,7 +41,8 @@
                 AndroidManifestServiceExportedDetector.ISSUE,
                 BanParcelableUsage.ISSUE,
                 BanConcurrentHashMap.ISSUE,
-                BanHideAnnotation.ISSUE,
+                BanHideAndSuppressTags.HIDE_ISSUE,
+                BanHideAndSuppressTags.SUPPRESS_ISSUE,
                 BanInappropriateExperimentalUsage.ISSUE,
                 BanInappropriateExperimentalUsage.NULL_ANNOTATION_GROUP_ISSUE,
                 BanInlineOptIn.ISSUE,
diff --git a/lint-checks/src/main/java/androidx/build/lint/BanHideAndSuppressTags.kt b/lint-checks/src/main/java/androidx/build/lint/BanHideAndSuppressTags.kt
new file mode 100644
index 0000000..065cb58
--- /dev/null
+++ b/lint-checks/src/main/java/androidx/build/lint/BanHideAndSuppressTags.kt
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.build.lint
+
+import com.android.tools.lint.client.api.UElementHandler
+import com.android.tools.lint.detector.api.Category
+import com.android.tools.lint.detector.api.Detector
+import com.android.tools.lint.detector.api.Implementation
+import com.android.tools.lint.detector.api.Incident
+import com.android.tools.lint.detector.api.Issue
+import com.android.tools.lint.detector.api.JavaContext
+import com.android.tools.lint.detector.api.Scope
+import com.android.tools.lint.detector.api.Severity
+import org.jetbrains.uast.UDeclaration
+
+@Suppress("unused")
+class BanHideAndSuppressTags : Detector(), Detector.UastScanner {
+    private val tagToIssue = mapOf(
+        "@hide" to HIDE_ISSUE,
+        "@suppress" to SUPPRESS_ISSUE,
+    )
+
+    override fun getApplicableUastTypes() = listOf(UDeclaration::class.java)
+
+    override fun createUastHandler(context: JavaContext) = object : UElementHandler() {
+
+        override fun visitDeclaration(node: UDeclaration) {
+            tagToIssue.forEach { (tag, issue) ->
+                if (node.comments.any { it.text.contains(tag) }) {
+                    val incident = Incident(context)
+                        .issue(issue)
+                        .location(context.getNameLocation(node))
+                        .message("$tag is not allowed in documentation")
+                        .scope(node)
+                    context.report(incident)
+                }
+            }
+        }
+    }
+
+    companion object {
+        val HIDE_ISSUE = Issue.create(
+            id = "BanHideTag",
+            briefDescription = "@hide is not allowed in Javadoc",
+            explanation = "Use of the @hide annotation in Javadoc is no longer allowed." +
+              " Please use @RestrictTo instead.",
+            category = Category.CORRECTNESS,
+            priority = 5,
+            severity = Severity.ERROR,
+            implementation = Implementation(
+                BanHideAndSuppressTags::class.java,
+                Scope.JAVA_FILE_SCOPE
+            )
+        )
+        val SUPPRESS_ISSUE = Issue.create(
+            id = "BanSuppressTag",
+            briefDescription = "@suppress is not allowed in KDoc",
+            explanation = "Use of the @suppress annotation in KDoc is no longer allowed." +
+                " Please use @RestrictTo instead.",
+            category = Category.CORRECTNESS,
+            priority = 5,
+            severity = Severity.ERROR,
+            implementation = Implementation(
+                BanHideAndSuppressTags::class.java,
+                Scope.JAVA_FILE_SCOPE
+            )
+        )
+    }
+}
diff --git a/lint-checks/src/main/java/androidx/build/lint/BanHideAnnotation.kt b/lint-checks/src/main/java/androidx/build/lint/BanHideAnnotation.kt
deleted file mode 100644
index ccaf569..0000000
--- a/lint-checks/src/main/java/androidx/build/lint/BanHideAnnotation.kt
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.build.lint
-
-import com.android.tools.lint.client.api.UElementHandler
-import com.android.tools.lint.detector.api.Category
-import com.android.tools.lint.detector.api.Detector
-import com.android.tools.lint.detector.api.Implementation
-import com.android.tools.lint.detector.api.Incident
-import com.android.tools.lint.detector.api.Issue
-import com.android.tools.lint.detector.api.JavaContext
-import com.android.tools.lint.detector.api.Scope
-import com.android.tools.lint.detector.api.Severity
-import org.jetbrains.uast.UDeclaration
-
-@Suppress("unused")
-class BanHideAnnotation : Detector(), Detector.UastScanner {
-
-    override fun getApplicableUastTypes() = listOf(UDeclaration::class.java)
-
-    override fun createUastHandler(context: JavaContext) = object : UElementHandler() {
-
-        override fun visitDeclaration(node: UDeclaration) {
-            if (node.comments.any { it.text.contains("@hide") }) {
-                val incident = Incident(context)
-                    .issue(ISSUE)
-                    .location(context.getNameLocation(node))
-                    .message("@hide is not allowed in Javadoc")
-                    .scope(node)
-                context.report(incident)
-            }
-        }
-    }
-
-    companion object {
-        val ISSUE = Issue.create(
-            id = "BanHideAnnotation",
-            briefDescription = "@hide is not allowed in Javadoc",
-            explanation = "Use of the @hide annotation in Javadoc is no longer allowed." +
-              " Please use @RestrictTo instead.",
-            category = Category.CORRECTNESS,
-            priority = 5,
-            severity = Severity.ERROR,
-            implementation = Implementation(BanHideAnnotation::class.java, Scope.JAVA_FILE_SCOPE)
-        )
-    }
-}
diff --git a/lint-checks/src/test/java/androidx/build/lint/BanHideAndSuppressTagsTest.kt b/lint-checks/src/test/java/androidx/build/lint/BanHideAndSuppressTagsTest.kt
new file mode 100644
index 0000000..8cc0c56
--- /dev/null
+++ b/lint-checks/src/test/java/androidx/build/lint/BanHideAndSuppressTagsTest.kt
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.build.lint
+
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(JUnit4::class)
+class BanHideAndSuppressTagsTest : AbstractLintDetectorTest(
+    useDetector = BanHideAndSuppressTags(),
+    useIssues = listOf(BanHideAndSuppressTags.HIDE_ISSUE, BanHideAndSuppressTags.SUPPRESS_ISSUE),
+) {
+
+    private val fileWithHideInJavadoc = java(
+        """
+/**
+ * @hide
+ */
+public class HideClass {
+
+    /**
+     * @hide
+     */
+    public static final int HIDE = 0;
+
+    /**
+     * @hide
+     */
+    public static void hide() {}
+}
+        """.trimIndent()
+    )
+
+    @Test
+    fun `Detection of Hide tag in Javadoc`() {
+        val input = arrayOf(fileWithHideInJavadoc)
+
+        /* ktlint-disable max-line-length */
+        val expected = """
+src/HideClass.java:4: Error: @hide is not allowed in documentation [BanHideTag]
+public class HideClass {
+             ~~~~~~~~~
+src/HideClass.java:9: Error: @hide is not allowed in documentation [BanHideTag]
+    public static final int HIDE = 0;
+                            ~~~~
+src/HideClass.java:14: Error: @hide is not allowed in documentation [BanHideTag]
+    public static void hide() {}
+                       ~~~~
+3 errors, 0 warnings
+        """.trimIndent()
+        /* ktlint-enable max-line-length */
+
+        check(*input).expect(expected)
+    }
+
+    private val fileWithSuppressInKdoc = kotlin(
+        """
+/**
+ * @suppress
+ */
+public class SuppressClass {
+
+    /**
+     * @suppress
+     */
+    public fun suppress() {}
+    /**
+    * @suppress
+    */
+    public val suppressedProperty = 1
+}
+        """.trimIndent()
+    )
+
+    @Test
+    fun `Detection of Suppress tag in Kdoc`() {
+        val input = arrayOf(fileWithSuppressInKdoc)
+
+        /* ktlint-disable max-line-length */
+        val expected = """
+src/SuppressClass.kt:4: Error: @suppress is not allowed in documentation [BanSuppressTag]
+public class SuppressClass {
+             ~~~~~~~~~~~~~
+src/SuppressClass.kt:9: Error: @suppress is not allowed in documentation [BanSuppressTag]
+    public fun suppress() {}
+               ~~~~~~~~
+src/SuppressClass.kt:13: Error: @suppress is not allowed in documentation [BanSuppressTag]
+    public val suppressedProperty = 1
+               ~~~~~~~~~~~~~~~~~~
+3 errors, 0 warnings
+        """.trimIndent()
+        /* ktlint-enable max-line-length */
+
+        check(*input).expect(expected)
+    }
+}
diff --git a/lint-checks/src/test/java/androidx/build/lint/BanHideAnnotationTest.kt b/lint-checks/src/test/java/androidx/build/lint/BanHideAnnotationTest.kt
deleted file mode 100644
index c7c3219..0000000
--- a/lint-checks/src/test/java/androidx/build/lint/BanHideAnnotationTest.kt
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.build.lint
-
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-
-@RunWith(JUnit4::class)
-class BanHideAnnotationTest : AbstractLintDetectorTest(
-    useDetector = BanHideAnnotation(),
-    useIssues = listOf(BanHideAnnotation.ISSUE),
-) {
-
-    private val fileWithHideInJavadoc = java(
-        """
-/**
- * @hide
- */
-public class HideClass {
-
-    /**
-     * @hide
-     */
-    public static final int HIDE = 0;
-
-    /**
-     * @hide
-     */
-    public static void hide() {}
-}
-        """.trimIndent()
-    )
-
-    @Test
-    fun `Detection of Hide annotation in Javadoc`() {
-        val input = arrayOf(fileWithHideInJavadoc)
-
-        /* ktlint-disable max-line-length */
-        val expected = """
-src/HideClass.java:4: Error: @hide is not allowed in Javadoc [BanHideAnnotation]
-public class HideClass {
-             ~~~~~~~~~
-src/HideClass.java:9: Error: @hide is not allowed in Javadoc [BanHideAnnotation]
-    public static final int HIDE = 0;
-                            ~~~~
-src/HideClass.java:14: Error: @hide is not allowed in Javadoc [BanHideAnnotation]
-    public static void hide() {}
-                       ~~~~
-3 errors, 0 warnings
-        """.trimIndent()
-        /* ktlint-enable max-line-length */
-
-        check(*input).expect(expected)
-    }
-}
diff --git a/media2/media2-session/src/androidTest/java/androidx/media2/session/MediaControllerTest.java b/media2/media2-session/src/androidTest/java/androidx/media2/session/MediaControllerTest.java
index a5e5004..47e8b34 100644
--- a/media2/media2-session/src/androidTest/java/androidx/media2/session/MediaControllerTest.java
+++ b/media2/media2-session/src/androidTest/java/androidx/media2/session/MediaControllerTest.java
@@ -1397,13 +1397,13 @@
 
     @LargeTest
     @Test
-    public void close_sessionService() throws InterruptedException {
+    public void close_sessionService() throws Exception {
         testCloseFromService(MockMediaSessionService.ID);
     }
 
     @LargeTest
     @Test
-    public void close_libraryService() throws InterruptedException {
+    public void close_libraryService() throws Exception {
         testCloseFromService(MockMediaLibraryService.ID);
     }
 
@@ -1628,7 +1628,7 @@
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
     }
 
-    private void testCloseFromService(String id) throws InterruptedException {
+    private void testCloseFromService(String id) throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
         TestServiceRegistry.getInstance().setSessionServiceCallback(new SessionServiceCallback() {
             @Override
@@ -1645,7 +1645,7 @@
         mController.close();
         // Wait until close triggers onDestroy() of the session service.
         assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertNull(TestServiceRegistry.getInstance().getServiceInstance());
+        assertNull(TestServiceRegistry.getInstance().getServiceInstanceBlocking());
         testNoInteraction();
 
         // Test whether the controller is notified about later close of the session or
diff --git a/media2/media2-session/src/androidTest/java/androidx/media2/session/TestServiceRegistry.java b/media2/media2-session/src/androidTest/java/androidx/media2/session/TestServiceRegistry.java
index e822cd9..ae5bbff 100644
--- a/media2/media2-session/src/androidTest/java/androidx/media2/session/TestServiceRegistry.java
+++ b/media2/media2-session/src/androidTest/java/androidx/media2/session/TestServiceRegistry.java
@@ -18,6 +18,7 @@
 
 import static org.junit.Assert.fail;
 
+import android.os.ConditionVariable;
 import android.os.Handler;
 
 import androidx.annotation.GuardedBy;
@@ -25,6 +26,7 @@
 import androidx.media2.session.TestUtils.SyncHandler;
 
 import java.util.List;
+import java.util.concurrent.TimeoutException;
 
 /**
  * Keeps the instance of currently running {@link MockMediaSessionService}. And also provides
@@ -35,6 +37,9 @@
 public class TestServiceRegistry {
     @GuardedBy("TestServiceRegistry.class")
     private static TestServiceRegistry sInstance;
+
+    private final ConditionVariable mServiceSet;
+
     @GuardedBy("TestServiceRegistry.class")
     private MediaSessionService mService;
     @GuardedBy("TestServiceRegistry.class")
@@ -46,6 +51,10 @@
     @GuardedBy("TestServiceRegistry.class")
     private OnGetSessionHandler mOnGetSessionHandler;
 
+    private TestServiceRegistry() {
+        this.mServiceSet = new ConditionVariable();
+    }
+
     /**
      * Callback for session service's lifecyle (onCreate() / onDestroy())
      */
@@ -112,13 +121,20 @@
                         + " previoulsy running service doesn't break current test");
             }
             mService = service;
+            if (service != null) {
+                mServiceSet.open();
+            }
             if (mSessionServiceCallback != null) {
                 mSessionServiceCallback.onCreated();
             }
         }
     }
 
-    public MediaSessionService getServiceInstance() {
+    public MediaSessionService getServiceInstanceBlocking() throws TimeoutException {
+        if (!mServiceSet.block(5_000)) {
+            throw new TimeoutException(
+                    "Timed out waiting for TestServiceRegistry.setServiceInstance() to be called.");
+        }
         synchronized (TestServiceRegistry.class) {
             return mService;
         }
@@ -136,6 +152,7 @@
                 // bindService() exists, and close() above will do the job instead.
                 // So stopSelf() isn't really needed, but just for sure.
                 mService.stopSelf();
+                mServiceSet.close();
                 mService = null;
             }
             if (mHandler != null) {
diff --git a/media2/media2-session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/TestServiceRegistry.java b/media2/media2-session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/TestServiceRegistry.java
index 5db197b..435328b 100644
--- a/media2/media2-session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/TestServiceRegistry.java
+++ b/media2/media2-session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/TestServiceRegistry.java
@@ -18,6 +18,7 @@
 
 import static org.junit.Assert.fail;
 
+import android.os.ConditionVariable;
 import android.os.Handler;
 import android.util.Log;
 
@@ -29,6 +30,7 @@
 import androidx.media2.test.common.TestUtils.SyncHandler;
 
 import java.util.List;
+import java.util.concurrent.TimeoutException;
 
 /**
  * Keeps the instance of currently running {@link MockMediaSessionService}. And also provides
@@ -42,6 +44,9 @@
 
     @GuardedBy("TestServiceRegistry.class")
     private static TestServiceRegistry sInstance;
+
+    private final ConditionVariable mServiceSet;
+
     @GuardedBy("TestServiceRegistry.class")
     private MediaSessionService mService;
     @GuardedBy("TestServiceRegistry.class")
@@ -53,6 +58,11 @@
     @GuardedBy("TestServiceRegistry.class")
     private OnGetSessionHandler mOnGetSessionHandler;
 
+    private TestServiceRegistry() {
+        this.mServiceSet = new ConditionVariable();
+    }
+
+
     /**
      * Callback for session service's lifecyle (onCreate() / onDestroy())
      */
@@ -131,13 +141,20 @@
                 }
             }
             mService = service;
+            if (service != null) {
+                mServiceSet.open();
+            }
             if (mSessionServiceCallback != null) {
                 mSessionServiceCallback.onCreated();
             }
         }
     }
 
-    public MediaSessionService getServiceInstance() {
+    public MediaSessionService getServiceInstanceBlocking() throws TimeoutException {
+        if (!mServiceSet.block(5_000)) {
+            throw new TimeoutException(
+                    "Timed out waiting for TestServiceRegistry.setServiceInstance() to be called.");
+        }
         synchronized (TestServiceRegistry.class) {
             return mService;
         }
@@ -162,6 +179,7 @@
                 // bindService() exists, and close() above will do the job instead.
                 // So stopSelf() isn't really needed, but just for sure.
                 mService.stopSelf();
+                mServiceSet.close();
                 mService = null;
             } else if (DEBUG) {
                 Log.d(TAG, "cleanUp(): service=" + mService);
diff --git a/media2/media2-session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionServiceTest.java b/media2/media2-session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionServiceTest.java
index 3ba9782..91617b9 100644
--- a/media2/media2-session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionServiceTest.java
+++ b/media2/media2-session/version-compat-tests/current/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionServiceTest.java
@@ -279,9 +279,10 @@
     }
 
     @Test
-    public void getSessions() throws InterruptedException {
+    public void getSessions() throws Exception {
         RemoteMediaController controller = createRemoteController(mToken, true, null);
-        MediaSessionService service = TestServiceRegistry.getInstance().getServiceInstance();
+        MediaSessionService service =
+                TestServiceRegistry.getInstance().getServiceInstanceBlocking();
         try (MediaSession session = createMediaSession("testGetSessions")) {
             service.addSession(session);
             List<MediaSession> sessions = service.getSessions();
@@ -295,9 +296,10 @@
     }
 
     @Test
-    public void addSessions_removedWhenClose() throws InterruptedException {
+    public void addSessions_removedWhenClose() throws Exception {
         RemoteMediaController controller = createRemoteController(mToken, true, null);
-        MediaSessionService service = TestServiceRegistry.getInstance().getServiceInstance();
+        MediaSessionService service =
+                TestServiceRegistry.getInstance().getServiceInstanceBlocking();
         try (MediaSession session = createMediaSession("testAddSessions_removedWhenClose")) {
             service.addSession(session);
             List<MediaSession> sessions = service.getSessions();
diff --git a/media2/media2-session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/TestServiceRegistry.java b/media2/media2-session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/TestServiceRegistry.java
index 5db197b..eadb61d 100644
--- a/media2/media2-session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/TestServiceRegistry.java
+++ b/media2/media2-session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/TestServiceRegistry.java
@@ -18,6 +18,7 @@
 
 import static org.junit.Assert.fail;
 
+import android.os.ConditionVariable;
 import android.os.Handler;
 import android.util.Log;
 
@@ -29,6 +30,7 @@
 import androidx.media2.test.common.TestUtils.SyncHandler;
 
 import java.util.List;
+import java.util.concurrent.TimeoutException;
 
 /**
  * Keeps the instance of currently running {@link MockMediaSessionService}. And also provides
@@ -42,6 +44,9 @@
 
     @GuardedBy("TestServiceRegistry.class")
     private static TestServiceRegistry sInstance;
+
+    private final ConditionVariable mServiceSet;
+
     @GuardedBy("TestServiceRegistry.class")
     private MediaSessionService mService;
     @GuardedBy("TestServiceRegistry.class")
@@ -53,6 +58,10 @@
     @GuardedBy("TestServiceRegistry.class")
     private OnGetSessionHandler mOnGetSessionHandler;
 
+    private TestServiceRegistry() {
+        this.mServiceSet = new ConditionVariable();
+    }
+
     /**
      * Callback for session service's lifecyle (onCreate() / onDestroy())
      */
@@ -131,13 +140,20 @@
                 }
             }
             mService = service;
+            if (service != null) {
+                mServiceSet.open();
+            }
             if (mSessionServiceCallback != null) {
                 mSessionServiceCallback.onCreated();
             }
         }
     }
 
-    public MediaSessionService getServiceInstance() {
+    public MediaSessionService getServiceInstanceBlocking() throws TimeoutException {
+        if (!mServiceSet.block(5_000)) {
+            throw new TimeoutException(
+                    "Timed out waiting for TestServiceRegistry.setServiceInstance() to be called.");
+        }
         synchronized (TestServiceRegistry.class) {
             return mService;
         }
@@ -162,6 +178,7 @@
                 // bindService() exists, and close() above will do the job instead.
                 // So stopSelf() isn't really needed, but just for sure.
                 mService.stopSelf();
+                mServiceSet.close();
                 mService = null;
             } else if (DEBUG) {
                 Log.d(TAG, "cleanUp(): service=" + mService);
diff --git a/media2/media2-session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionServiceTest.java b/media2/media2-session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionServiceTest.java
index 88ba6cf..0341a15 100644
--- a/media2/media2-session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionServiceTest.java
+++ b/media2/media2-session/version-compat-tests/previous/service/src/androidTest/java/androidx/media2/test/service/tests/MediaSessionServiceTest.java
@@ -274,9 +274,10 @@
     }
 
     @Test
-    public void getSessions() throws InterruptedException {
+    public void getSessions() throws Exception {
         RemoteMediaController controller = createRemoteController(mToken, true, null);
-        MediaSessionService service = TestServiceRegistry.getInstance().getServiceInstance();
+        MediaSessionService service =
+                TestServiceRegistry.getInstance().getServiceInstanceBlocking();
         try (MediaSession session = createMediaSession("testGetSessions")) {
             service.addSession(session);
             List<MediaSession> sessions = service.getSessions();
@@ -290,9 +291,10 @@
     }
 
     @Test
-    public void addSessions_removedWhenClose() throws InterruptedException {
+    public void addSessions_removedWhenClose() throws Exception {
         RemoteMediaController controller = createRemoteController(mToken, true, null);
-        MediaSessionService service = TestServiceRegistry.getInstance().getServiceInstance();
+        MediaSessionService service =
+                TestServiceRegistry.getInstance().getServiceInstanceBlocking();
         try (MediaSession session = createMediaSession("testAddSessions_removedWhenClose")) {
             service.addSession(session);
             List<MediaSession> sessions = service.getSessions();
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/GlobalMediaRouter.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/GlobalMediaRouter.java
index 42ed24c..5ad04f2 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/GlobalMediaRouter.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/GlobalMediaRouter.java
@@ -419,14 +419,15 @@
             return;
         }
 
+        // Check whether the route comes from MediaRouter2. The SDK check is required to avoid a
+        // lint error but is not needed.
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
                 && route.getProviderInstance() == mMr2Provider
                 && mSelectedRoute != route) {
-            // Asynchronously select the route
             mMr2Provider.transferTo(route.getDescriptorId());
-            return;
+        } else {
+            selectRouteInternal(route, unselectReason);
         }
-        selectRouteInternal(route, unselectReason);
     }
 
     /* package */ boolean isRouteAvailable(MediaRouteSelector selector, int flags) {
diff --git a/navigation/integration-tests/testapp/build.gradle b/navigation/integration-tests/testapp/build.gradle
index 2207e44..d1917b0 100644
--- a/navigation/integration-tests/testapp/build.gradle
+++ b/navigation/integration-tests/testapp/build.gradle
@@ -30,6 +30,8 @@
 dependencies {
     implementation(libs.kotlinStdlib)
     implementation("androidx.appcompat:appcompat:1.1.0")
+    api(project(":fragment:fragment-ktx"))
+    api(project(":transition:transition-ktx"))
     implementation(project(":navigation:navigation-fragment-ktx"))
     implementation(project(":navigation:navigation-ui-ktx"))
     implementation(project(":internal-testutils-navigation"), {
diff --git a/navigation/integration-tests/testapp/src/main/AndroidManifest.xml b/navigation/integration-tests/testapp/src/main/AndroidManifest.xml
index 758133b..e38c49d 100644
--- a/navigation/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/navigation/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -20,6 +20,7 @@
         android:label="@string/app_name"
         android:supportsRtl="true"
         android:theme="@style/AppTheme"
+        android:enableOnBackInvokedCallback="true"
         tools:ignore="AllowBackup,GoogleAppIndexingWarning,MissingApplicationIcon">
         <activity android:name=".NavigationActivity" android:exported="true">
             <intent-filter>
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavArgument.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavArgument.kt
index d8903e8..741e07b 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavArgument.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavArgument.kt
@@ -57,7 +57,6 @@
      */
     public val defaultValue: Any?
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public fun putDefaultValue(name: String, bundle: Bundle) {
         if (isDefaultValuePresent) {
@@ -65,7 +64,6 @@
         }
     }
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     @Suppress("DEPRECATION")
     public fun verify(name: String, bundle: Bundle): Boolean {
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt
index 0d605ee..daf2dad 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt
@@ -150,7 +150,6 @@
     override val lifecycle: Lifecycle
         get() = _lifecycle
 
-    /** @suppress */
     @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     @set:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public var maxLifecycle: Lifecycle.State = Lifecycle.State.INITIALIZED
@@ -159,7 +158,6 @@
             updateState()
         }
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public fun handleLifecycleEvent(event: Lifecycle.Event) {
         hostLifecycleState = event.targetState
@@ -168,7 +166,6 @@
 
     /**
      * Update the state to be the lower of the two constraints:
-     * @suppress
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public fun updateState() {
@@ -233,7 +230,6 @@
     override val savedStateRegistry: SavedStateRegistry
         get() = savedStateRegistryController.savedStateRegistry
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public fun saveState(outBundle: Bundle) {
         savedStateRegistryController.performSave(outBundle)
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLink.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLink.kt
index e589268..9f25178 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLink.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLink.kt
@@ -85,12 +85,10 @@
         get() = pathArgs + queryArgsMap.values.flatMap { it.arguments } + fragArgs
 
     public var isExactDeepLink: Boolean = false
-        /** @suppress */
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         get
         internal set
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public constructor(uri: String) : this(uri, null, null)
 
@@ -155,7 +153,6 @@
         // If both are null return true, otherwise see if they match
     }
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public fun getMimeTypeMatchRating(mimeType: String): Int {
         return if (this.mimeType == null || !mimeTypePattern!!.matcher(mimeType).matches()) {
@@ -166,7 +163,6 @@
 
     @Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS", "NullableCollection")
     /** Pattern.compile has no nullability for the regex parameter
-     * @suppress
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public fun getMatchingArguments(
@@ -435,7 +431,6 @@
      */
     public class Builder {
 
-        /** @suppress */
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         public constructor()
 
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLinkRequest.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLinkRequest.kt
index 5580a5d..213b3eb 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLinkRequest.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLinkRequest.kt
@@ -31,7 +31,6 @@
     public open val uri: Uri?
     public open val action: String?
     public open val mimeType: String?
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     constructor(
         /**
@@ -54,7 +53,6 @@
         mimeType: String?
     ) { this.uri = uri; this.action = action; this.mimeType = mimeType }
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public constructor(intent: Intent) : this(intent.data, intent.action, intent.type)
 
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavDestination.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavDestination.kt
index 81ce6af..abcfb95 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavDestination.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavDestination.kt
@@ -64,7 +64,6 @@
     @Target(AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS)
     public annotation class ClassType(val value: KClass<*>)
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public class DeepLinkMatch(
         public val destination: NavDestination,
@@ -143,7 +142,6 @@
      * destination is added to a NavGraph via [NavGraph.addDestination].
      */
     public var parent: NavGraph? = null
-        /** @suppress */
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         public set
     private var idName: String? = null
@@ -382,7 +380,6 @@
      * [addDeepLink]
      * @return The matching [NavDestination] and the appropriate [Bundle] of arguments
      * extracted from the Uri, or null if no match was found.
-     * @suppress
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public open fun matchDeepLink(navDeepLinkRequest: NavDeepLinkRequest): DeepLinkMatch? {
@@ -436,7 +433,6 @@
      * @param previousDestination the previous destination we are starting at
      * @return An array containing all of the ids from the previous destination (or the root of
      * the graph if null) to this destination
-     * @suppress
      */
     @JvmOverloads
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -501,7 +497,6 @@
     /**
      * @return Whether this NavDestination supports outgoing actions
      * @see NavDestination.putAction
-     * @suppress
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public open fun supportsActions(): Boolean {
@@ -584,7 +579,6 @@
      * Combines the default arguments for this destination with the arguments provided
      * to construct the final set of arguments that should be used to navigate
      * to this destination.
-     * @suppress
      */
     @Suppress("NullableCollection") // Needed for nullable bundle
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -772,7 +766,6 @@
 
         /**
          * Used internally for NavDestinationTest
-         * @suppress
          */
         @JvmStatic
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavGraph.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavGraph.kt
index f05a46d..6bc1925 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavGraph.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavGraph.kt
@@ -45,7 +45,6 @@
     NavDestination(navGraphNavigator), Iterable<NavDestination> {
 
     public val nodes: SparseArrayCompat<NavDestination> = SparseArrayCompat<NavDestination>()
-        /** @suppress */
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         get
     private var startDestId = 0
@@ -62,7 +61,6 @@
         }
     }
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public override fun matchDeepLink(navDeepLinkRequest: NavDeepLinkRequest): DeepLinkMatch? {
         // First search through any deep links directly added to this NavGraph
@@ -353,7 +351,6 @@
         }
 
     public val startDestDisplayName: String
-        /** @suppress */
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         get() {
             if (startDestIdName == null) {
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavType.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavType.kt
index e2cf543..4b367cc 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavType.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavType.kt
@@ -88,7 +88,6 @@
      * @param key    bundle key under which to put the value
      * @param value  string representation of a value of this type
      * @return parsed value of the type represented by this NavType
-     * @suppress
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public fun parseAndPut(bundle: Bundle, key: String, value: String): T {
@@ -107,7 +106,6 @@
      * @param value  string representation of a value of this type
      * @param previousValue previously parsed value of this type
      * @return combined parsed value of the type represented by this NavType
-     * @suppress
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public fun parseAndPut(bundle: Bundle, key: String, value: String?, previousValue: T): T {
@@ -222,7 +220,6 @@
             return StringType
         }
 
-        /** @suppress */
         @Suppress("UNCHECKED_CAST") // needed for cast to NavType<Any>
         @JvmStatic
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -259,7 +256,6 @@
         /**
          * @param value nothing
          * @throws IllegalArgumentException not real
-         * @suppress
          */
         @Suppress("UNCHECKED_CAST") // needed for cast to NavType<Any>
         @JvmStatic
diff --git a/navigation/navigation-compose/integration-tests/navigation-demos/lint-baseline.xml b/navigation/navigation-compose/integration-tests/navigation-demos/lint-baseline.xml
index a83a35d..7c35642 100644
--- a/navigation/navigation-compose/integration-tests/navigation-demos/lint-baseline.xml
+++ b/navigation/navigation-compose/integration-tests/navigation-demos/lint-baseline.xml
@@ -1,5 +1,50 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="cli" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="data class ViewInfo("
+        errorLine2="           ~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class ComposeViewAdapter : FrameLayout {"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="    internal lateinit var clock: PreviewAnimationClock"
+        errorLine2="                          ~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="    fun hasAnimations() = hasAnimations"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class PreviewActivity : ComponentActivity() {"
+        errorLine2="      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/PreviewActivity.kt"/>
+    </issue>
 
     <issue
         id="BanThreadSleep"
diff --git a/navigation/navigation-runtime/src/main/java/androidx/navigation/ActivityNavigator.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/ActivityNavigator.kt
index 4541c3a..32e6f25 100644
--- a/navigation/navigation-runtime/src/main/java/androidx/navigation/ActivityNavigator.kt
+++ b/navigation/navigation-runtime/src/main/java/androidx/navigation/ActivityNavigator.kt
@@ -36,7 +36,6 @@
  */
 @Navigator.Name("activity")
 public open class ActivityNavigator(
-    /** @suppress */
     @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public val context: Context
 ) : Navigator<ActivityNavigator.Destination>() {
@@ -400,7 +399,6 @@
             return this
         }
 
-        /** @suppress */
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         public override fun supportsActions(): Boolean {
             return false
diff --git a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
index 4176c33..1c55b20 100644
--- a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
+++ b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
@@ -66,7 +66,6 @@
  * from a remote server.)
  */
 public open class NavController(
-    /** @suppress */
     @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public val context: Context
 ) {
@@ -1508,7 +1507,6 @@
             return currentBackStackEntry?.destination
         }
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public fun findDestination(@IdRes destinationId: Int): NavDestination? {
         if (_graph == null) {
@@ -1529,7 +1527,6 @@
         return currentGraph.findNode(destinationId)
     }
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public fun findDestination(route: String): NavDestination? {
         if (_graph == null) {
@@ -2322,7 +2319,6 @@
         deepLinkHandled = navState.getBoolean(KEY_DEEP_LINK_HANDLED)
     }
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public open fun setLifecycleOwner(owner: LifecycleOwner) {
         if (owner == lifecycleOwner) {
@@ -2333,7 +2329,6 @@
         owner.lifecycle.addObserver(lifecycleObserver)
     }
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public open fun setOnBackPressedDispatcher(dispatcher: OnBackPressedDispatcher) {
         if (dispatcher == onBackPressedDispatcher) {
@@ -2356,7 +2351,6 @@
         }
     }
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public open fun enableOnBackPressed(enabled: Boolean) {
         enableOnBackPressedCallback = enabled
@@ -2369,7 +2363,6 @@
             )
     }
 
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public open fun setViewModelStore(viewModelStore: ViewModelStore) {
         if (viewModel == NavControllerViewModel.getInstance(viewModelStore)) {
@@ -2496,19 +2489,15 @@
             "android-support-nav:controller:backStackStates"
         private const val KEY_BACK_STACK_STATES_PREFIX =
             "android-support-nav:controller:backStackStates:"
-        /** @suppress */
-        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+        @field:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         public const val KEY_DEEP_LINK_IDS: String = "android-support-nav:controller:deepLinkIds"
-        /** @suppress */
-        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+        @field:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         public const val KEY_DEEP_LINK_ARGS: String = "android-support-nav:controller:deepLinkArgs"
-        /** @suppress */
-        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+        @field:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         @Suppress("IntentName")
         public const val KEY_DEEP_LINK_EXTRAS: String =
             "android-support-nav:controller:deepLinkExtras"
-        /** @suppress */
-        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+        @field:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         public const val KEY_DEEP_LINK_HANDLED: String =
             "android-support-nav:controller:deepLinkHandled"
 
diff --git a/navigation/navigation-ui/src/main/java/androidx/navigation/ui/NavigationUI.kt b/navigation/navigation-ui/src/main/java/androidx/navigation/ui/NavigationUI.kt
index ae44366..3881c55 100644
--- a/navigation/navigation-ui/src/main/java/androidx/navigation/ui/NavigationUI.kt
+++ b/navigation/navigation-ui/src/main/java/androidx/navigation/ui/NavigationUI.kt
@@ -587,7 +587,6 @@
     /**
      * Walks up the view hierarchy, trying to determine if the given View is contained within
      * a bottom sheet.
-     * @suppress
      */
     @JvmStatic
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
diff --git a/paging/paging-common/api/current.txt b/paging/paging-common/api/current.txt
index dfd8bc1..0b54890 100644
--- a/paging/paging-common/api/current.txt
+++ b/paging/paging-common/api/current.txt
@@ -210,6 +210,7 @@
     property @Deprecated public final int loadedCount;
     property @Deprecated public final int positionOffset;
     property @Deprecated public int size;
+    field @Deprecated public static final androidx.paging.PagedList.Companion Companion;
   }
 
   @Deprecated @MainThread public abstract static class PagedList.BoundaryCallback<T> {
@@ -241,6 +242,9 @@
     method @Deprecated public abstract void onRemoved(int position, int count);
   }
 
+  @Deprecated public static final class PagedList.Companion {
+  }
+
   @Deprecated public static final class PagedList.Config {
     field @Deprecated public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
     field @Deprecated public final boolean enablePlaceholders;
@@ -444,6 +448,12 @@
     method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> map(kotlin.jvm.functions.Function1<? super T,? extends V> function);
     method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> mapByPage(androidx.arch.core.util.Function<java.util.List<T>,java.util.List<V>> function);
     method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> mapByPage(kotlin.jvm.functions.Function1<? super java.util.List<? extends T>,? extends java.util.List<? extends V>> function);
+    field @Deprecated public static final androidx.paging.PositionalDataSource.Companion Companion;
+  }
+
+  @Deprecated public static final class PositionalDataSource.Companion {
+    method @Deprecated public int computeInitialLoadPosition(androidx.paging.PositionalDataSource.LoadInitialParams params, int totalCount);
+    method @Deprecated public int computeInitialLoadSize(androidx.paging.PositionalDataSource.LoadInitialParams params, int initialLoadPosition, int totalCount);
   }
 
   @Deprecated public abstract static class PositionalDataSource.LoadInitialCallback<T> {
diff --git a/paging/paging-common/api/restricted_current.txt b/paging/paging-common/api/restricted_current.txt
index dfd8bc1..0b54890 100644
--- a/paging/paging-common/api/restricted_current.txt
+++ b/paging/paging-common/api/restricted_current.txt
@@ -210,6 +210,7 @@
     property @Deprecated public final int loadedCount;
     property @Deprecated public final int positionOffset;
     property @Deprecated public int size;
+    field @Deprecated public static final androidx.paging.PagedList.Companion Companion;
   }
 
   @Deprecated @MainThread public abstract static class PagedList.BoundaryCallback<T> {
@@ -241,6 +242,9 @@
     method @Deprecated public abstract void onRemoved(int position, int count);
   }
 
+  @Deprecated public static final class PagedList.Companion {
+  }
+
   @Deprecated public static final class PagedList.Config {
     field @Deprecated public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
     field @Deprecated public final boolean enablePlaceholders;
@@ -444,6 +448,12 @@
     method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> map(kotlin.jvm.functions.Function1<? super T,? extends V> function);
     method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> mapByPage(androidx.arch.core.util.Function<java.util.List<T>,java.util.List<V>> function);
     method @Deprecated public final <V> androidx.paging.PositionalDataSource<V> mapByPage(kotlin.jvm.functions.Function1<? super java.util.List<? extends T>,? extends java.util.List<? extends V>> function);
+    field @Deprecated public static final androidx.paging.PositionalDataSource.Companion Companion;
+  }
+
+  @Deprecated public static final class PositionalDataSource.Companion {
+    method @Deprecated public int computeInitialLoadPosition(androidx.paging.PositionalDataSource.LoadInitialParams params, int totalCount);
+    method @Deprecated public int computeInitialLoadSize(androidx.paging.PositionalDataSource.LoadInitialParams params, int initialLoadPosition, int totalCount);
   }
 
   @Deprecated public abstract static class PositionalDataSource.LoadInitialCallback<T> {
diff --git a/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/ContiguousPagedList.jvm.kt b/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/ContiguousPagedList.jvm.kt
index 777d96a..56ecfe8 100644
--- a/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/ContiguousPagedList.jvm.kt
+++ b/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/ContiguousPagedList.jvm.kt
@@ -29,9 +29,6 @@
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
 
-/**
- * @suppress
- */
 @Suppress("DEPRECATION")
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public open class ContiguousPagedList<K : Any, V : Any>(
diff --git a/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/InitialPagedList.jvm.kt b/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/InitialPagedList.jvm.kt
index 2d8a1c5..fc00fa4 100644
--- a/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/InitialPagedList.jvm.kt
+++ b/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/InitialPagedList.jvm.kt
@@ -26,7 +26,6 @@
  * It's used solely for listening to [LoadType.REFRESH] loading events, and retrying
  * any errors that occur during initial load.
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public class InitialPagedList<K : Any, V : Any>(
diff --git a/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PagedList.kt b/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PagedList.kt
index 2a5d881..547c8ac 100644
--- a/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PagedList.kt
+++ b/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PagedList.kt
@@ -120,7 +120,6 @@
     /**
      * The [PagingSource] that provides data to this [PagedList].
      *
-     * @suppress
      */
     @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public open val pagingSource: PagingSource<*, T>,
@@ -135,10 +134,6 @@
      */
     public val config: Config
 ) : AbstractList<T>() {
-    /**
-     * @suppress
-     */
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public companion object {
         /**
          * Create a [PagedList] which loads data from the provided data source on a background
@@ -157,7 +152,6 @@
          * @return The newly created [PagedList], which will page in data from the [PagingSource] as
          * needed.
          *
-         * @suppress
          */
         @JvmStatic
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -901,9 +895,6 @@
         public open fun onItemAtEndLoaded(itemAtEnd: T) {}
     }
 
-    /**
-     * @suppress
-     */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public abstract class LoadStateManager {
         public var refreshState: LoadState = LoadState.NotLoading.Incomplete
@@ -930,9 +921,6 @@
             onStateChanged(type, state)
         }
 
-        /**
-         * @suppress
-         */
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) // protected otherwise.
         public abstract fun onStateChanged(type: LoadType, state: LoadState)
 
@@ -943,9 +931,6 @@
         }
     }
 
-    /**
-     * @suppress
-     */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) // protected otherwise
     public fun getNullPaddedList(): NullPaddedList<T> = storage
 
@@ -956,7 +941,6 @@
      *
      * Used by list diffing to re-initialize loading near viewport.
      *
-     * @suppress
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public fun lastLoad(): Int = storage.lastLoadAroundIndex
@@ -1022,15 +1006,9 @@
      */
     public abstract val isDetached: Boolean
 
-    /**
-     * @suppress
-     */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     public abstract fun dispatchCurrentLoadState(callback: (LoadType, LoadState) -> Unit)
 
-    /**
-     * @suppress
-     */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     public abstract fun loadAroundInternal(index: Int)
 
@@ -1083,9 +1061,6 @@
     public val positionOffset: Int
         get() = storage.positionOffset
 
-    /**
-     * @suppress
-     */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public open fun setInitialLoadState(loadType: LoadType, loadState: LoadState) {
     }
@@ -1105,9 +1080,6 @@
      */
     public open fun retry() {}
 
-    /**
-     * @suppress
-     */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     public fun setRetryCallback(refreshRetryCallback: Runnable?) {
         this.refreshRetryCallback = refreshRetryCallback
@@ -1257,18 +1229,12 @@
         callbacks.reversed().forEach { it.get()?.onInserted(position, count) }
     }
 
-    /**
-     * @suppress
-     */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     public fun notifyChanged(position: Int, count: Int) {
         if (count == 0) return
         callbacks.reversed().forEach { it.get()?.onChanged(position, count) }
     }
 
-    /**
-     * @suppress
-     */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     public fun notifyRemoved(position: Int, count: Int) {
         if (count == 0) return
@@ -1312,7 +1278,6 @@
         .build()
 }
 
-/** @suppress */
 @Suppress("DEPRECATION")
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public fun <Key : Any> PagedList.Config.toRefreshLoadParams(
diff --git a/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PagedStorage.jvm.kt b/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PagedStorage.jvm.kt
index cb25e20..55d8e5c 100644
--- a/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PagedStorage.jvm.kt
+++ b/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PagedStorage.jvm.kt
@@ -108,9 +108,6 @@
         lastLoadAroundLocalIndex = page.data.size / 2
     }
 
-    /**
-     * @suppress
-     */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     fun init(
         leadingNulls: Int,
@@ -206,9 +203,6 @@
         }
     }
 
-    /**
-     * @suppress
-     */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     interface Callback {
         fun onInitialized(count: Int)
diff --git a/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PositionalDataSource.jvm.kt b/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PositionalDataSource.jvm.kt
index 134a223..3ef7545 100644
--- a/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PositionalDataSource.jvm.kt
+++ b/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PositionalDataSource.jvm.kt
@@ -16,7 +16,6 @@
 
 package androidx.paging
 
-import androidx.annotation.RestrictTo
 import androidx.annotation.VisibleForTesting
 import androidx.annotation.WorkerThread
 import androidx.arch.core.util.Function
@@ -192,10 +191,6 @@
         public abstract fun onResult(data: List<T>)
     }
 
-    /**
-     * @suppress
-     */
-    @RestrictTo(RestrictTo.Scope.LIBRARY)
     public companion object {
         /**
          * Helper for computing an initial position in [loadInitial] when total data set size can be
diff --git a/paging/paging-common/src/commonMain/kotlin/androidx/paging/LoadStates.kt b/paging/paging-common/src/commonMain/kotlin/androidx/paging/LoadStates.kt
index 8a55b0a..442148f 100644
--- a/paging/paging-common/src/commonMain/kotlin/androidx/paging/LoadStates.kt
+++ b/paging/paging-common/src/commonMain/kotlin/androidx/paging/LoadStates.kt
@@ -30,7 +30,6 @@
     /** [LoadState] corresponding to [LoadType.APPEND] loads. */
     public val append: LoadState
 ) {
-    /** @suppress */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public inline fun forEach(op: (LoadType, LoadState) -> Unit) {
         op(LoadType.REFRESH, refresh)
diff --git a/paging/paging-common/src/commonMain/kotlin/androidx/paging/NullPaddedList.kt b/paging/paging-common/src/commonMain/kotlin/androidx/paging/NullPaddedList.kt
index 63cc7e2f..e5b19f0 100644
--- a/paging/paging-common/src/commonMain/kotlin/androidx/paging/NullPaddedList.kt
+++ b/paging/paging-common/src/commonMain/kotlin/androidx/paging/NullPaddedList.kt
@@ -22,8 +22,6 @@
  * Interface to partially-loaded, paged data (generally an immutable snapshot).
  *
  * Used for diffing in paging-runtime.
- *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public interface NullPaddedList<T> {
diff --git a/paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataDiffer.kt b/paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataDiffer.kt
index 3ecc556..6ce5871 100644
--- a/paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataDiffer.kt
+++ b/paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataDiffer.kt
@@ -39,7 +39,6 @@
 import kotlinx.coroutines.withContext
 import kotlinx.coroutines.yield
 
-/** @suppress */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public abstract class PagingDataDiffer<T : Any>(
     private val differCallback: DifferCallback,
@@ -524,7 +523,6 @@
  * events that should all be dispatched to the presentation layer at once - as part of the same
  * frame.
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public interface DifferCallback {
diff --git a/paging/paging-compose/integration-tests/paging-demos/lint-baseline.xml b/paging/paging-compose/integration-tests/paging-demos/lint-baseline.xml
index a83a35d..7c35642 100644
--- a/paging/paging-compose/integration-tests/paging-demos/lint-baseline.xml
+++ b/paging/paging-compose/integration-tests/paging-demos/lint-baseline.xml
@@ -1,5 +1,50 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="cli" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="data class ViewInfo("
+        errorLine2="           ~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class ComposeViewAdapter : FrameLayout {"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="    internal lateinit var clock: PreviewAnimationClock"
+        errorLine2="                          ~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="    fun hasAnimations() = hasAnimations"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="class PreviewActivity : ComponentActivity() {"
+        errorLine2="      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/PreviewActivity.kt"/>
+    </issue>
 
     <issue
         id="BanThreadSleep"
diff --git a/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/internal/AdServicesInfo.kt b/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/internal/AdServicesInfo.kt
index 91ec283..9b36692 100644
--- a/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/internal/AdServicesInfo.kt
+++ b/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/internal/AdServicesInfo.kt
@@ -24,8 +24,6 @@
 /**
  * Temporary replacement for BuildCompat.AD_SERVICES_EXTENSION_INT.
  * TODO(b/261755947) Replace with AD_SERVICES_EXTENSION_INT after new core library release
- *
- * @suppress
  */
 internal object AdServicesInfo {
 
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/config/LocalSdkConfigsHolder.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/config/LocalSdkConfigsHolder.kt
index c97df47..572fcb4 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/config/LocalSdkConfigsHolder.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/config/LocalSdkConfigsHolder.kt
@@ -16,15 +16,12 @@
 package androidx.privacysandbox.sdkruntime.client.config
 
 import android.content.Context
-import androidx.annotation.RestrictTo
 import java.io.FileNotFoundException
 
 /**
  * Holds information about all SDKs bundled with App.
  *
- * @suppress
  */
-@RestrictTo(RestrictTo.Scope.LIBRARY)
 internal class LocalSdkConfigsHolder private constructor(
     private val configs: Map<String, LocalSdkConfig>
 ) {
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/config/SdkTableConfigParser.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/config/SdkTableConfigParser.kt
index 0b64d5a..8d244f4 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/config/SdkTableConfigParser.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/config/SdkTableConfigParser.kt
@@ -16,7 +16,6 @@
 package androidx.privacysandbox.sdkruntime.client.config
 
 import android.util.Xml
-import androidx.annotation.RestrictTo
 import java.io.InputStream
 import org.xmlpull.v1.XmlPullParser
 import org.xmlpull.v1.XmlPullParser.END_TAG
@@ -40,9 +39,7 @@
  *     </runtime-enabled-sdk>
  * </runtime-enabled-sdk-table>
  *
- * @suppress
  */
-@RestrictTo(RestrictTo.Scope.LIBRARY)
 internal class SdkTableConfigParser private constructor(
     private val xmlParser: XmlPullParser
 ) {
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/config/XmlUtils.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/config/XmlUtils.kt
index 6a91815..00e7450 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/config/XmlUtils.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/config/XmlUtils.kt
@@ -14,11 +14,8 @@
  * limitations under the License.
  */
 
-@file:RestrictTo(RestrictTo.Scope.LIBRARY)
-
 package androidx.privacysandbox.sdkruntime.client.config
 
-import androidx.annotation.RestrictTo
 import org.xmlpull.v1.XmlPullParser
 import org.xmlpull.v1.XmlPullParser.END_TAG
 import org.xmlpull.v1.XmlPullParser.START_TAG
@@ -26,7 +23,6 @@
 /**
  * Skip current tag (including inner tags)
  *
- * @suppress
  */
 internal fun XmlPullParser.skipCurrentTag() {
     require(START_TAG, null, null)
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProvider.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProvider.kt
index 08cfb5c..ecd3cdc 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProvider.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProvider.kt
@@ -16,7 +16,6 @@
 package androidx.privacysandbox.sdkruntime.client.loader
 
 import android.os.Bundle
-import androidx.annotation.RestrictTo
 import androidx.privacysandbox.sdkruntime.core.SandboxedSdkCompat
 import org.jetbrains.annotations.TestOnly
 
@@ -24,9 +23,7 @@
  * Provides interface for interaction with locally loaded SDK.
  * Handle different protocol versions inside.
  *
- * @suppress
  */
-@RestrictTo(RestrictTo.Scope.LIBRARY)
 internal abstract class LocalSdkProvider protected constructor(
     @get:TestOnly val sdkProvider: Any
 ) {
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/VersionHandshake.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/VersionHandshake.kt
index a233a52..f9e7cca 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/VersionHandshake.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/VersionHandshake.kt
@@ -16,15 +16,12 @@
 package androidx.privacysandbox.sdkruntime.client.loader
 
 import android.annotation.SuppressLint
-import androidx.annotation.RestrictTo
 import androidx.privacysandbox.sdkruntime.core.Versions
 
 /**
  * Performing version handshake.
  *
- * @suppress
  */
-@RestrictTo(RestrictTo.Scope.LIBRARY)
 internal object VersionHandshake {
     @SuppressLint("BanUncheckedReflection") // calling method on Versions class
     fun perform(classLoader: ClassLoader?): Int {
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/impl/SdkProviderV1.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/impl/SdkProviderV1.kt
index 2860872..ba7f75a 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/impl/SdkProviderV1.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/main/java/androidx/privacysandbox/sdkruntime/client/loader/impl/SdkProviderV1.kt
@@ -19,7 +19,6 @@
 import android.content.Context
 import android.os.Bundle
 import android.os.IBinder
-import androidx.annotation.RestrictTo
 import androidx.privacysandbox.sdkruntime.client.config.LocalSdkConfig
 import androidx.privacysandbox.sdkruntime.client.loader.LocalSdkProvider
 import androidx.privacysandbox.sdkruntime.core.LoadSdkCompatException
@@ -31,9 +30,7 @@
 /**
  * Provides interface for interaction with locally loaded SDK with ApiVersion 1.
  *
- * @suppress
  */
-@RestrictTo(RestrictTo.Scope.LIBRARY)
 internal class SdkProviderV1 private constructor(
     sdkProvider: Any,
 
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/AdServicesInfo.kt b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/AdServicesInfo.kt
index 4a5d739..f10c07b 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/AdServicesInfo.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/AdServicesInfo.kt
@@ -27,7 +27,6 @@
  * Temporary replacement for BuildCompat.AD_SERVICES_EXTENSION_INT.
  * TODO(b/249981547) Replace with AD_SERVICES_EXTENSION_INT after new core library release
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 object AdServicesInfo {
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/LoadSdkCompatException.kt b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/LoadSdkCompatException.kt
index 9f4640e..8fcdc0f 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/LoadSdkCompatException.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/LoadSdkCompatException.kt
@@ -57,7 +57,6 @@
      * @param cause The cause of the exception. A null value is permitted, and indicates that the
      *  cause is nonexistent or unknown.
      * @param extraInformation Extra error information. This is empty if there is no such information.
-     * @suppress
      */
     @RestrictTo(LIBRARY_GROUP)
     @JvmOverloads
@@ -76,7 +75,6 @@
      *
      * @param loadSdkErrorCode The result code.
      * @param message The detailed message.
-     * @suppress
      */
     @RestrictTo(LIBRARY_GROUP)
     constructor(
@@ -95,7 +93,6 @@
         extraInfo: Bundle
     ) : this(LOAD_SDK_SDK_DEFINED_ERROR, "", cause, extraInfo)
 
-    /** @suppress */
     @IntDef(
         SDK_SANDBOX_PROCESS_NOT_AVAILABLE,
         LOAD_SDK_NOT_FOUND,
@@ -213,7 +210,6 @@
          *
          *  @param ex Platform exception
          *  @return Compat exception.
-         *  @suppress
          */
         @RequiresExtension(extension = AD_SERVICES, version = 4)
         @RestrictTo(LIBRARY_GROUP)
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/SandboxedSdkCompat.kt b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/SandboxedSdkCompat.kt
index 2d55aff..9ac2a6f 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/SandboxedSdkCompat.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/SandboxedSdkCompat.kt
@@ -60,7 +60,6 @@
      *
      * @param sdkInterface The SDK's interface.
      * @param sdkInfo Information about SDK's name and version.
-     * @suppress
      */
     @Keep // Reflection call from client part
     @RestrictTo(LIBRARY_GROUP)
@@ -73,7 +72,6 @@
      * Creates SandboxedSdkCompat wrapper around existing [SandboxedSdk] object.
      *
      * @param sandboxedSdk SandboxedSdk object. All calls will be delegated to that object.
-     * @suppress
      */
     @RequiresExtension(extension = AD_SERVICES, version = 4)
     @RestrictTo(LIBRARY_GROUP)
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/Versions.kt b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/Versions.kt
index b8818b2..a8b13ef2 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/Versions.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/Versions.kt
@@ -24,7 +24,6 @@
  * Store internal API version (for Client-Core communication).
  * Methods invoked via reflection.
  *
- * @suppress
  */
 @Suppress("unused")
 @Keep
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/controller/SdkSandboxControllerCompat.kt b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/controller/SdkSandboxControllerCompat.kt
index bcc649f..a446171 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/controller/SdkSandboxControllerCompat.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-core/src/main/java/androidx/privacysandbox/sdkruntime/core/controller/SdkSandboxControllerCompat.kt
@@ -100,7 +100,6 @@
     fun unregisterSdkSandboxActivityHandler(handlerCompat: SdkSandboxActivityHandlerCompat) =
         controllerImpl.unregisterSdkSandboxActivityHandler(handlerCompat)
 
-    /** @suppress */
     @RestrictTo(LIBRARY_GROUP)
     interface SandboxControllerImpl {
         fun getSandboxedSdks(): List<SandboxedSdkCompat>
@@ -145,7 +144,6 @@
          * Implementation will be used only if loaded locally.
          * This method will be called from client side via reflection during loading SDK.
          *
-         * @suppress
          */
         @JvmStatic
         @Keep
diff --git a/privacysandbox/tools/tools/src/main/java/androidx/privacysandbox/tools/internal/GeneratedPublicApi.kt b/privacysandbox/tools/tools/src/main/java/androidx/privacysandbox/tools/internal/GeneratedPublicApi.kt
index 98f8cf8..407b429 100644
--- a/privacysandbox/tools/tools/src/main/java/androidx/privacysandbox/tools/internal/GeneratedPublicApi.kt
+++ b/privacysandbox/tools/tools/src/main/java/androidx/privacysandbox/tools/internal/GeneratedPublicApi.kt
@@ -25,8 +25,6 @@
  * The API Packager will include these classes in the API descriptors.
  *
  * THIS ANNOTATION IS FOR INTERNAL USAGE ONLY.
- *
- * @suppress
  */
 @Retention(AnnotationRetention.BINARY)
 @Target(AnnotationTarget.CLASS)
diff --git a/privacysandbox/ui/ui-core/src/main/java/androidx/privacysandbox/ui/core/ProtocolConstants.kt b/privacysandbox/ui/ui-core/src/main/java/androidx/privacysandbox/ui/core/ProtocolConstants.kt
index f46c1a2..8f480b4 100644
--- a/privacysandbox/ui/ui-core/src/main/java/androidx/privacysandbox/ui/core/ProtocolConstants.kt
+++ b/privacysandbox/ui/ui-core/src/main/java/androidx/privacysandbox/ui/core/ProtocolConstants.kt
@@ -22,8 +22,6 @@
  * Constants shared between UI library artifacts to establish an IPC protocol across library
  * versions. Adding new constants is allowed, but **never change the value of a constant**, or
  * you'll break binary compatibility between UI library versions.
- *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 object ProtocolConstants {
diff --git a/room/room-runtime/src/main/java/androidx/room/DatabaseConfiguration.kt b/room/room-runtime/src/main/java/androidx/room/DatabaseConfiguration.kt
index 239c47f..0d4aa4f 100644
--- a/room/room-runtime/src/main/java/androidx/room/DatabaseConfiguration.kt
+++ b/room/room-runtime/src/main/java/androidx/room/DatabaseConfiguration.kt
@@ -88,8 +88,6 @@
      * Intent that should be bound to acquire the invalidation service or `null` if not used.
      *
      * @see [multiInstanceInvalidation]
-     *
-     * @suppress
      */
     @field:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     @JvmField
@@ -144,7 +142,6 @@
      * @param migrationNotRequiredFrom The collection of schema versions from which migrations
      * aren't required.
      *
-     * @suppress
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     @Deprecated(
@@ -207,7 +204,6 @@
      * @param migrationNotRequiredFrom The collection of schema versions from which migrations
      * aren't required.
      *
-     * @suppress
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     @Deprecated(
@@ -278,7 +274,6 @@
      * @param copyFromAssetPath The assets path to the pre-packaged database.
      * @param copyFromFile The pre-packaged database file.
      *
-     * @suppress
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     @Deprecated(
@@ -353,7 +348,6 @@
      * @param copyFromInputStream The callable to get the input stream from which a
      * pre-package database file will be copied from.
      *
-     * @suppress
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     @Deprecated(
@@ -430,7 +424,6 @@
      * pre-package database file will be copied from.
      * @param prepackagedDatabaseCallback The pre-packaged callback.
      *
-     * @suppress
      */
     @SuppressLint("LambdaLast")
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@@ -510,7 +503,6 @@
      * @param prepackagedDatabaseCallback The pre-packaged callback.
      * @param typeConverters The type converters.
      *
-     * @suppress
      */
     @SuppressLint("LambdaLast")
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@@ -592,7 +584,6 @@
      * @param typeConverters The type converters.
      * @param autoMigrationSpecs The auto migration specs.
      *
-     * @suppress
      */
     @SuppressLint("LambdaLast")
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
diff --git a/room/room-runtime/src/main/java/androidx/room/EntityDeletionOrUpdateAdapter.kt b/room/room-runtime/src/main/java/androidx/room/EntityDeletionOrUpdateAdapter.kt
index 4773a8d..9bfd1d2 100644
--- a/room/room-runtime/src/main/java/androidx/room/EntityDeletionOrUpdateAdapter.kt
+++ b/room/room-runtime/src/main/java/androidx/room/EntityDeletionOrUpdateAdapter.kt
@@ -27,7 +27,6 @@
  * given database.
  *
  * @param T The type parameter of the entity to be deleted
- * @suppress
 */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 abstract class EntityDeletionOrUpdateAdapter<T> (
diff --git a/room/room-runtime/src/main/java/androidx/room/EntityInsertionAdapter.kt b/room/room-runtime/src/main/java/androidx/room/EntityInsertionAdapter.kt
index f83a77e..bee98b8 100644
--- a/room/room-runtime/src/main/java/androidx/room/EntityInsertionAdapter.kt
+++ b/room/room-runtime/src/main/java/androidx/room/EntityInsertionAdapter.kt
@@ -27,7 +27,6 @@
  * database.
  *
  * @param T The type parameter of the entity to be inserted
- * @suppress
 */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 abstract class EntityInsertionAdapter<T>(database: RoomDatabase) : SharedSQLiteStatement(database) {
diff --git a/room/room-runtime/src/main/java/androidx/room/SharedSQLiteStatement.kt b/room/room-runtime/src/main/java/androidx/room/SharedSQLiteStatement.kt
index db68fc5..710426d 100644
--- a/room/room-runtime/src/main/java/androidx/room/SharedSQLiteStatement.kt
+++ b/room/room-runtime/src/main/java/androidx/room/SharedSQLiteStatement.kt
@@ -31,7 +31,6 @@
  * @constructor Creates an SQLite prepared statement that can be re-used across threads. If it is
  * in use, it automatically creates a new one.
  *
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 abstract class SharedSQLiteStatement(private val database: RoomDatabase) {
diff --git a/text/text/lint-baseline.xml b/text/text/lint-baseline.xml
index ffc2908..823d7dd 100644
--- a/text/text/lint-baseline.xml
+++ b/text/text/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+<issues format="6" by="lint 8.1.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0)" variant="all" version="8.1.0">
 
     <issue
         id="BanInlineOptIn"
@@ -28,4 +28,202 @@
             file="src/main/java/androidx/compose/ui/text/android/TempListUtils.kt"/>
     </issue>
 
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal open class BaselineShiftSpan(val multiplier: Float) : MetricAffectingSpan() {"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/style/BaselineShiftSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class FontFeatureSpan(val fontFeatureSettings: String) : MetricAffectingSpan() {"
+        errorLine2="               ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/style/FontFeatureSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class IndentationFixSpan : LeadingMarginSpan {"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/style/IndentationFixSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal object LayoutCompat {"
+        errorLine2="                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal fun Layout.getLineForOffset(@IntRange(from = 0) offset: Int, upstream: Boolean): Int {"
+        errorLine2="                    ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class LayoutHelper(val layout: Layout) {"
+        errorLine2="               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class LayoutIntrinsics("
+        errorLine2="               ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/LayoutIntrinsics.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class LetterSpacingSpanEm(val letterSpacing: Float) : MetricAffectingSpan() {"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEm.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class LetterSpacingSpanPx(@Px val letterSpacing: Float) : MetricAffectingSpan() {"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPx.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class LineHeightSpan("
+        errorLine2="               ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/style/LineHeightSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class LineHeightStyleSpan("
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/style/LineHeightStyleSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class PlaceholderSpan("
+        errorLine2="               ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/style/PlaceholderSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal data class Segment("
+        errorLine2="                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal object SegmentBreaker {"
+        errorLine2="                ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="enum class SegmentType {"
+        errorLine2="           ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/animation/SegmentType.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class ShadowSpan("
+        errorLine2="               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/style/ShadowSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal open class SkewXSpan(val skewX: Float) : MetricAffectingSpan() {"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/style/SkewXSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="object StaticLayoutFactory {"
+        errorLine2="       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class TextDecorationSpan("
+        errorLine2="               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/style/TextDecorationSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class TextLayout constructor("
+        errorLine2="               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/TextLayout.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class TypefaceSpan(val typeface: Typeface) : MetricAffectingSpan() {"
+        errorLine2="               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/style/TypefaceSpan.kt"/>
+    </issue>
+
+    <issue
+        id="BanSuppressTag"
+        message="@suppress is not allowed in documentation"
+        errorLine1="internal class WordBoundary("
+        errorLine2="               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/android/selection/WordBoundary.kt"/>
+    </issue>
+
 </issues>
diff --git a/tv/integration-tests/playground/build.gradle b/tv/integration-tests/playground/build.gradle
index b1da39a..4970492 100644
--- a/tv/integration-tests/playground/build.gradle
+++ b/tv/integration-tests/playground/build.gradle
@@ -30,7 +30,7 @@
 
     implementation(project(":activity:activity-compose"))
     implementation(project(":compose:material3:material3"))
-    implementation(project(":navigation:navigation-runtime"))
+    implementation(project(":navigation:navigation-compose"))
     implementation(project(":profileinstaller:profileinstaller"))
 
     implementation(project(":tv:tv-foundation"))
@@ -42,7 +42,6 @@
     implementation(project(":compose:runtime:runtime"))
     implementation(project(":compose:ui:ui"))
     implementation(project(":compose:foundation:foundation-layout"))
-    implementation(project(":compose:ui:ui"))
 }
 
 androidx {
diff --git a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/App.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/App.kt
index 20ad0ae..c391c4f 100644
--- a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/App.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/App.kt
@@ -22,13 +22,12 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.unit.dp
+import androidx.navigation.compose.NavHost
+import androidx.navigation.compose.composable
+import androidx.navigation.compose.rememberNavController
 import androidx.tv.material3.ExperimentalTvMaterial3Api
 import androidx.tv.material3.MaterialTheme
 import androidx.tv.material3.darkColorScheme
@@ -38,7 +37,8 @@
 @OptIn(ExperimentalTvMaterial3Api::class)
 @Composable
 fun App() {
-    var selectedTab by remember { mutableStateOf(Navigation.FeaturedCarousel) }
+    val navController = rememberNavController()
+    val initialSelectedTab = Navigation.StandardNavigationDrawer
 
     MaterialTheme(colorScheme = darkColorScheme()) {
         Column(
@@ -48,8 +48,31 @@
                 .padding(20.dp),
             verticalArrangement = Arrangement.spacedBy(20.dp),
         ) {
-            TopNavigation(updateSelectedTab = { selectedTab = it })
-            selectedTab.action.invoke()
+            TopNavigation(
+                initialSelectedTab = initialSelectedTab,
+                updateSelectedTab = {
+                    if (it.toRouteValue() != navController.currentDestination?.route) {
+                        navController.navigate(it.toRouteValue()) {
+                            popUpTo(initialSelectedTab.toRouteValue()) {
+                                saveState = true
+                            }
+                            launchSingleTop = true
+                            restoreState = true
+                        }
+                    }
+                }
+            )
+
+            NavHost(
+                navController = navController,
+                startDestination = initialSelectedTab.toRouteValue()
+            ) {
+                Navigation.values().forEach { routeNavigation ->
+                    composable(routeNavigation.toRouteValue()) {
+                        routeNavigation.action()
+                    }
+                }
+            }
         }
     }
 }
diff --git a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TopNavigation.kt b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TopNavigation.kt
index d4b97c2..9ea77ed 100644
--- a/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TopNavigation.kt
+++ b/tv/integration-tests/playground/src/main/java/androidx/tv/integration/playground/TopNavigation.kt
@@ -44,15 +44,22 @@
     FeaturedCarousel("Featured Carousel", { FeaturedCarouselContent() }),
     ImmersiveList("Immersive List", { ImmersiveListContent() }),
     TextField("Text Field", { TextFieldContent() }),
-    StickyHeader("Sticky Header", { StickyHeaderContent() }),
+    StickyHeader("Sticky Header", { StickyHeaderContent() });
+
+    fun toRouteValue(): String {
+        return "/${displayName.lowercase().replace(' ', '-')}";
+    }
 }
 
 @Composable
 internal fun TopNavigation(
+    initialSelectedTab: Navigation,
     updateSelectedTab: (Navigation) -> Unit = {},
 ) {
-    var selectedTabIndex by remember { mutableStateOf(0) }
     val tabs = Navigation.values().map { it.displayName }
+    var selectedTabIndex by remember {
+        mutableStateOf(Navigation.values().indexOf(initialSelectedTab))
+    }
 
     // Pill indicator
     PillIndicatorTabRow(
diff --git a/viewpager2/integration-tests/targetsdk-tests/src/androidTest/kotlin/androidx/viewpager2/integration/targetsdktests/OnApplyWindowInsetsListenerTest.kt b/viewpager2/integration-tests/targetsdk-tests/src/androidTest/kotlin/androidx/viewpager2/integration/targetsdktests/OnApplyWindowInsetsListenerTest.kt
index 1a6f6cb..b7c00f4 100644
--- a/viewpager2/integration-tests/targetsdk-tests/src/androidTest/kotlin/androidx/viewpager2/integration/targetsdktests/OnApplyWindowInsetsListenerTest.kt
+++ b/viewpager2/integration-tests/targetsdk-tests/src/androidTest/kotlin/androidx/viewpager2/integration/targetsdktests/OnApplyWindowInsetsListenerTest.kt
@@ -42,6 +42,8 @@
 import org.hamcrest.CoreMatchers.equalTo
 import org.hamcrest.MatcherAssert.assertThat
 import org.junit.Assert.assertNotNull
+import org.junit.Assume
+import org.junit.BeforeClass
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -51,12 +53,21 @@
 @SdkSuppress(minSdkVersion = 30) // TODO(b/273945673): fix test on API 21..30
 @RunWith(Parameterized::class)
 class OnApplyWindowInsetsListenerTest(private val config: TestConfig) {
+
     data class TestConfig(
         val applyFix: Boolean,
         val pagesConsumeInsets: Boolean
     )
 
     companion object {
+        @JvmStatic
+        @BeforeClass
+        fun setUp() {
+            // Broken on UDC, but fixed on UDC-QPR; no easy way to differentiate in a test, so
+            // disabling for the whole API 34. See b/284406283 for more context.
+            Assume.assumeTrue(Build.VERSION.SDK_INT != 34)
+        }
+
         private const val numPages = 3
         private val mSystemWindowInsetsConsumedField: Field? by lazy {
             // Only need reflection on API < 29 to create an unconsumed WindowInsets.
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingBackend.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingBackend.kt
index f35d5de..22b6333 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingBackend.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingBackend.kt
@@ -25,7 +25,6 @@
 import java.util.concurrent.Executor
 
 /**
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 interface EmbeddingBackend {
diff --git a/window/window/src/main/java/androidx/window/layout/WindowMetrics.kt b/window/window/src/main/java/androidx/window/layout/WindowMetrics.kt
index f6261bd..1de2e40 100644
--- a/window/window/src/main/java/androidx/window/layout/WindowMetrics.kt
+++ b/window/window/src/main/java/androidx/window/layout/WindowMetrics.kt
@@ -39,7 +39,6 @@
 
     /**
      * An internal constructor for [WindowMetrics]
-     * @suppress
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     constructor(
diff --git a/work/work-testing/src/main/java/androidx/work/testing/TestClock.kt b/work/work-testing/src/main/java/androidx/work/testing/TestClock.kt
index 83f6e54..f138509 100644
--- a/work/work-testing/src/main/java/androidx/work/testing/TestClock.kt
+++ b/work/work-testing/src/main/java/androidx/work/testing/TestClock.kt
@@ -21,7 +21,6 @@
 
 /**
  * A settable [Clock] that can be used to control time and precisely test schedules
- * @suppress
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class TestClock(var timeMillis: Long) : Clock {