diff --git a/activity/activity/api/api_lint.ignore b/activity/activity/api/api_lint.ignore
index 8b4fe9e..bdc1a31 100644
--- a/activity/activity/api/api_lint.ignore
+++ b/activity/activity/api/api_lint.ignore
@@ -19,16 +19,6 @@
     androidx.activity.result.IntentSenderRequest does not declare a `getFlags()` method matching method androidx.activity.result.IntentSenderRequest.Builder.setFlags(int,int)
 
 
-MissingNullability: androidx.activity.ComponentActivity#startActivityForResult(android.content.Intent, int) parameter #0:
-    Missing nullability on parameter `intent` in method `startActivityForResult`
-MissingNullability: androidx.activity.ComponentActivity#startActivityForResult(android.content.Intent, int, android.os.Bundle) parameter #0:
-    Missing nullability on parameter `intent` in method `startActivityForResult`
-MissingNullability: androidx.activity.ComponentActivity#startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int) parameter #0:
-    Missing nullability on parameter `intent` in method `startIntentSenderForResult`
-MissingNullability: androidx.activity.ComponentActivity#startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) parameter #0:
-    Missing nullability on parameter `intent` in method `startIntentSenderForResult`
-
-
 RegistrationName: androidx.activity.OnBackPressedDispatcher#addCallback(androidx.activity.OnBackPressedCallback):
     Callback methods should be named register/unregister; was addCallback
 RegistrationName: androidx.activity.OnBackPressedDispatcher#addCallback(androidx.lifecycle.LifecycleOwner, androidx.activity.OnBackPressedCallback):
diff --git a/annotation/annotation-experimental/api/current.ignore b/annotation/annotation-experimental/api/current.ignore
deleted file mode 100644
index 4413cc6..0000000
--- a/annotation/annotation-experimental/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.annotation.experimental.UseExperimental#markerClass():
-    Method androidx.annotation.experimental.UseExperimental.markerClass has changed return type from Class<?> to Class<? extends java.lang.annotation.Annotation>[]
diff --git a/annotation/annotation-experimental/api/restricted_current.ignore b/annotation/annotation-experimental/api/restricted_current.ignore
deleted file mode 100644
index 4413cc6..0000000
--- a/annotation/annotation-experimental/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.annotation.experimental.UseExperimental#markerClass():
-    Method androidx.annotation.experimental.UseExperimental.markerClass has changed return type from Class<?> to Class<? extends java.lang.annotation.Annotation>[]
diff --git a/appcompat/appcompat/api/api_lint.ignore b/appcompat/appcompat/api/api_lint.ignore
index e8903ced9..1ceffe5 100644
--- a/appcompat/appcompat/api/api_lint.ignore
+++ b/appcompat/appcompat/api/api_lint.ignore
@@ -59,24 +59,12 @@
 
 MissingNullability: androidx.appcompat.app.ActionBar#addOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener) parameter #0:
     Missing nullability on parameter `listener` in method `addOnMenuVisibilityListener`
-MissingNullability: androidx.appcompat.app.ActionBar#addTab(androidx.appcompat.app.ActionBar.Tab) parameter #0:
-    Missing nullability on parameter `tab` in method `addTab`
-MissingNullability: androidx.appcompat.app.ActionBar#addTab(androidx.appcompat.app.ActionBar.Tab, boolean) parameter #0:
-    Missing nullability on parameter `tab` in method `addTab`
-MissingNullability: androidx.appcompat.app.ActionBar#addTab(androidx.appcompat.app.ActionBar.Tab, int) parameter #0:
-    Missing nullability on parameter `tab` in method `addTab`
-MissingNullability: androidx.appcompat.app.ActionBar#addTab(androidx.appcompat.app.ActionBar.Tab, int, boolean) parameter #0:
-    Missing nullability on parameter `tab` in method `addTab`
 MissingNullability: androidx.appcompat.app.ActionBar#getCustomView():
     Missing nullability on method `getCustomView` return
 MissingNullability: androidx.appcompat.app.ActionBar#getThemedContext():
     Missing nullability on method `getThemedContext` return
 MissingNullability: androidx.appcompat.app.ActionBar#removeOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener) parameter #0:
     Missing nullability on parameter `listener` in method `removeOnMenuVisibilityListener`
-MissingNullability: androidx.appcompat.app.ActionBar#removeTab(androidx.appcompat.app.ActionBar.Tab) parameter #0:
-    Missing nullability on parameter `tab` in method `removeTab`
-MissingNullability: androidx.appcompat.app.ActionBar#selectTab(androidx.appcompat.app.ActionBar.Tab) parameter #0:
-    Missing nullability on parameter `tab` in method `selectTab`
 MissingNullability: androidx.appcompat.app.ActionBar#setCustomView(android.view.View) parameter #0:
     Missing nullability on parameter `view` in method `setCustomView`
 MissingNullability: androidx.appcompat.app.ActionBar#setCustomView(android.view.View, androidx.appcompat.app.ActionBar.LayoutParams) parameter #0:
@@ -85,10 +73,6 @@
     Missing nullability on parameter `layoutParams` in method `setCustomView`
 MissingNullability: androidx.appcompat.app.ActionBar#setIcon(android.graphics.drawable.Drawable) parameter #0:
     Missing nullability on parameter `icon` in method `setIcon`
-MissingNullability: androidx.appcompat.app.ActionBar#setListNavigationCallbacks(android.widget.SpinnerAdapter, androidx.appcompat.app.ActionBar.OnNavigationListener) parameter #0:
-    Missing nullability on parameter `adapter` in method `setListNavigationCallbacks`
-MissingNullability: androidx.appcompat.app.ActionBar#setListNavigationCallbacks(android.widget.SpinnerAdapter, androidx.appcompat.app.ActionBar.OnNavigationListener) parameter #1:
-    Missing nullability on parameter `callback` in method `setListNavigationCallbacks`
 MissingNullability: androidx.appcompat.app.ActionBar#setLogo(android.graphics.drawable.Drawable) parameter #0:
     Missing nullability on parameter `logo` in method `setLogo`
 MissingNullability: androidx.appcompat.app.ActionBar#setSplitBackgroundDrawable(android.graphics.drawable.Drawable) parameter #0:
@@ -415,8 +399,6 @@
     Missing nullability on parameter `v` in method `addContentView`
 MissingNullability: androidx.appcompat.app.AppCompatDelegate#addContentView(android.view.View, android.view.ViewGroup.LayoutParams) parameter #1:
     Missing nullability on parameter `lp` in method `addContentView`
-MissingNullability: androidx.appcompat.app.AppCompatDelegate#attachBaseContext(android.content.Context) parameter #0:
-    Missing nullability on parameter `context` in method `attachBaseContext`
 MissingNullability: androidx.appcompat.app.AppCompatDelegate#createView(android.view.View, String, android.content.Context, android.util.AttributeSet):
     Missing nullability on method `createView` return
 MissingNullability: androidx.appcompat.app.AppCompatDelegate#createView(android.view.View, String, android.content.Context, android.util.AttributeSet) parameter #1:
diff --git a/appcompat/appcompat/api/current.ignore b/appcompat/appcompat/api/current.ignore
deleted file mode 100644
index 057533c..0000000
--- a/appcompat/appcompat/api/current.ignore
+++ /dev/null
@@ -1,13 +0,0 @@
-// Baseline format: 1.0
-ChangedSuperclass: androidx.appcompat.widget.LinearLayoutCompat.LayoutParams:
-    Class androidx.appcompat.widget.LinearLayoutCompat.LayoutParams superclass changed from android.view.ViewGroup.MarginLayoutParams to android.widget.LinearLayout.LayoutParams
-
-
-RemovedField: androidx.appcompat.widget.LinearLayoutCompat.LayoutParams#gravity:
-    Removed field androidx.appcompat.widget.LinearLayoutCompat.LayoutParams.gravity
-RemovedField: androidx.appcompat.widget.LinearLayoutCompat.LayoutParams#weight:
-    Removed field androidx.appcompat.widget.LinearLayoutCompat.LayoutParams.weight
-
-
-RemovedMethod: androidx.appcompat.widget.LinearLayoutCompat.LayoutParams#LayoutParams(androidx.appcompat.widget.LinearLayoutCompat.LayoutParams):
-    Removed constructor androidx.appcompat.widget.LinearLayoutCompat.LayoutParams(androidx.appcompat.widget.LinearLayoutCompat.LayoutParams)
diff --git a/appcompat/appcompat/api/restricted_current.ignore b/appcompat/appcompat/api/restricted_current.ignore
deleted file mode 100644
index 61f6f2d..0000000
--- a/appcompat/appcompat/api/restricted_current.ignore
+++ /dev/null
@@ -1,23 +0,0 @@
-// Baseline format: 1.0
-ChangedSuperclass: androidx.appcompat.widget.LinearLayoutCompat.LayoutParams:
-    Class androidx.appcompat.widget.LinearLayoutCompat.LayoutParams superclass changed from android.view.ViewGroup.MarginLayoutParams to android.widget.LinearLayout.LayoutParams
-
-
-RemovedField: androidx.appcompat.widget.LinearLayoutCompat.LayoutParams#gravity:
-    Removed field androidx.appcompat.widget.LinearLayoutCompat.LayoutParams.gravity
-RemovedField: androidx.appcompat.widget.LinearLayoutCompat.LayoutParams#weight:
-    Removed field androidx.appcompat.widget.LinearLayoutCompat.LayoutParams.weight
-
-
-RemovedMethod: androidx.appcompat.view.menu.MenuPopupHelper#getPopup():
-    Removed method androidx.appcompat.view.menu.MenuPopupHelper.getPopup()
-RemovedMethod: androidx.appcompat.widget.ActionMenuView#setPresenter(androidx.appcompat.widget.ActionMenuPresenter):
-    Removed method androidx.appcompat.widget.ActionMenuView.setPresenter(androidx.appcompat.widget.ActionMenuPresenter)
-RemovedMethod: androidx.appcompat.widget.ActivityChooserView#getDataModel():
-    Removed method androidx.appcompat.widget.ActivityChooserView.getDataModel()
-RemovedMethod: androidx.appcompat.widget.ActivityChooserView#setActivityChooserModel(androidx.appcompat.widget.ActivityChooserModel):
-    Removed method androidx.appcompat.widget.ActivityChooserView.setActivityChooserModel(androidx.appcompat.widget.ActivityChooserModel)
-RemovedMethod: androidx.appcompat.widget.LinearLayoutCompat.LayoutParams#LayoutParams(androidx.appcompat.widget.LinearLayoutCompat.LayoutParams):
-    Removed constructor androidx.appcompat.widget.LinearLayoutCompat.LayoutParams(androidx.appcompat.widget.LinearLayoutCompat.LayoutParams)
-RemovedMethod: androidx.appcompat.widget.Toolbar#setMenu(androidx.appcompat.view.menu.MenuBuilder, androidx.appcompat.widget.ActionMenuPresenter):
-    Removed method androidx.appcompat.widget.Toolbar.setMenu(androidx.appcompat.view.menu.MenuBuilder,androidx.appcompat.widget.ActionMenuPresenter)
diff --git a/appsearch/appsearch/api/api_lint.ignore b/appsearch/appsearch/api/api_lint.ignore
new file mode 100644
index 0000000..2f4353e
--- /dev/null
+++ b/appsearch/appsearch/api/api_lint.ignore
@@ -0,0 +1,5 @@
+// Baseline format: 1.0
+NullableCollection: androidx.appsearch.app.GenericDocument#getPropertyDocumentArray(String):
+    Return type of method androidx.appsearch.app.GenericDocument.getPropertyDocumentArray(String) is a nullable collection (`androidx.appsearch.app.GenericDocument[]`); must be non-null
+NullableCollection: androidx.appsearch.app.GenericDocument#getPropertyStringArray(String):
+    Return type of method androidx.appsearch.app.GenericDocument.getPropertyStringArray(String) is a nullable collection (`java.lang.String[]`); must be non-null
diff --git a/benchmark/common/api/public_plus_experimental_current.txt b/benchmark/common/api/public_plus_experimental_current.txt
index b7d3be7..315fd22 100644
--- a/benchmark/common/api/public_plus_experimental_current.txt
+++ b/benchmark/common/api/public_plus_experimental_current.txt
@@ -57,8 +57,7 @@
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class InstrumentationResultScope {
-    ctor public InstrumentationResultScope(android.os.Bundle bundle);
-    ctor public InstrumentationResultScope();
+    ctor public InstrumentationResultScope(optional android.os.Bundle bundle);
     method public void fileRecord(String key, String path);
     method public android.os.Bundle getBundle();
     method public void ideSummaryRecord(String value);
diff --git a/browser/browser/api/api_lint.ignore b/browser/browser/api/api_lint.ignore
index 7a97755..3b0edf0 100644
--- a/browser/browser/api/api_lint.ignore
+++ b/browser/browser/api/api_lint.ignore
@@ -157,6 +157,38 @@
     androidx.browser.trusted.TrustedWebActivityIntent does not declare a `getSplashScreenParams()` method matching method androidx.browser.trusted.TrustedWebActivityIntentBuilder.setSplashScreenParams(android.os.Bundle)
 
 
+NullableCollection: androidx.browser.customtabs.CustomTabsCallback#extraCallback(String, android.os.Bundle) parameter #1:
+    Type of parameter args in androidx.browser.customtabs.CustomTabsCallback.extraCallback(String callbackName, android.os.Bundle args) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.customtabs.CustomTabsCallback#extraCallbackWithResult(String, android.os.Bundle):
+    Return type of method androidx.browser.customtabs.CustomTabsCallback.extraCallbackWithResult(String,android.os.Bundle) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.customtabs.CustomTabsCallback#extraCallbackWithResult(String, android.os.Bundle) parameter #1:
+    Type of parameter args in androidx.browser.customtabs.CustomTabsCallback.extraCallbackWithResult(String callbackName, android.os.Bundle args) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.customtabs.CustomTabsCallback#onMessageChannelReady(android.os.Bundle) parameter #0:
+    Type of parameter extras in androidx.browser.customtabs.CustomTabsCallback.onMessageChannelReady(android.os.Bundle extras) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.customtabs.CustomTabsCallback#onNavigationEvent(int, android.os.Bundle) parameter #1:
+    Type of parameter extras in androidx.browser.customtabs.CustomTabsCallback.onNavigationEvent(int navigationEvent, android.os.Bundle extras) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.customtabs.CustomTabsCallback#onPostMessage(String, android.os.Bundle) parameter #1:
+    Type of parameter extras in androidx.browser.customtabs.CustomTabsCallback.onPostMessage(String message, android.os.Bundle extras) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.customtabs.CustomTabsCallback#onRelationshipValidationResult(int, android.net.Uri, boolean, android.os.Bundle) parameter #3:
+    Type of parameter extras in androidx.browser.customtabs.CustomTabsCallback.onRelationshipValidationResult(int relation, android.net.Uri requestedOrigin, boolean result, android.os.Bundle extras) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.customtabs.CustomTabsClient#extraCommand(String, android.os.Bundle):
+    Return type of method androidx.browser.customtabs.CustomTabsClient.extraCommand(String,android.os.Bundle) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.customtabs.CustomTabsIntent#startAnimationBundle:
+    Type of field androidx.browser.customtabs.CustomTabsIntent.startAnimationBundle is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.customtabs.CustomTabsService#extraCommand(String, android.os.Bundle):
+    Return type of method androidx.browser.customtabs.CustomTabsService.extraCommand(String,android.os.Bundle) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.trusted.TrustedWebActivityCallback#onExtraCallback(String, android.os.Bundle) parameter #1:
+    Type of parameter args in androidx.browser.trusted.TrustedWebActivityCallback.onExtraCallback(String callbackName, android.os.Bundle args) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.trusted.TrustedWebActivityService#onExtraCommand(String, android.os.Bundle, androidx.browser.trusted.TrustedWebActivityCallbackRemote):
+    Return type of method androidx.browser.trusted.TrustedWebActivityService.onExtraCommand(String,android.os.Bundle,androidx.browser.trusted.TrustedWebActivityCallbackRemote) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.trusted.TrustedWebActivityServiceConnection#sendExtraCommand(String, android.os.Bundle, androidx.browser.trusted.TrustedWebActivityCallback):
+    Return type of method androidx.browser.trusted.TrustedWebActivityServiceConnection.sendExtraCommand(String,android.os.Bundle,androidx.browser.trusted.TrustedWebActivityCallback) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.browser.trusted.sharing.ShareData#uris:
+    Type of field androidx.browser.trusted.sharing.ShareData.uris is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.browser.trusted.sharing.ShareTarget.Params#files:
+    Type of field androidx.browser.trusted.sharing.ShareTarget.Params.files is a nullable collection (`java.util.List`); must be non-null
+
+
 OptionalBuilderConstructorArgument: androidx.browser.customtabs.CustomTabsIntent.Builder#Builder(androidx.browser.customtabs.CustomTabsSession) parameter #0:
     Builder constructor arguments must be mandatory (i.e. not @Nullable): parameter session in androidx.browser.customtabs.CustomTabsIntent.Builder(androidx.browser.customtabs.CustomTabsSession session)
 
diff --git a/camera/camera-core/api/current.ignore b/camera/camera-core/api/current.ignore
deleted file mode 100644
index 7207c70..0000000
--- a/camera/camera-core/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedMethod: androidx.camera.core.DisplayOrientedMeteringPointFactory#DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraSelector, float, float):
-    Removed constructor androidx.camera.core.DisplayOrientedMeteringPointFactory(android.view.Display,androidx.camera.core.CameraSelector,float,float)
diff --git a/camera/camera-core/api/restricted_current.ignore b/camera/camera-core/api/restricted_current.ignore
deleted file mode 100644
index 7207c70..0000000
--- a/camera/camera-core/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedMethod: androidx.camera.core.DisplayOrientedMeteringPointFactory#DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraSelector, float, float):
-    Removed constructor androidx.camera.core.DisplayOrientedMeteringPointFactory(android.view.Display,androidx.camera.core.CameraSelector,float,float)
diff --git a/camera/camera-view/api/current.txt b/camera/camera-view/api/current.txt
index c75e9f97..80048d7 100644
--- a/camera/camera-view/api/current.txt
+++ b/camera/camera-view/api/current.txt
@@ -85,8 +85,6 @@
     method public androidx.lifecycle.LiveData<androidx.camera.view.PreviewView.StreamState!> getPreviewStreamState();
     method @UiThread public androidx.camera.view.PreviewView.ScaleType getScaleType();
     method @UiThread public androidx.camera.core.Preview.SurfaceProvider getSurfaceProvider();
-    method @UiThread public androidx.camera.core.ViewPort? getViewPort();
-    method @UiThread public androidx.camera.core.ViewPort? getViewPort(int);
     method @UiThread public void setController(androidx.camera.view.CameraController?);
     method @UiThread public void setImplementationMode(androidx.camera.view.PreviewView.ImplementationMode);
     method @UiThread public void setScaleType(androidx.camera.view.PreviewView.ScaleType);
diff --git a/camera/camera-view/api/restricted_current.txt b/camera/camera-view/api/restricted_current.txt
index fb99b22..ed3ba9b 100644
--- a/camera/camera-view/api/restricted_current.txt
+++ b/camera/camera-view/api/restricted_current.txt
@@ -85,8 +85,6 @@
     method public androidx.lifecycle.LiveData<androidx.camera.view.PreviewView.StreamState!> getPreviewStreamState();
     method @UiThread public androidx.camera.view.PreviewView.ScaleType getScaleType();
     method @UiThread public androidx.camera.core.Preview.SurfaceProvider getSurfaceProvider();
-    method @UiThread public androidx.camera.core.ViewPort? getViewPort();
-    method @UiThread public androidx.camera.core.ViewPort? getViewPort(@androidx.camera.core.impl.ImageOutputConfig.RotationValue int);
     method @UiThread public void setController(androidx.camera.view.CameraController?);
     method @UiThread public void setImplementationMode(androidx.camera.view.PreviewView.ImplementationMode);
     method @UiThread public void setScaleType(androidx.camera.view.PreviewView.ScaleType);
diff --git a/compose/animation/animation-core/api/1.0.0-beta02.txt b/compose/animation/animation-core/api/1.0.0-beta02.txt
index 2016497..67580ac 100644
--- a/compose/animation/animation-core/api/1.0.0-beta02.txt
+++ b/compose/animation/animation-core/api/1.0.0-beta02.txt
@@ -5,7 +5,7 @@
   }
 
   public final class Animatable<T, V extends androidx.compose.animation.core.AnimationVector> {
-    ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? visibilityThreshold);
+    ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold);
     method public suspend Object? animateDecay(T? initialVelocity, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>> p);
     method public suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? initialVelocity, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>> p);
     method public androidx.compose.runtime.State<T> asState();
@@ -122,7 +122,7 @@
   }
 
   public final class AnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
-    ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, V? initialVelocityVector, long lastFrameTimeNanos, long finishedTimeNanos, boolean isRunning);
+    ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, optional V? initialVelocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
     method public long getFinishedTimeNanos();
     method public long getLastFrameTimeNanos();
     method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
@@ -297,8 +297,7 @@
   }
 
   public final class FloatExponentialDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
-    ctor public FloatExponentialDecaySpec(float frictionMultiplier, float absVelocityThreshold);
-    ctor public FloatExponentialDecaySpec();
+    ctor public FloatExponentialDecaySpec(optional float frictionMultiplier, optional float absVelocityThreshold);
     method public float getAbsVelocityThreshold();
     method public long getDurationNanos(float initialValue, float initialVelocity);
     method public float getTargetValue(float initialValue, float initialVelocity);
@@ -308,8 +307,7 @@
   }
 
   public final class FloatSpringSpec implements androidx.compose.animation.core.FloatAnimationSpec {
-    ctor public FloatSpringSpec(float dampingRatio, float stiffness, float visibilityThreshold);
-    ctor public FloatSpringSpec();
+    ctor public FloatSpringSpec(optional float dampingRatio, optional float stiffness, optional float visibilityThreshold);
     method public float getDampingRatio();
     method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
     method public float getStiffness();
@@ -320,8 +318,7 @@
   }
 
   public final class FloatTweenSpec implements androidx.compose.animation.core.FloatAnimationSpec {
-    ctor public FloatTweenSpec(int duration, int delay, androidx.compose.animation.core.Easing easing);
-    ctor public FloatTweenSpec();
+    ctor public FloatTweenSpec(optional int duration, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
     method public int getDuration();
     method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
@@ -347,7 +344,7 @@
   }
 
   public final class InfiniteRepeatableSpec<T> implements androidx.compose.animation.core.AnimationSpec<T> {
-    ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
     method public androidx.compose.animation.core.RepeatMode getRepeatMode();
     method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
@@ -390,8 +387,7 @@
   }
 
   public final class ManualFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public ManualFrameClock(long initialTime);
-    ctor public ManualFrameClock();
+    ctor public ManualFrameClock(optional long initialTime);
     method public void advanceClock(long nanos);
     method public long getCurrentTime();
     method public boolean getHasAwaiters();
@@ -419,7 +415,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class RepeatableSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
-    ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
     method public int getIterations();
     method public androidx.compose.animation.core.RepeatMode getRepeatMode();
@@ -430,8 +426,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class SnapSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
-    ctor public SnapSpec(int delay);
-    ctor public SnapSpec();
+    ctor public SnapSpec(optional int delay);
     method public int getDelay();
     method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
     property public final int delay;
@@ -457,8 +452,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class SpringSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
-    ctor public SpringSpec(float dampingRatio, float stiffness, T? visibilityThreshold);
-    ctor public SpringSpec();
+    ctor public SpringSpec(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
     method public float getDampingRatio();
     method public float getStiffness();
     method public T? getVisibilityThreshold();
@@ -477,7 +471,7 @@
   }
 
   public final class TargetBasedAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
-    ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, V? initialVelocityVector);
+    ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, optional V? initialVelocityVector);
     method public long getDurationNanos();
     method public T! getInitialValue();
     method public T! getTargetValue();
@@ -529,8 +523,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class TweenSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
-    ctor public TweenSpec(int durationMillis, int delay, androidx.compose.animation.core.Easing easing);
-    ctor public TweenSpec();
+    ctor public TweenSpec(optional int durationMillis, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
     method public int getDurationMillis();
     method public androidx.compose.animation.core.Easing getEasing();
@@ -602,7 +595,7 @@
   }
 
   public final class VectorizedInfiniteRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedAnimationSpec<V> {
-    ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
     method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -611,7 +604,7 @@
   }
 
   public final class VectorizedKeyframesSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, int delayMillis);
+    ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, optional int delayMillis);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -621,15 +614,14 @@
   }
 
   public final class VectorizedRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
-    ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
     method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
   }
 
   public final class VectorizedSnapSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedSnapSpec(int delayMillis);
-    ctor public VectorizedSnapSpec();
+    ctor public VectorizedSnapSpec(optional int delayMillis);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -639,7 +631,7 @@
   }
 
   public final class VectorizedSpringSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
-    ctor public VectorizedSpringSpec(float dampingRatio, float stiffness, V? visibilityThreshold);
+    ctor public VectorizedSpringSpec(optional float dampingRatio, optional float stiffness, optional V? visibilityThreshold);
     method public float getDampingRatio();
     method public float getStiffness();
     property public final float dampingRatio;
@@ -647,8 +639,7 @@
   }
 
   public final class VectorizedTweenSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedTweenSpec(int durationMillis, int delayMillis, androidx.compose.animation.core.Easing easing);
-    ctor public VectorizedTweenSpec();
+    ctor public VectorizedTweenSpec(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public androidx.compose.animation.core.Easing getEasing();
diff --git a/compose/animation/animation-core/api/api_lint.ignore b/compose/animation/animation-core/api/api_lint.ignore
deleted file mode 100644
index 8684a3f..0000000
--- a/compose/animation/animation-core/api/api_lint.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-CallbackName: androidx.compose.animation.core.AnimationClockObserver:
-    Class should be named AnimationClockCallback
diff --git a/compose/animation/animation-core/api/current.txt b/compose/animation/animation-core/api/current.txt
index 2016497..67580ac 100644
--- a/compose/animation/animation-core/api/current.txt
+++ b/compose/animation/animation-core/api/current.txt
@@ -5,7 +5,7 @@
   }
 
   public final class Animatable<T, V extends androidx.compose.animation.core.AnimationVector> {
-    ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? visibilityThreshold);
+    ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold);
     method public suspend Object? animateDecay(T? initialVelocity, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>> p);
     method public suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? initialVelocity, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>> p);
     method public androidx.compose.runtime.State<T> asState();
@@ -122,7 +122,7 @@
   }
 
   public final class AnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
-    ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, V? initialVelocityVector, long lastFrameTimeNanos, long finishedTimeNanos, boolean isRunning);
+    ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, optional V? initialVelocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
     method public long getFinishedTimeNanos();
     method public long getLastFrameTimeNanos();
     method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
@@ -297,8 +297,7 @@
   }
 
   public final class FloatExponentialDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
-    ctor public FloatExponentialDecaySpec(float frictionMultiplier, float absVelocityThreshold);
-    ctor public FloatExponentialDecaySpec();
+    ctor public FloatExponentialDecaySpec(optional float frictionMultiplier, optional float absVelocityThreshold);
     method public float getAbsVelocityThreshold();
     method public long getDurationNanos(float initialValue, float initialVelocity);
     method public float getTargetValue(float initialValue, float initialVelocity);
@@ -308,8 +307,7 @@
   }
 
   public final class FloatSpringSpec implements androidx.compose.animation.core.FloatAnimationSpec {
-    ctor public FloatSpringSpec(float dampingRatio, float stiffness, float visibilityThreshold);
-    ctor public FloatSpringSpec();
+    ctor public FloatSpringSpec(optional float dampingRatio, optional float stiffness, optional float visibilityThreshold);
     method public float getDampingRatio();
     method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
     method public float getStiffness();
@@ -320,8 +318,7 @@
   }
 
   public final class FloatTweenSpec implements androidx.compose.animation.core.FloatAnimationSpec {
-    ctor public FloatTweenSpec(int duration, int delay, androidx.compose.animation.core.Easing easing);
-    ctor public FloatTweenSpec();
+    ctor public FloatTweenSpec(optional int duration, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
     method public int getDuration();
     method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
@@ -347,7 +344,7 @@
   }
 
   public final class InfiniteRepeatableSpec<T> implements androidx.compose.animation.core.AnimationSpec<T> {
-    ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
     method public androidx.compose.animation.core.RepeatMode getRepeatMode();
     method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
@@ -390,8 +387,7 @@
   }
 
   public final class ManualFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public ManualFrameClock(long initialTime);
-    ctor public ManualFrameClock();
+    ctor public ManualFrameClock(optional long initialTime);
     method public void advanceClock(long nanos);
     method public long getCurrentTime();
     method public boolean getHasAwaiters();
@@ -419,7 +415,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class RepeatableSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
-    ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
     method public int getIterations();
     method public androidx.compose.animation.core.RepeatMode getRepeatMode();
@@ -430,8 +426,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class SnapSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
-    ctor public SnapSpec(int delay);
-    ctor public SnapSpec();
+    ctor public SnapSpec(optional int delay);
     method public int getDelay();
     method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
     property public final int delay;
@@ -457,8 +452,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class SpringSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
-    ctor public SpringSpec(float dampingRatio, float stiffness, T? visibilityThreshold);
-    ctor public SpringSpec();
+    ctor public SpringSpec(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
     method public float getDampingRatio();
     method public float getStiffness();
     method public T? getVisibilityThreshold();
@@ -477,7 +471,7 @@
   }
 
   public final class TargetBasedAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
-    ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, V? initialVelocityVector);
+    ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, optional V? initialVelocityVector);
     method public long getDurationNanos();
     method public T! getInitialValue();
     method public T! getTargetValue();
@@ -529,8 +523,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class TweenSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
-    ctor public TweenSpec(int durationMillis, int delay, androidx.compose.animation.core.Easing easing);
-    ctor public TweenSpec();
+    ctor public TweenSpec(optional int durationMillis, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
     method public int getDurationMillis();
     method public androidx.compose.animation.core.Easing getEasing();
@@ -602,7 +595,7 @@
   }
 
   public final class VectorizedInfiniteRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedAnimationSpec<V> {
-    ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
     method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -611,7 +604,7 @@
   }
 
   public final class VectorizedKeyframesSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, int delayMillis);
+    ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, optional int delayMillis);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -621,15 +614,14 @@
   }
 
   public final class VectorizedRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
-    ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
     method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
   }
 
   public final class VectorizedSnapSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedSnapSpec(int delayMillis);
-    ctor public VectorizedSnapSpec();
+    ctor public VectorizedSnapSpec(optional int delayMillis);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -639,7 +631,7 @@
   }
 
   public final class VectorizedSpringSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
-    ctor public VectorizedSpringSpec(float dampingRatio, float stiffness, V? visibilityThreshold);
+    ctor public VectorizedSpringSpec(optional float dampingRatio, optional float stiffness, optional V? visibilityThreshold);
     method public float getDampingRatio();
     method public float getStiffness();
     property public final float dampingRatio;
@@ -647,8 +639,7 @@
   }
 
   public final class VectorizedTweenSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedTweenSpec(int durationMillis, int delayMillis, androidx.compose.animation.core.Easing easing);
-    ctor public VectorizedTweenSpec();
+    ctor public VectorizedTweenSpec(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public androidx.compose.animation.core.Easing getEasing();
diff --git a/compose/animation/animation-core/api/public_plus_experimental_1.0.0-beta02.txt b/compose/animation/animation-core/api/public_plus_experimental_1.0.0-beta02.txt
index 2016497..67580ac 100644
--- a/compose/animation/animation-core/api/public_plus_experimental_1.0.0-beta02.txt
+++ b/compose/animation/animation-core/api/public_plus_experimental_1.0.0-beta02.txt
@@ -5,7 +5,7 @@
   }
 
   public final class Animatable<T, V extends androidx.compose.animation.core.AnimationVector> {
-    ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? visibilityThreshold);
+    ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold);
     method public suspend Object? animateDecay(T? initialVelocity, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>> p);
     method public suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? initialVelocity, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>> p);
     method public androidx.compose.runtime.State<T> asState();
@@ -122,7 +122,7 @@
   }
 
   public final class AnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
-    ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, V? initialVelocityVector, long lastFrameTimeNanos, long finishedTimeNanos, boolean isRunning);
+    ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, optional V? initialVelocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
     method public long getFinishedTimeNanos();
     method public long getLastFrameTimeNanos();
     method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
@@ -297,8 +297,7 @@
   }
 
   public final class FloatExponentialDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
-    ctor public FloatExponentialDecaySpec(float frictionMultiplier, float absVelocityThreshold);
-    ctor public FloatExponentialDecaySpec();
+    ctor public FloatExponentialDecaySpec(optional float frictionMultiplier, optional float absVelocityThreshold);
     method public float getAbsVelocityThreshold();
     method public long getDurationNanos(float initialValue, float initialVelocity);
     method public float getTargetValue(float initialValue, float initialVelocity);
@@ -308,8 +307,7 @@
   }
 
   public final class FloatSpringSpec implements androidx.compose.animation.core.FloatAnimationSpec {
-    ctor public FloatSpringSpec(float dampingRatio, float stiffness, float visibilityThreshold);
-    ctor public FloatSpringSpec();
+    ctor public FloatSpringSpec(optional float dampingRatio, optional float stiffness, optional float visibilityThreshold);
     method public float getDampingRatio();
     method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
     method public float getStiffness();
@@ -320,8 +318,7 @@
   }
 
   public final class FloatTweenSpec implements androidx.compose.animation.core.FloatAnimationSpec {
-    ctor public FloatTweenSpec(int duration, int delay, androidx.compose.animation.core.Easing easing);
-    ctor public FloatTweenSpec();
+    ctor public FloatTweenSpec(optional int duration, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
     method public int getDuration();
     method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
@@ -347,7 +344,7 @@
   }
 
   public final class InfiniteRepeatableSpec<T> implements androidx.compose.animation.core.AnimationSpec<T> {
-    ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
     method public androidx.compose.animation.core.RepeatMode getRepeatMode();
     method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
@@ -390,8 +387,7 @@
   }
 
   public final class ManualFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public ManualFrameClock(long initialTime);
-    ctor public ManualFrameClock();
+    ctor public ManualFrameClock(optional long initialTime);
     method public void advanceClock(long nanos);
     method public long getCurrentTime();
     method public boolean getHasAwaiters();
@@ -419,7 +415,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class RepeatableSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
-    ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
     method public int getIterations();
     method public androidx.compose.animation.core.RepeatMode getRepeatMode();
@@ -430,8 +426,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class SnapSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
-    ctor public SnapSpec(int delay);
-    ctor public SnapSpec();
+    ctor public SnapSpec(optional int delay);
     method public int getDelay();
     method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
     property public final int delay;
@@ -457,8 +452,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class SpringSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
-    ctor public SpringSpec(float dampingRatio, float stiffness, T? visibilityThreshold);
-    ctor public SpringSpec();
+    ctor public SpringSpec(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
     method public float getDampingRatio();
     method public float getStiffness();
     method public T? getVisibilityThreshold();
@@ -477,7 +471,7 @@
   }
 
   public final class TargetBasedAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
-    ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, V? initialVelocityVector);
+    ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, optional V? initialVelocityVector);
     method public long getDurationNanos();
     method public T! getInitialValue();
     method public T! getTargetValue();
@@ -529,8 +523,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class TweenSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
-    ctor public TweenSpec(int durationMillis, int delay, androidx.compose.animation.core.Easing easing);
-    ctor public TweenSpec();
+    ctor public TweenSpec(optional int durationMillis, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
     method public int getDurationMillis();
     method public androidx.compose.animation.core.Easing getEasing();
@@ -602,7 +595,7 @@
   }
 
   public final class VectorizedInfiniteRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedAnimationSpec<V> {
-    ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
     method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -611,7 +604,7 @@
   }
 
   public final class VectorizedKeyframesSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, int delayMillis);
+    ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, optional int delayMillis);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -621,15 +614,14 @@
   }
 
   public final class VectorizedRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
-    ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
     method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
   }
 
   public final class VectorizedSnapSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedSnapSpec(int delayMillis);
-    ctor public VectorizedSnapSpec();
+    ctor public VectorizedSnapSpec(optional int delayMillis);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -639,7 +631,7 @@
   }
 
   public final class VectorizedSpringSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
-    ctor public VectorizedSpringSpec(float dampingRatio, float stiffness, V? visibilityThreshold);
+    ctor public VectorizedSpringSpec(optional float dampingRatio, optional float stiffness, optional V? visibilityThreshold);
     method public float getDampingRatio();
     method public float getStiffness();
     property public final float dampingRatio;
@@ -647,8 +639,7 @@
   }
 
   public final class VectorizedTweenSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedTweenSpec(int durationMillis, int delayMillis, androidx.compose.animation.core.Easing easing);
-    ctor public VectorizedTweenSpec();
+    ctor public VectorizedTweenSpec(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public androidx.compose.animation.core.Easing getEasing();
diff --git a/compose/animation/animation-core/api/public_plus_experimental_current.txt b/compose/animation/animation-core/api/public_plus_experimental_current.txt
index 2016497..67580ac 100644
--- a/compose/animation/animation-core/api/public_plus_experimental_current.txt
+++ b/compose/animation/animation-core/api/public_plus_experimental_current.txt
@@ -5,7 +5,7 @@
   }
 
   public final class Animatable<T, V extends androidx.compose.animation.core.AnimationVector> {
-    ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? visibilityThreshold);
+    ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold);
     method public suspend Object? animateDecay(T? initialVelocity, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>> p);
     method public suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? initialVelocity, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>> p);
     method public androidx.compose.runtime.State<T> asState();
@@ -122,7 +122,7 @@
   }
 
   public final class AnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
-    ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, V? initialVelocityVector, long lastFrameTimeNanos, long finishedTimeNanos, boolean isRunning);
+    ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, optional V? initialVelocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
     method public long getFinishedTimeNanos();
     method public long getLastFrameTimeNanos();
     method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
@@ -297,8 +297,7 @@
   }
 
   public final class FloatExponentialDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
-    ctor public FloatExponentialDecaySpec(float frictionMultiplier, float absVelocityThreshold);
-    ctor public FloatExponentialDecaySpec();
+    ctor public FloatExponentialDecaySpec(optional float frictionMultiplier, optional float absVelocityThreshold);
     method public float getAbsVelocityThreshold();
     method public long getDurationNanos(float initialValue, float initialVelocity);
     method public float getTargetValue(float initialValue, float initialVelocity);
@@ -308,8 +307,7 @@
   }
 
   public final class FloatSpringSpec implements androidx.compose.animation.core.FloatAnimationSpec {
-    ctor public FloatSpringSpec(float dampingRatio, float stiffness, float visibilityThreshold);
-    ctor public FloatSpringSpec();
+    ctor public FloatSpringSpec(optional float dampingRatio, optional float stiffness, optional float visibilityThreshold);
     method public float getDampingRatio();
     method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
     method public float getStiffness();
@@ -320,8 +318,7 @@
   }
 
   public final class FloatTweenSpec implements androidx.compose.animation.core.FloatAnimationSpec {
-    ctor public FloatTweenSpec(int duration, int delay, androidx.compose.animation.core.Easing easing);
-    ctor public FloatTweenSpec();
+    ctor public FloatTweenSpec(optional int duration, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
     method public int getDuration();
     method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
@@ -347,7 +344,7 @@
   }
 
   public final class InfiniteRepeatableSpec<T> implements androidx.compose.animation.core.AnimationSpec<T> {
-    ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
     method public androidx.compose.animation.core.RepeatMode getRepeatMode();
     method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
@@ -390,8 +387,7 @@
   }
 
   public final class ManualFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public ManualFrameClock(long initialTime);
-    ctor public ManualFrameClock();
+    ctor public ManualFrameClock(optional long initialTime);
     method public void advanceClock(long nanos);
     method public long getCurrentTime();
     method public boolean getHasAwaiters();
@@ -419,7 +415,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class RepeatableSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
-    ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
     method public int getIterations();
     method public androidx.compose.animation.core.RepeatMode getRepeatMode();
@@ -430,8 +426,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class SnapSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
-    ctor public SnapSpec(int delay);
-    ctor public SnapSpec();
+    ctor public SnapSpec(optional int delay);
     method public int getDelay();
     method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
     property public final int delay;
@@ -457,8 +452,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class SpringSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
-    ctor public SpringSpec(float dampingRatio, float stiffness, T? visibilityThreshold);
-    ctor public SpringSpec();
+    ctor public SpringSpec(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
     method public float getDampingRatio();
     method public float getStiffness();
     method public T? getVisibilityThreshold();
@@ -477,7 +471,7 @@
   }
 
   public final class TargetBasedAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
-    ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, V? initialVelocityVector);
+    ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, optional V? initialVelocityVector);
     method public long getDurationNanos();
     method public T! getInitialValue();
     method public T! getTargetValue();
@@ -529,8 +523,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class TweenSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
-    ctor public TweenSpec(int durationMillis, int delay, androidx.compose.animation.core.Easing easing);
-    ctor public TweenSpec();
+    ctor public TweenSpec(optional int durationMillis, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
     method public int getDurationMillis();
     method public androidx.compose.animation.core.Easing getEasing();
@@ -602,7 +595,7 @@
   }
 
   public final class VectorizedInfiniteRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedAnimationSpec<V> {
-    ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
     method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -611,7 +604,7 @@
   }
 
   public final class VectorizedKeyframesSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, int delayMillis);
+    ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, optional int delayMillis);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -621,15 +614,14 @@
   }
 
   public final class VectorizedRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
-    ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
     method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
   }
 
   public final class VectorizedSnapSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedSnapSpec(int delayMillis);
-    ctor public VectorizedSnapSpec();
+    ctor public VectorizedSnapSpec(optional int delayMillis);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -639,7 +631,7 @@
   }
 
   public final class VectorizedSpringSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
-    ctor public VectorizedSpringSpec(float dampingRatio, float stiffness, V? visibilityThreshold);
+    ctor public VectorizedSpringSpec(optional float dampingRatio, optional float stiffness, optional V? visibilityThreshold);
     method public float getDampingRatio();
     method public float getStiffness();
     property public final float dampingRatio;
@@ -647,8 +639,7 @@
   }
 
   public final class VectorizedTweenSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedTweenSpec(int durationMillis, int delayMillis, androidx.compose.animation.core.Easing easing);
-    ctor public VectorizedTweenSpec();
+    ctor public VectorizedTweenSpec(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public androidx.compose.animation.core.Easing getEasing();
diff --git a/compose/animation/animation-core/api/restricted_1.0.0-beta02.txt b/compose/animation/animation-core/api/restricted_1.0.0-beta02.txt
index 7df77c6..421660d 100644
--- a/compose/animation/animation-core/api/restricted_1.0.0-beta02.txt
+++ b/compose/animation/animation-core/api/restricted_1.0.0-beta02.txt
@@ -5,7 +5,7 @@
   }
 
   public final class Animatable<T, V extends androidx.compose.animation.core.AnimationVector> {
-    ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? visibilityThreshold);
+    ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold);
     method public suspend Object? animateDecay(T? initialVelocity, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>> p);
     method public suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? initialVelocity, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>> p);
     method public androidx.compose.runtime.State<T> asState();
@@ -122,7 +122,7 @@
   }
 
   public final class AnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
-    ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, V? initialVelocityVector, long lastFrameTimeNanos, long finishedTimeNanos, boolean isRunning);
+    ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, optional V? initialVelocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
     method public long getFinishedTimeNanos();
     method public long getLastFrameTimeNanos();
     method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
@@ -297,8 +297,7 @@
   }
 
   public final class FloatExponentialDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
-    ctor public FloatExponentialDecaySpec(float frictionMultiplier, float absVelocityThreshold);
-    ctor public FloatExponentialDecaySpec();
+    ctor public FloatExponentialDecaySpec(optional float frictionMultiplier, optional float absVelocityThreshold);
     method public float getAbsVelocityThreshold();
     method public long getDurationNanos(float initialValue, float initialVelocity);
     method public float getTargetValue(float initialValue, float initialVelocity);
@@ -308,8 +307,7 @@
   }
 
   public final class FloatSpringSpec implements androidx.compose.animation.core.FloatAnimationSpec {
-    ctor public FloatSpringSpec(float dampingRatio, float stiffness, float visibilityThreshold);
-    ctor public FloatSpringSpec();
+    ctor public FloatSpringSpec(optional float dampingRatio, optional float stiffness, optional float visibilityThreshold);
     method public float getDampingRatio();
     method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
     method public float getStiffness();
@@ -320,8 +318,7 @@
   }
 
   public final class FloatTweenSpec implements androidx.compose.animation.core.FloatAnimationSpec {
-    ctor public FloatTweenSpec(int duration, int delay, androidx.compose.animation.core.Easing easing);
-    ctor public FloatTweenSpec();
+    ctor public FloatTweenSpec(optional int duration, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
     method public int getDuration();
     method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
@@ -347,7 +344,7 @@
   }
 
   public final class InfiniteRepeatableSpec<T> implements androidx.compose.animation.core.AnimationSpec<T> {
-    ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
     method public androidx.compose.animation.core.RepeatMode getRepeatMode();
     method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
@@ -390,8 +387,7 @@
   }
 
   public final class ManualFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public ManualFrameClock(long initialTime);
-    ctor public ManualFrameClock();
+    ctor public ManualFrameClock(optional long initialTime);
     method public void advanceClock(long nanos);
     method public long getCurrentTime();
     method public boolean getHasAwaiters();
@@ -419,7 +415,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class RepeatableSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
-    ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
     method public int getIterations();
     method public androidx.compose.animation.core.RepeatMode getRepeatMode();
@@ -430,8 +426,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class SnapSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
-    ctor public SnapSpec(int delay);
-    ctor public SnapSpec();
+    ctor public SnapSpec(optional int delay);
     method public int getDelay();
     method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
     property public final int delay;
@@ -457,8 +452,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class SpringSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
-    ctor public SpringSpec(float dampingRatio, float stiffness, T? visibilityThreshold);
-    ctor public SpringSpec();
+    ctor public SpringSpec(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
     method public float getDampingRatio();
     method public float getStiffness();
     method public T? getVisibilityThreshold();
@@ -477,7 +471,7 @@
   }
 
   public final class TargetBasedAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
-    ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, V? initialVelocityVector);
+    ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, optional V? initialVelocityVector);
     method public long getDurationNanos();
     method public T! getInitialValue();
     method public T! getTargetValue();
@@ -532,8 +526,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class TweenSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
-    ctor public TweenSpec(int durationMillis, int delay, androidx.compose.animation.core.Easing easing);
-    ctor public TweenSpec();
+    ctor public TweenSpec(optional int durationMillis, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
     method public int getDurationMillis();
     method public androidx.compose.animation.core.Easing getEasing();
@@ -605,7 +598,7 @@
   }
 
   public final class VectorizedInfiniteRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedAnimationSpec<V> {
-    ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
     method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -614,7 +607,7 @@
   }
 
   public final class VectorizedKeyframesSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, int delayMillis);
+    ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, optional int delayMillis);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -624,15 +617,14 @@
   }
 
   public final class VectorizedRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
-    ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
     method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
   }
 
   public final class VectorizedSnapSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedSnapSpec(int delayMillis);
-    ctor public VectorizedSnapSpec();
+    ctor public VectorizedSnapSpec(optional int delayMillis);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -642,7 +634,7 @@
   }
 
   public final class VectorizedSpringSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
-    ctor public VectorizedSpringSpec(float dampingRatio, float stiffness, V? visibilityThreshold);
+    ctor public VectorizedSpringSpec(optional float dampingRatio, optional float stiffness, optional V? visibilityThreshold);
     method public float getDampingRatio();
     method public float getStiffness();
     property public final float dampingRatio;
@@ -650,8 +642,7 @@
   }
 
   public final class VectorizedTweenSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedTweenSpec(int durationMillis, int delayMillis, androidx.compose.animation.core.Easing easing);
-    ctor public VectorizedTweenSpec();
+    ctor public VectorizedTweenSpec(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public androidx.compose.animation.core.Easing getEasing();
diff --git a/compose/animation/animation-core/api/restricted_current.txt b/compose/animation/animation-core/api/restricted_current.txt
index 7df77c6..421660d 100644
--- a/compose/animation/animation-core/api/restricted_current.txt
+++ b/compose/animation/animation-core/api/restricted_current.txt
@@ -5,7 +5,7 @@
   }
 
   public final class Animatable<T, V extends androidx.compose.animation.core.AnimationVector> {
-    ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? visibilityThreshold);
+    ctor public Animatable(T? initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional T? visibilityThreshold);
     method public suspend Object? animateDecay(T? initialVelocity, androidx.compose.animation.core.DecayAnimationSpec<T> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>> p);
     method public suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<T> animationSpec, optional T? initialVelocity, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Animatable<T,V>,kotlin.Unit>? block, optional kotlin.coroutines.Continuation<? super androidx.compose.animation.core.AnimationResult<T,V>> p);
     method public androidx.compose.runtime.State<T> asState();
@@ -122,7 +122,7 @@
   }
 
   public final class AnimationState<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.runtime.State<T> {
-    ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, V? initialVelocityVector, long lastFrameTimeNanos, long finishedTimeNanos, boolean isRunning);
+    ctor public AnimationState(androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, optional V? initialVelocityVector, optional long lastFrameTimeNanos, optional long finishedTimeNanos, optional boolean isRunning);
     method public long getFinishedTimeNanos();
     method public long getLastFrameTimeNanos();
     method public androidx.compose.animation.core.TwoWayConverter<T,V> getTypeConverter();
@@ -297,8 +297,7 @@
   }
 
   public final class FloatExponentialDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
-    ctor public FloatExponentialDecaySpec(float frictionMultiplier, float absVelocityThreshold);
-    ctor public FloatExponentialDecaySpec();
+    ctor public FloatExponentialDecaySpec(optional float frictionMultiplier, optional float absVelocityThreshold);
     method public float getAbsVelocityThreshold();
     method public long getDurationNanos(float initialValue, float initialVelocity);
     method public float getTargetValue(float initialValue, float initialVelocity);
@@ -308,8 +307,7 @@
   }
 
   public final class FloatSpringSpec implements androidx.compose.animation.core.FloatAnimationSpec {
-    ctor public FloatSpringSpec(float dampingRatio, float stiffness, float visibilityThreshold);
-    ctor public FloatSpringSpec();
+    ctor public FloatSpringSpec(optional float dampingRatio, optional float stiffness, optional float visibilityThreshold);
     method public float getDampingRatio();
     method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
     method public float getStiffness();
@@ -320,8 +318,7 @@
   }
 
   public final class FloatTweenSpec implements androidx.compose.animation.core.FloatAnimationSpec {
-    ctor public FloatTweenSpec(int duration, int delay, androidx.compose.animation.core.Easing easing);
-    ctor public FloatTweenSpec();
+    ctor public FloatTweenSpec(optional int duration, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
     method public int getDuration();
     method public long getDurationNanos(float initialValue, float targetValue, float initialVelocity);
@@ -347,7 +344,7 @@
   }
 
   public final class InfiniteRepeatableSpec<T> implements androidx.compose.animation.core.AnimationSpec<T> {
-    ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public InfiniteRepeatableSpec(androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
     method public androidx.compose.animation.core.RepeatMode getRepeatMode();
     method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
@@ -390,8 +387,7 @@
   }
 
   public final class ManualFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public ManualFrameClock(long initialTime);
-    ctor public ManualFrameClock();
+    ctor public ManualFrameClock(optional long initialTime);
     method public void advanceClock(long nanos);
     method public long getCurrentTime();
     method public boolean getHasAwaiters();
@@ -419,7 +415,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class RepeatableSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
-    ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public RepeatableSpec(int iterations, androidx.compose.animation.core.DurationBasedAnimationSpec<T> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public androidx.compose.animation.core.DurationBasedAnimationSpec<T> getAnimation();
     method public int getIterations();
     method public androidx.compose.animation.core.RepeatMode getRepeatMode();
@@ -430,8 +426,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class SnapSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
-    ctor public SnapSpec(int delay);
-    ctor public SnapSpec();
+    ctor public SnapSpec(optional int delay);
     method public int getDelay();
     method public <V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> vectorize(androidx.compose.animation.core.TwoWayConverter<T,V> converter);
     property public final int delay;
@@ -457,8 +452,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class SpringSpec<T> implements androidx.compose.animation.core.FiniteAnimationSpec<T> {
-    ctor public SpringSpec(float dampingRatio, float stiffness, T? visibilityThreshold);
-    ctor public SpringSpec();
+    ctor public SpringSpec(optional float dampingRatio, optional float stiffness, optional T? visibilityThreshold);
     method public float getDampingRatio();
     method public float getStiffness();
     method public T? getVisibilityThreshold();
@@ -477,7 +471,7 @@
   }
 
   public final class TargetBasedAnimation<T, V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.Animation<T,V> {
-    ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, V? initialVelocityVector);
+    ctor public TargetBasedAnimation(androidx.compose.animation.core.AnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, T? initialValue, T? targetValue, optional V? initialVelocityVector);
     method public long getDurationNanos();
     method public T! getInitialValue();
     method public T! getTargetValue();
@@ -532,8 +526,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class TweenSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
-    ctor public TweenSpec(int durationMillis, int delay, androidx.compose.animation.core.Easing easing);
-    ctor public TweenSpec();
+    ctor public TweenSpec(optional int durationMillis, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
     method public int getDurationMillis();
     method public androidx.compose.animation.core.Easing getEasing();
@@ -605,7 +598,7 @@
   }
 
   public final class VectorizedInfiniteRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedAnimationSpec<V> {
-    ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public VectorizedInfiniteRepeatableSpec(androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
     method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -614,7 +607,7 @@
   }
 
   public final class VectorizedKeyframesSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, int delayMillis);
+    ctor public VectorizedKeyframesSpec(java.util.Map<java.lang.Integer,? extends kotlin.Pair<? extends V,? extends androidx.compose.animation.core.Easing>> keyframes, int durationMillis, optional int delayMillis);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -624,15 +617,14 @@
   }
 
   public final class VectorizedRepeatableSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
-    ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, androidx.compose.animation.core.RepeatMode repeatMode);
+    ctor public VectorizedRepeatableSpec(int iterations, androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> animation, optional androidx.compose.animation.core.RepeatMode repeatMode);
     method public long getDurationNanos(V initialValue, V targetValue, V initialVelocity);
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
     method public V getVelocityFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
   }
 
   public final class VectorizedSnapSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedSnapSpec(int delayMillis);
-    ctor public VectorizedSnapSpec();
+    ctor public VectorizedSnapSpec(optional int delayMillis);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public V getValueFromNanos(long playTimeNanos, V initialValue, V targetValue, V initialVelocity);
@@ -642,7 +634,7 @@
   }
 
   public final class VectorizedSpringSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedFiniteAnimationSpec<V> {
-    ctor public VectorizedSpringSpec(float dampingRatio, float stiffness, V? visibilityThreshold);
+    ctor public VectorizedSpringSpec(optional float dampingRatio, optional float stiffness, optional V? visibilityThreshold);
     method public float getDampingRatio();
     method public float getStiffness();
     property public final float dampingRatio;
@@ -650,8 +642,7 @@
   }
 
   public final class VectorizedTweenSpec<V extends androidx.compose.animation.core.AnimationVector> implements androidx.compose.animation.core.VectorizedDurationBasedAnimationSpec<V> {
-    ctor public VectorizedTweenSpec(int durationMillis, int delayMillis, androidx.compose.animation.core.Easing easing);
-    ctor public VectorizedTweenSpec();
+    ctor public VectorizedTweenSpec(optional int durationMillis, optional int delayMillis, optional androidx.compose.animation.core.Easing easing);
     method public int getDelayMillis();
     method public int getDurationMillis();
     method public androidx.compose.animation.core.Easing getEasing();
diff --git a/compose/animation/animation/api/api_lint.ignore b/compose/animation/animation/api/api_lint.ignore
deleted file mode 100644
index a57ef99..0000000
--- a/compose/animation/animation/api/api_lint.ignore
+++ /dev/null
@@ -1,7 +0,0 @@
-// Baseline format: 1.0
-AutoBoxing: androidx.compose.animation.AnimatedFloatModel#getValue():
-    Must avoid boxed primitives (`java.lang.Float`)
-
-
-MissingNullability: androidx.compose.animation.AnimatedFloatModel#getValue():
-    Missing nullability on method `getValue` return
diff --git a/compose/foundation/foundation-layout/api/api_lint.ignore b/compose/foundation/foundation-layout/api/api_lint.ignore
deleted file mode 100644
index 4f85c43..0000000
--- a/compose/foundation/foundation-layout/api/api_lint.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-MutableBareField: androidx.compose.foundation.layout.State#layoutDirection:
-    Bare field layoutDirection must be marked final, or moved behind accessors if mutable
diff --git a/compose/foundation/foundation/api/1.0.0-beta02.txt b/compose/foundation/foundation/api/1.0.0-beta02.txt
index a41db302..f442eea 100644
--- a/compose/foundation/foundation/api/1.0.0-beta02.txt
+++ b/compose/foundation/foundation/api/1.0.0-beta02.txt
@@ -163,8 +163,7 @@
   }
 
   public final class GestureCancellationException extends java.util.concurrent.CancellationException {
-    ctor public GestureCancellationException(String? message);
-    ctor public GestureCancellationException();
+    ctor public GestureCancellationException(optional String? message);
   }
 
   public enum Orientation {
@@ -421,8 +420,7 @@
   }
 
   @androidx.compose.runtime.Stable public final class LazyListState implements androidx.compose.foundation.gestures.ScrollableState {
-    ctor public LazyListState(int firstVisibleItemIndex, int firstVisibleItemScrollOffset);
-    ctor public LazyListState();
+    ctor public LazyListState(optional int firstVisibleItemIndex, optional int firstVisibleItemScrollOffset);
     method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public float dispatchRawDelta(float delta);
     method public int getFirstVisibleItemIndex();
@@ -633,8 +631,7 @@
   }
 
   public final class KeyboardActions {
-    ctor public KeyboardActions(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
-    ctor public KeyboardActions();
+    ctor public KeyboardActions(optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnDone();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnGo();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnNext();
@@ -660,8 +657,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class KeyboardOptions {
-    ctor public KeyboardOptions(androidx.compose.ui.text.input.KeyboardCapitalization capitalization, boolean autoCorrect, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction);
-    ctor public KeyboardOptions();
+    ctor public KeyboardOptions(optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public androidx.compose.foundation.text.KeyboardOptions copy(optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public boolean getAutoCorrect();
     method public androidx.compose.ui.text.input.KeyboardCapitalization getCapitalization();
diff --git a/compose/foundation/foundation/api/current.txt b/compose/foundation/foundation/api/current.txt
index a41db302..f442eea 100644
--- a/compose/foundation/foundation/api/current.txt
+++ b/compose/foundation/foundation/api/current.txt
@@ -163,8 +163,7 @@
   }
 
   public final class GestureCancellationException extends java.util.concurrent.CancellationException {
-    ctor public GestureCancellationException(String? message);
-    ctor public GestureCancellationException();
+    ctor public GestureCancellationException(optional String? message);
   }
 
   public enum Orientation {
@@ -421,8 +420,7 @@
   }
 
   @androidx.compose.runtime.Stable public final class LazyListState implements androidx.compose.foundation.gestures.ScrollableState {
-    ctor public LazyListState(int firstVisibleItemIndex, int firstVisibleItemScrollOffset);
-    ctor public LazyListState();
+    ctor public LazyListState(optional int firstVisibleItemIndex, optional int firstVisibleItemScrollOffset);
     method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public float dispatchRawDelta(float delta);
     method public int getFirstVisibleItemIndex();
@@ -633,8 +631,7 @@
   }
 
   public final class KeyboardActions {
-    ctor public KeyboardActions(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
-    ctor public KeyboardActions();
+    ctor public KeyboardActions(optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnDone();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnGo();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnNext();
@@ -660,8 +657,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class KeyboardOptions {
-    ctor public KeyboardOptions(androidx.compose.ui.text.input.KeyboardCapitalization capitalization, boolean autoCorrect, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction);
-    ctor public KeyboardOptions();
+    ctor public KeyboardOptions(optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public androidx.compose.foundation.text.KeyboardOptions copy(optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public boolean getAutoCorrect();
     method public androidx.compose.ui.text.input.KeyboardCapitalization getCapitalization();
diff --git a/compose/foundation/foundation/api/public_plus_experimental_1.0.0-beta02.txt b/compose/foundation/foundation/api/public_plus_experimental_1.0.0-beta02.txt
index a41db302..f442eea 100644
--- a/compose/foundation/foundation/api/public_plus_experimental_1.0.0-beta02.txt
+++ b/compose/foundation/foundation/api/public_plus_experimental_1.0.0-beta02.txt
@@ -163,8 +163,7 @@
   }
 
   public final class GestureCancellationException extends java.util.concurrent.CancellationException {
-    ctor public GestureCancellationException(String? message);
-    ctor public GestureCancellationException();
+    ctor public GestureCancellationException(optional String? message);
   }
 
   public enum Orientation {
@@ -421,8 +420,7 @@
   }
 
   @androidx.compose.runtime.Stable public final class LazyListState implements androidx.compose.foundation.gestures.ScrollableState {
-    ctor public LazyListState(int firstVisibleItemIndex, int firstVisibleItemScrollOffset);
-    ctor public LazyListState();
+    ctor public LazyListState(optional int firstVisibleItemIndex, optional int firstVisibleItemScrollOffset);
     method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public float dispatchRawDelta(float delta);
     method public int getFirstVisibleItemIndex();
@@ -633,8 +631,7 @@
   }
 
   public final class KeyboardActions {
-    ctor public KeyboardActions(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
-    ctor public KeyboardActions();
+    ctor public KeyboardActions(optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnDone();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnGo();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnNext();
@@ -660,8 +657,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class KeyboardOptions {
-    ctor public KeyboardOptions(androidx.compose.ui.text.input.KeyboardCapitalization capitalization, boolean autoCorrect, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction);
-    ctor public KeyboardOptions();
+    ctor public KeyboardOptions(optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public androidx.compose.foundation.text.KeyboardOptions copy(optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public boolean getAutoCorrect();
     method public androidx.compose.ui.text.input.KeyboardCapitalization getCapitalization();
diff --git a/compose/foundation/foundation/api/public_plus_experimental_current.txt b/compose/foundation/foundation/api/public_plus_experimental_current.txt
index a41db302..f442eea 100644
--- a/compose/foundation/foundation/api/public_plus_experimental_current.txt
+++ b/compose/foundation/foundation/api/public_plus_experimental_current.txt
@@ -163,8 +163,7 @@
   }
 
   public final class GestureCancellationException extends java.util.concurrent.CancellationException {
-    ctor public GestureCancellationException(String? message);
-    ctor public GestureCancellationException();
+    ctor public GestureCancellationException(optional String? message);
   }
 
   public enum Orientation {
@@ -421,8 +420,7 @@
   }
 
   @androidx.compose.runtime.Stable public final class LazyListState implements androidx.compose.foundation.gestures.ScrollableState {
-    ctor public LazyListState(int firstVisibleItemIndex, int firstVisibleItemScrollOffset);
-    ctor public LazyListState();
+    ctor public LazyListState(optional int firstVisibleItemIndex, optional int firstVisibleItemScrollOffset);
     method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public float dispatchRawDelta(float delta);
     method public int getFirstVisibleItemIndex();
@@ -633,8 +631,7 @@
   }
 
   public final class KeyboardActions {
-    ctor public KeyboardActions(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
-    ctor public KeyboardActions();
+    ctor public KeyboardActions(optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnDone();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnGo();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnNext();
@@ -660,8 +657,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class KeyboardOptions {
-    ctor public KeyboardOptions(androidx.compose.ui.text.input.KeyboardCapitalization capitalization, boolean autoCorrect, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction);
-    ctor public KeyboardOptions();
+    ctor public KeyboardOptions(optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public androidx.compose.foundation.text.KeyboardOptions copy(optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public boolean getAutoCorrect();
     method public androidx.compose.ui.text.input.KeyboardCapitalization getCapitalization();
diff --git a/compose/foundation/foundation/api/restricted_1.0.0-beta02.txt b/compose/foundation/foundation/api/restricted_1.0.0-beta02.txt
index a41db302..f442eea 100644
--- a/compose/foundation/foundation/api/restricted_1.0.0-beta02.txt
+++ b/compose/foundation/foundation/api/restricted_1.0.0-beta02.txt
@@ -163,8 +163,7 @@
   }
 
   public final class GestureCancellationException extends java.util.concurrent.CancellationException {
-    ctor public GestureCancellationException(String? message);
-    ctor public GestureCancellationException();
+    ctor public GestureCancellationException(optional String? message);
   }
 
   public enum Orientation {
@@ -421,8 +420,7 @@
   }
 
   @androidx.compose.runtime.Stable public final class LazyListState implements androidx.compose.foundation.gestures.ScrollableState {
-    ctor public LazyListState(int firstVisibleItemIndex, int firstVisibleItemScrollOffset);
-    ctor public LazyListState();
+    ctor public LazyListState(optional int firstVisibleItemIndex, optional int firstVisibleItemScrollOffset);
     method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public float dispatchRawDelta(float delta);
     method public int getFirstVisibleItemIndex();
@@ -633,8 +631,7 @@
   }
 
   public final class KeyboardActions {
-    ctor public KeyboardActions(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
-    ctor public KeyboardActions();
+    ctor public KeyboardActions(optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnDone();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnGo();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnNext();
@@ -660,8 +657,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class KeyboardOptions {
-    ctor public KeyboardOptions(androidx.compose.ui.text.input.KeyboardCapitalization capitalization, boolean autoCorrect, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction);
-    ctor public KeyboardOptions();
+    ctor public KeyboardOptions(optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public androidx.compose.foundation.text.KeyboardOptions copy(optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public boolean getAutoCorrect();
     method public androidx.compose.ui.text.input.KeyboardCapitalization getCapitalization();
diff --git a/compose/foundation/foundation/api/restricted_current.txt b/compose/foundation/foundation/api/restricted_current.txt
index a41db302..f442eea 100644
--- a/compose/foundation/foundation/api/restricted_current.txt
+++ b/compose/foundation/foundation/api/restricted_current.txt
@@ -163,8 +163,7 @@
   }
 
   public final class GestureCancellationException extends java.util.concurrent.CancellationException {
-    ctor public GestureCancellationException(String? message);
-    ctor public GestureCancellationException();
+    ctor public GestureCancellationException(optional String? message);
   }
 
   public enum Orientation {
@@ -421,8 +420,7 @@
   }
 
   @androidx.compose.runtime.Stable public final class LazyListState implements androidx.compose.foundation.gestures.ScrollableState {
-    ctor public LazyListState(int firstVisibleItemIndex, int firstVisibleItemScrollOffset);
-    ctor public LazyListState();
+    ctor public LazyListState(optional int firstVisibleItemIndex, optional int firstVisibleItemScrollOffset);
     method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public float dispatchRawDelta(float delta);
     method public int getFirstVisibleItemIndex();
@@ -633,8 +631,7 @@
   }
 
   public final class KeyboardActions {
-    ctor public KeyboardActions(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
-    ctor public KeyboardActions();
+    ctor public KeyboardActions(optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onDone, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onGo, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onNext, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onPrevious, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSearch, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? onSend);
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnDone();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnGo();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.text.KeyboardActionScope,kotlin.Unit>? getOnNext();
@@ -660,8 +657,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class KeyboardOptions {
-    ctor public KeyboardOptions(androidx.compose.ui.text.input.KeyboardCapitalization capitalization, boolean autoCorrect, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction);
-    ctor public KeyboardOptions();
+    ctor public KeyboardOptions(optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public androidx.compose.foundation.text.KeyboardOptions copy(optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public boolean getAutoCorrect();
     method public androidx.compose.ui.text.input.KeyboardCapitalization getCapitalization();
diff --git a/compose/material/material/api/1.0.0-beta02.txt b/compose/material/material/api/1.0.0-beta02.txt
index 041d5bf10..72bd10a 100644
--- a/compose/material/material/api/1.0.0-beta02.txt
+++ b/compose/material/material/api/1.0.0-beta02.txt
@@ -50,7 +50,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BackdropScaffoldState extends androidx.compose.material.SwipeableState<androidx.compose.material.BackdropValue> {
-    ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, androidx.compose.material.SnackbarHostState snackbarHostState);
+    ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, optional androidx.compose.material.SnackbarHostState snackbarHostState);
     method public suspend Object? conceal(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public androidx.compose.material.SnackbarHostState getSnackbarHostState();
     method public boolean isConcealed();
@@ -72,7 +72,7 @@
   }
 
   public final class BottomDrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomDrawerValue> {
-    ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
+    ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isClosed();
@@ -131,7 +131,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BottomSheetState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomSheetValue> {
-    ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
+    ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? collapse(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isCollapsed();
@@ -272,7 +272,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public final class DismissState extends androidx.compose.material.SwipeableState<androidx.compose.material.DismissValue> {
-    ctor public DismissState(androidx.compose.material.DismissValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
+    ctor public DismissState(androidx.compose.material.DismissValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? dismiss(androidx.compose.material.DismissDirection direction, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public androidx.compose.material.DismissDirection? getDismissDirection();
     method public boolean isDismissed(androidx.compose.material.DismissDirection direction);
@@ -312,7 +312,7 @@
   }
 
   @androidx.compose.runtime.Stable public final class DrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.DrawerValue> {
-    ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+    ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isClosed();
     method public boolean isOpen();
@@ -431,7 +431,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public final class ModalBottomSheetState extends androidx.compose.material.SwipeableState<androidx.compose.material.ModalBottomSheetValue> {
-    ctor public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+    ctor public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? hide(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isVisible();
     method public suspend Object? show(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
@@ -484,7 +484,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class ResistanceConfig {
-    ctor public ResistanceConfig(float basis, float factorAtMin, float factorAtMax);
+    ctor public ResistanceConfig(float basis, optional float factorAtMin, optional float factorAtMax);
     method public float computeResistance(float overflow);
     method public float getBasis();
     method public float getFactorAtMax();
@@ -508,8 +508,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class Shapes {
-    ctor public Shapes(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
-    ctor public Shapes();
+    ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
     method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
@@ -624,7 +623,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public class SwipeableState<T> {
-    ctor public SwipeableState(T? initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
+    ctor public SwipeableState(T? initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
     method @androidx.compose.material.ExperimentalMaterialApi public final suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, optional kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public final T! getCurrentValue();
     method public final float getDirection();
@@ -741,7 +740,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class Typography {
-    ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle getBody1();
     method public androidx.compose.ui.text.TextStyle getBody2();
diff --git a/compose/material/material/api/current.txt b/compose/material/material/api/current.txt
index 041d5bf10..72bd10a 100644
--- a/compose/material/material/api/current.txt
+++ b/compose/material/material/api/current.txt
@@ -50,7 +50,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BackdropScaffoldState extends androidx.compose.material.SwipeableState<androidx.compose.material.BackdropValue> {
-    ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, androidx.compose.material.SnackbarHostState snackbarHostState);
+    ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, optional androidx.compose.material.SnackbarHostState snackbarHostState);
     method public suspend Object? conceal(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public androidx.compose.material.SnackbarHostState getSnackbarHostState();
     method public boolean isConcealed();
@@ -72,7 +72,7 @@
   }
 
   public final class BottomDrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomDrawerValue> {
-    ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
+    ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isClosed();
@@ -131,7 +131,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BottomSheetState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomSheetValue> {
-    ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
+    ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? collapse(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isCollapsed();
@@ -272,7 +272,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public final class DismissState extends androidx.compose.material.SwipeableState<androidx.compose.material.DismissValue> {
-    ctor public DismissState(androidx.compose.material.DismissValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
+    ctor public DismissState(androidx.compose.material.DismissValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? dismiss(androidx.compose.material.DismissDirection direction, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public androidx.compose.material.DismissDirection? getDismissDirection();
     method public boolean isDismissed(androidx.compose.material.DismissDirection direction);
@@ -312,7 +312,7 @@
   }
 
   @androidx.compose.runtime.Stable public final class DrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.DrawerValue> {
-    ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+    ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isClosed();
     method public boolean isOpen();
@@ -431,7 +431,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public final class ModalBottomSheetState extends androidx.compose.material.SwipeableState<androidx.compose.material.ModalBottomSheetValue> {
-    ctor public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+    ctor public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? hide(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isVisible();
     method public suspend Object? show(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
@@ -484,7 +484,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class ResistanceConfig {
-    ctor public ResistanceConfig(float basis, float factorAtMin, float factorAtMax);
+    ctor public ResistanceConfig(float basis, optional float factorAtMin, optional float factorAtMax);
     method public float computeResistance(float overflow);
     method public float getBasis();
     method public float getFactorAtMax();
@@ -508,8 +508,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class Shapes {
-    ctor public Shapes(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
-    ctor public Shapes();
+    ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
     method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
@@ -624,7 +623,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public class SwipeableState<T> {
-    ctor public SwipeableState(T? initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
+    ctor public SwipeableState(T? initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
     method @androidx.compose.material.ExperimentalMaterialApi public final suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, optional kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public final T! getCurrentValue();
     method public final float getDirection();
@@ -741,7 +740,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class Typography {
-    ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle getBody1();
     method public androidx.compose.ui.text.TextStyle getBody2();
diff --git a/compose/material/material/api/public_plus_experimental_1.0.0-beta02.txt b/compose/material/material/api/public_plus_experimental_1.0.0-beta02.txt
index 041d5bf10..72bd10a 100644
--- a/compose/material/material/api/public_plus_experimental_1.0.0-beta02.txt
+++ b/compose/material/material/api/public_plus_experimental_1.0.0-beta02.txt
@@ -50,7 +50,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BackdropScaffoldState extends androidx.compose.material.SwipeableState<androidx.compose.material.BackdropValue> {
-    ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, androidx.compose.material.SnackbarHostState snackbarHostState);
+    ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, optional androidx.compose.material.SnackbarHostState snackbarHostState);
     method public suspend Object? conceal(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public androidx.compose.material.SnackbarHostState getSnackbarHostState();
     method public boolean isConcealed();
@@ -72,7 +72,7 @@
   }
 
   public final class BottomDrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomDrawerValue> {
-    ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
+    ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isClosed();
@@ -131,7 +131,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BottomSheetState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomSheetValue> {
-    ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
+    ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? collapse(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isCollapsed();
@@ -272,7 +272,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public final class DismissState extends androidx.compose.material.SwipeableState<androidx.compose.material.DismissValue> {
-    ctor public DismissState(androidx.compose.material.DismissValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
+    ctor public DismissState(androidx.compose.material.DismissValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? dismiss(androidx.compose.material.DismissDirection direction, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public androidx.compose.material.DismissDirection? getDismissDirection();
     method public boolean isDismissed(androidx.compose.material.DismissDirection direction);
@@ -312,7 +312,7 @@
   }
 
   @androidx.compose.runtime.Stable public final class DrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.DrawerValue> {
-    ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+    ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isClosed();
     method public boolean isOpen();
@@ -431,7 +431,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public final class ModalBottomSheetState extends androidx.compose.material.SwipeableState<androidx.compose.material.ModalBottomSheetValue> {
-    ctor public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+    ctor public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? hide(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isVisible();
     method public suspend Object? show(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
@@ -484,7 +484,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class ResistanceConfig {
-    ctor public ResistanceConfig(float basis, float factorAtMin, float factorAtMax);
+    ctor public ResistanceConfig(float basis, optional float factorAtMin, optional float factorAtMax);
     method public float computeResistance(float overflow);
     method public float getBasis();
     method public float getFactorAtMax();
@@ -508,8 +508,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class Shapes {
-    ctor public Shapes(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
-    ctor public Shapes();
+    ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
     method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
@@ -624,7 +623,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public class SwipeableState<T> {
-    ctor public SwipeableState(T? initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
+    ctor public SwipeableState(T? initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
     method @androidx.compose.material.ExperimentalMaterialApi public final suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, optional kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public final T! getCurrentValue();
     method public final float getDirection();
@@ -741,7 +740,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class Typography {
-    ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle getBody1();
     method public androidx.compose.ui.text.TextStyle getBody2();
diff --git a/compose/material/material/api/public_plus_experimental_current.txt b/compose/material/material/api/public_plus_experimental_current.txt
index 041d5bf10..72bd10a 100644
--- a/compose/material/material/api/public_plus_experimental_current.txt
+++ b/compose/material/material/api/public_plus_experimental_current.txt
@@ -50,7 +50,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BackdropScaffoldState extends androidx.compose.material.SwipeableState<androidx.compose.material.BackdropValue> {
-    ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, androidx.compose.material.SnackbarHostState snackbarHostState);
+    ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, optional androidx.compose.material.SnackbarHostState snackbarHostState);
     method public suspend Object? conceal(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public androidx.compose.material.SnackbarHostState getSnackbarHostState();
     method public boolean isConcealed();
@@ -72,7 +72,7 @@
   }
 
   public final class BottomDrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomDrawerValue> {
-    ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
+    ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isClosed();
@@ -131,7 +131,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BottomSheetState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomSheetValue> {
-    ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
+    ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? collapse(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isCollapsed();
@@ -272,7 +272,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public final class DismissState extends androidx.compose.material.SwipeableState<androidx.compose.material.DismissValue> {
-    ctor public DismissState(androidx.compose.material.DismissValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
+    ctor public DismissState(androidx.compose.material.DismissValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? dismiss(androidx.compose.material.DismissDirection direction, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public androidx.compose.material.DismissDirection? getDismissDirection();
     method public boolean isDismissed(androidx.compose.material.DismissDirection direction);
@@ -312,7 +312,7 @@
   }
 
   @androidx.compose.runtime.Stable public final class DrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.DrawerValue> {
-    ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+    ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isClosed();
     method public boolean isOpen();
@@ -431,7 +431,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public final class ModalBottomSheetState extends androidx.compose.material.SwipeableState<androidx.compose.material.ModalBottomSheetValue> {
-    ctor public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+    ctor public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? hide(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isVisible();
     method public suspend Object? show(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
@@ -484,7 +484,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class ResistanceConfig {
-    ctor public ResistanceConfig(float basis, float factorAtMin, float factorAtMax);
+    ctor public ResistanceConfig(float basis, optional float factorAtMin, optional float factorAtMax);
     method public float computeResistance(float overflow);
     method public float getBasis();
     method public float getFactorAtMax();
@@ -508,8 +508,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class Shapes {
-    ctor public Shapes(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
-    ctor public Shapes();
+    ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
     method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
@@ -624,7 +623,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public class SwipeableState<T> {
-    ctor public SwipeableState(T? initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
+    ctor public SwipeableState(T? initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
     method @androidx.compose.material.ExperimentalMaterialApi public final suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, optional kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public final T! getCurrentValue();
     method public final float getDirection();
@@ -741,7 +740,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class Typography {
-    ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle getBody1();
     method public androidx.compose.ui.text.TextStyle getBody2();
diff --git a/compose/material/material/api/restricted_1.0.0-beta02.txt b/compose/material/material/api/restricted_1.0.0-beta02.txt
index 041d5bf10..72bd10a 100644
--- a/compose/material/material/api/restricted_1.0.0-beta02.txt
+++ b/compose/material/material/api/restricted_1.0.0-beta02.txt
@@ -50,7 +50,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BackdropScaffoldState extends androidx.compose.material.SwipeableState<androidx.compose.material.BackdropValue> {
-    ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, androidx.compose.material.SnackbarHostState snackbarHostState);
+    ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, optional androidx.compose.material.SnackbarHostState snackbarHostState);
     method public suspend Object? conceal(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public androidx.compose.material.SnackbarHostState getSnackbarHostState();
     method public boolean isConcealed();
@@ -72,7 +72,7 @@
   }
 
   public final class BottomDrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomDrawerValue> {
-    ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
+    ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isClosed();
@@ -131,7 +131,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BottomSheetState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomSheetValue> {
-    ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
+    ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? collapse(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isCollapsed();
@@ -272,7 +272,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public final class DismissState extends androidx.compose.material.SwipeableState<androidx.compose.material.DismissValue> {
-    ctor public DismissState(androidx.compose.material.DismissValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
+    ctor public DismissState(androidx.compose.material.DismissValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? dismiss(androidx.compose.material.DismissDirection direction, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public androidx.compose.material.DismissDirection? getDismissDirection();
     method public boolean isDismissed(androidx.compose.material.DismissDirection direction);
@@ -312,7 +312,7 @@
   }
 
   @androidx.compose.runtime.Stable public final class DrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.DrawerValue> {
-    ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+    ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isClosed();
     method public boolean isOpen();
@@ -431,7 +431,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public final class ModalBottomSheetState extends androidx.compose.material.SwipeableState<androidx.compose.material.ModalBottomSheetValue> {
-    ctor public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+    ctor public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? hide(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isVisible();
     method public suspend Object? show(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
@@ -484,7 +484,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class ResistanceConfig {
-    ctor public ResistanceConfig(float basis, float factorAtMin, float factorAtMax);
+    ctor public ResistanceConfig(float basis, optional float factorAtMin, optional float factorAtMax);
     method public float computeResistance(float overflow);
     method public float getBasis();
     method public float getFactorAtMax();
@@ -508,8 +508,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class Shapes {
-    ctor public Shapes(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
-    ctor public Shapes();
+    ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
     method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
@@ -624,7 +623,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public class SwipeableState<T> {
-    ctor public SwipeableState(T? initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
+    ctor public SwipeableState(T? initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
     method @androidx.compose.material.ExperimentalMaterialApi public final suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, optional kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public final T! getCurrentValue();
     method public final float getDirection();
@@ -741,7 +740,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class Typography {
-    ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle getBody1();
     method public androidx.compose.ui.text.TextStyle getBody2();
diff --git a/compose/material/material/api/restricted_current.txt b/compose/material/material/api/restricted_current.txt
index 041d5bf10..72bd10a 100644
--- a/compose/material/material/api/restricted_current.txt
+++ b/compose/material/material/api/restricted_current.txt
@@ -50,7 +50,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BackdropScaffoldState extends androidx.compose.material.SwipeableState<androidx.compose.material.BackdropValue> {
-    ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, androidx.compose.material.SnackbarHostState snackbarHostState);
+    ctor public BackdropScaffoldState(androidx.compose.material.BackdropValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BackdropValue,java.lang.Boolean> confirmStateChange, optional androidx.compose.material.SnackbarHostState snackbarHostState);
     method public suspend Object? conceal(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public androidx.compose.material.SnackbarHostState getSnackbarHostState();
     method public boolean isConcealed();
@@ -72,7 +72,7 @@
   }
 
   public final class BottomDrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomDrawerValue> {
-    ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
+    ctor public BottomDrawerState(androidx.compose.material.BottomDrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomDrawerValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isClosed();
@@ -131,7 +131,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public final class BottomSheetState extends androidx.compose.material.SwipeableState<androidx.compose.material.BottomSheetValue> {
-    ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
+    ctor public BottomSheetState(androidx.compose.material.BottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.BottomSheetValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? collapse(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? expand(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isCollapsed();
@@ -272,7 +272,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public final class DismissState extends androidx.compose.material.SwipeableState<androidx.compose.material.DismissValue> {
-    ctor public DismissState(androidx.compose.material.DismissValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
+    ctor public DismissState(androidx.compose.material.DismissValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DismissValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? dismiss(androidx.compose.material.DismissDirection direction, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public androidx.compose.material.DismissDirection? getDismissDirection();
     method public boolean isDismissed(androidx.compose.material.DismissDirection direction);
@@ -312,7 +312,7 @@
   }
 
   @androidx.compose.runtime.Stable public final class DrawerState extends androidx.compose.material.SwipeableState<androidx.compose.material.DrawerValue> {
-    ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
+    ctor public DrawerState(androidx.compose.material.DrawerValue initialValue, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.DrawerValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isClosed();
     method public boolean isOpen();
@@ -431,7 +431,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public final class ModalBottomSheetState extends androidx.compose.material.SwipeableState<androidx.compose.material.ModalBottomSheetValue> {
-    ctor public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
+    ctor public ModalBottomSheetState(androidx.compose.material.ModalBottomSheetValue initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.compose.material.ModalBottomSheetValue,java.lang.Boolean> confirmStateChange);
     method public suspend Object? hide(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public boolean isVisible();
     method public suspend Object? show(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
@@ -484,7 +484,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class ResistanceConfig {
-    ctor public ResistanceConfig(float basis, float factorAtMin, float factorAtMax);
+    ctor public ResistanceConfig(float basis, optional float factorAtMin, optional float factorAtMax);
     method public float computeResistance(float overflow);
     method public float getBasis();
     method public float getFactorAtMax();
@@ -508,8 +508,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class Shapes {
-    ctor public Shapes(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
-    ctor public Shapes();
+    ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
     method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
@@ -624,7 +623,7 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi @androidx.compose.runtime.Stable public class SwipeableState<T> {
-    ctor public SwipeableState(T? initialValue, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
+    ctor public SwipeableState(T? initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
     method @androidx.compose.material.ExperimentalMaterialApi public final suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, optional kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public final T! getCurrentValue();
     method public final float getDirection();
@@ -741,7 +740,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class Typography {
-    ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle h1, optional androidx.compose.ui.text.TextStyle h2, optional androidx.compose.ui.text.TextStyle h3, optional androidx.compose.ui.text.TextStyle h4, optional androidx.compose.ui.text.TextStyle h5, optional androidx.compose.ui.text.TextStyle h6, optional androidx.compose.ui.text.TextStyle subtitle1, optional androidx.compose.ui.text.TextStyle subtitle2, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption, optional androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle getBody1();
     method public androidx.compose.ui.text.TextStyle getBody2();
diff --git a/compose/runtime/runtime/api/1.0.0-beta02.txt b/compose/runtime/runtime/api/1.0.0-beta02.txt
index e94fadb..b91f011 100644
--- a/compose/runtime/runtime/api/1.0.0-beta02.txt
+++ b/compose/runtime/runtime/api/1.0.0-beta02.txt
@@ -41,8 +41,7 @@
   }
 
   public final class BroadcastFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public BroadcastFrameClock(kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
-    ctor public BroadcastFrameClock();
+    ctor public BroadcastFrameClock(optional kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
     method public void cancel(optional java.util.concurrent.CancellationException cancellationException);
     method public boolean getHasAwaiters();
     method public void sendFrame(long timeNanos);
@@ -380,11 +379,11 @@
     method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
     method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
     method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
     method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
     method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
     method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
diff --git a/compose/runtime/runtime/api/api_lint.ignore b/compose/runtime/runtime/api/api_lint.ignore
index 1f1e491..91c5bc3 100644
--- a/compose/runtime/runtime/api/api_lint.ignore
+++ b/compose/runtime/runtime/api/api_lint.ignore
@@ -49,3 +49,7 @@
     Should avoid odd sized primitives; use `int` instead of `byte` in parameter value in androidx.compose.runtime.Composer.changed(byte value)
 NoByteOrShort: androidx.compose.runtime.Composer#changed(short) parameter #0:
     Should avoid odd sized primitives; use `int` instead of `short` in parameter value in androidx.compose.runtime.Composer.changed(short value)
+
+
+NullableCollection: androidx.compose.runtime.snapshots.MutableSnapshot#getModified$metalava_module():
+    Return type of method androidx.compose.runtime.snapshots.MutableSnapshot.getModified$metalava_module() is a nullable collection (`java.util.Set`); must be non-null
diff --git a/compose/runtime/runtime/api/current.txt b/compose/runtime/runtime/api/current.txt
index e94fadb..b91f011 100644
--- a/compose/runtime/runtime/api/current.txt
+++ b/compose/runtime/runtime/api/current.txt
@@ -41,8 +41,7 @@
   }
 
   public final class BroadcastFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public BroadcastFrameClock(kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
-    ctor public BroadcastFrameClock();
+    ctor public BroadcastFrameClock(optional kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
     method public void cancel(optional java.util.concurrent.CancellationException cancellationException);
     method public boolean getHasAwaiters();
     method public void sendFrame(long timeNanos);
@@ -380,11 +379,11 @@
     method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
     method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
     method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
     method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
     method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
     method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
diff --git a/compose/runtime/runtime/api/public_plus_experimental_1.0.0-beta02.txt b/compose/runtime/runtime/api/public_plus_experimental_1.0.0-beta02.txt
index e94fadb..f900999d 100644
--- a/compose/runtime/runtime/api/public_plus_experimental_1.0.0-beta02.txt
+++ b/compose/runtime/runtime/api/public_plus_experimental_1.0.0-beta02.txt
@@ -41,8 +41,7 @@
   }
 
   public final class BroadcastFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public BroadcastFrameClock(kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
-    ctor public BroadcastFrameClock();
+    ctor public BroadcastFrameClock(optional kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
     method public void cancel(optional java.util.concurrent.CancellationException cancellationException);
     method public boolean getHasAwaiters();
     method public void sendFrame(long timeNanos);
diff --git a/compose/runtime/runtime/api/public_plus_experimental_current.txt b/compose/runtime/runtime/api/public_plus_experimental_current.txt
index e94fadb..f900999d 100644
--- a/compose/runtime/runtime/api/public_plus_experimental_current.txt
+++ b/compose/runtime/runtime/api/public_plus_experimental_current.txt
@@ -41,8 +41,7 @@
   }
 
   public final class BroadcastFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public BroadcastFrameClock(kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
-    ctor public BroadcastFrameClock();
+    ctor public BroadcastFrameClock(optional kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
     method public void cancel(optional java.util.concurrent.CancellationException cancellationException);
     method public boolean getHasAwaiters();
     method public void sendFrame(long timeNanos);
diff --git a/compose/runtime/runtime/api/restricted_1.0.0-beta02.txt b/compose/runtime/runtime/api/restricted_1.0.0-beta02.txt
index fd0e03e..b2b4419 100644
--- a/compose/runtime/runtime/api/restricted_1.0.0-beta02.txt
+++ b/compose/runtime/runtime/api/restricted_1.0.0-beta02.txt
@@ -42,8 +42,7 @@
   }
 
   public final class BroadcastFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public BroadcastFrameClock(kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
-    ctor public BroadcastFrameClock();
+    ctor public BroadcastFrameClock(optional kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
     method public void cancel(optional java.util.concurrent.CancellationException cancellationException);
     method public boolean getHasAwaiters();
     method public void sendFrame(long timeNanos);
@@ -405,11 +404,11 @@
     method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
     method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
     method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
     method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
     method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
     method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
diff --git a/compose/runtime/runtime/api/restricted_current.txt b/compose/runtime/runtime/api/restricted_current.txt
index fd0e03e..b2b4419 100644
--- a/compose/runtime/runtime/api/restricted_current.txt
+++ b/compose/runtime/runtime/api/restricted_current.txt
@@ -42,8 +42,7 @@
   }
 
   public final class BroadcastFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public BroadcastFrameClock(kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
-    ctor public BroadcastFrameClock();
+    ctor public BroadcastFrameClock(optional kotlin.jvm.functions.Function0<kotlin.Unit>? onNewAwaiters);
     method public void cancel(optional java.util.concurrent.CancellationException cancellationException);
     method public boolean getHasAwaiters();
     method public void sendFrame(long timeNanos);
@@ -405,11 +404,11 @@
     method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
     method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, optional androidx.compose.runtime.SnapshotMutationPolicy<T> policy);
     method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
-    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> produceState(T? initialValue, Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.ProduceStateScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> producer);
     method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
     method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.State<T> rememberUpdatedState(T? newValue);
     method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
diff --git a/compose/ui/ui-graphics/api/1.0.0-beta02.txt b/compose/ui/ui-graphics/api/1.0.0-beta02.txt
index 49af2a6..4ac2634 100644
--- a/compose/ui/ui-graphics/api/1.0.0-beta02.txt
+++ b/compose/ui/ui-graphics/api/1.0.0-beta02.txt
@@ -74,8 +74,7 @@
   }
 
   public final class AndroidPath implements androidx.compose.ui.graphics.Path {
-    ctor public AndroidPath(android.graphics.Path internalPath);
-    ctor public AndroidPath();
+    ctor public AndroidPath(optional android.graphics.Path internalPath);
     method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
     method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
     method public void addOval(androidx.compose.ui.geometry.Rect oval);
@@ -325,7 +324,7 @@
 
   public final inline class ColorMatrix {
     ctor public ColorMatrix();
-    method public static float[]! constructor-impl(float[] values);
+    method public static float[]! constructor-impl(optional float[] values);
     method public static void convertRgbToYuv-impl(float[]! $this);
     method public static void convertYuvToRgb-impl(float[]! $this);
     method public static inline boolean equals-impl(float[]! p, Object? p1);
@@ -397,7 +396,7 @@
 
   public final inline class Matrix {
     ctor public Matrix();
-    method public static float[]! constructor-impl(float[] values);
+    method public static float[]! constructor-impl(optional float[] values);
     method public static inline boolean equals-impl(float[]! p, Object? p1);
     method public static boolean equals-impl0(float[] p1, float[] p2);
     method public static inline operator float get-impl(float[] $this, int row, int column);
@@ -877,7 +876,7 @@
   }
 
   public final class TransferParameters {
-    ctor public TransferParameters(double gamma, double a, double b, double c, double d, double e, double f);
+    ctor public TransferParameters(double gamma, double a, double b, double c, double d, optional double e, optional double f);
     method public double component1();
     method public double component2();
     method public double component3();
@@ -1049,8 +1048,7 @@
   }
 
   public final class Stroke extends androidx.compose.ui.graphics.drawscope.DrawStyle {
-    ctor public Stroke(float width, float miter, androidx.compose.ui.graphics.StrokeCap cap, androidx.compose.ui.graphics.StrokeJoin join, androidx.compose.ui.graphics.PathEffect? pathEffect);
-    ctor public Stroke();
+    ctor public Stroke(optional float width, optional float miter, optional androidx.compose.ui.graphics.StrokeCap cap, optional androidx.compose.ui.graphics.StrokeJoin join, optional androidx.compose.ui.graphics.PathEffect? pathEffect);
     method public androidx.compose.ui.graphics.StrokeCap getCap();
     method public androidx.compose.ui.graphics.StrokeJoin getJoin();
     method public float getMiter();
diff --git a/compose/ui/ui-graphics/api/current.txt b/compose/ui/ui-graphics/api/current.txt
index 49af2a6..4ac2634 100644
--- a/compose/ui/ui-graphics/api/current.txt
+++ b/compose/ui/ui-graphics/api/current.txt
@@ -74,8 +74,7 @@
   }
 
   public final class AndroidPath implements androidx.compose.ui.graphics.Path {
-    ctor public AndroidPath(android.graphics.Path internalPath);
-    ctor public AndroidPath();
+    ctor public AndroidPath(optional android.graphics.Path internalPath);
     method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
     method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
     method public void addOval(androidx.compose.ui.geometry.Rect oval);
@@ -325,7 +324,7 @@
 
   public final inline class ColorMatrix {
     ctor public ColorMatrix();
-    method public static float[]! constructor-impl(float[] values);
+    method public static float[]! constructor-impl(optional float[] values);
     method public static void convertRgbToYuv-impl(float[]! $this);
     method public static void convertYuvToRgb-impl(float[]! $this);
     method public static inline boolean equals-impl(float[]! p, Object? p1);
@@ -397,7 +396,7 @@
 
   public final inline class Matrix {
     ctor public Matrix();
-    method public static float[]! constructor-impl(float[] values);
+    method public static float[]! constructor-impl(optional float[] values);
     method public static inline boolean equals-impl(float[]! p, Object? p1);
     method public static boolean equals-impl0(float[] p1, float[] p2);
     method public static inline operator float get-impl(float[] $this, int row, int column);
@@ -877,7 +876,7 @@
   }
 
   public final class TransferParameters {
-    ctor public TransferParameters(double gamma, double a, double b, double c, double d, double e, double f);
+    ctor public TransferParameters(double gamma, double a, double b, double c, double d, optional double e, optional double f);
     method public double component1();
     method public double component2();
     method public double component3();
@@ -1049,8 +1048,7 @@
   }
 
   public final class Stroke extends androidx.compose.ui.graphics.drawscope.DrawStyle {
-    ctor public Stroke(float width, float miter, androidx.compose.ui.graphics.StrokeCap cap, androidx.compose.ui.graphics.StrokeJoin join, androidx.compose.ui.graphics.PathEffect? pathEffect);
-    ctor public Stroke();
+    ctor public Stroke(optional float width, optional float miter, optional androidx.compose.ui.graphics.StrokeCap cap, optional androidx.compose.ui.graphics.StrokeJoin join, optional androidx.compose.ui.graphics.PathEffect? pathEffect);
     method public androidx.compose.ui.graphics.StrokeCap getCap();
     method public androidx.compose.ui.graphics.StrokeJoin getJoin();
     method public float getMiter();
diff --git a/compose/ui/ui-graphics/api/public_plus_experimental_1.0.0-beta02.txt b/compose/ui/ui-graphics/api/public_plus_experimental_1.0.0-beta02.txt
index 49af2a6..4ac2634 100644
--- a/compose/ui/ui-graphics/api/public_plus_experimental_1.0.0-beta02.txt
+++ b/compose/ui/ui-graphics/api/public_plus_experimental_1.0.0-beta02.txt
@@ -74,8 +74,7 @@
   }
 
   public final class AndroidPath implements androidx.compose.ui.graphics.Path {
-    ctor public AndroidPath(android.graphics.Path internalPath);
-    ctor public AndroidPath();
+    ctor public AndroidPath(optional android.graphics.Path internalPath);
     method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
     method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
     method public void addOval(androidx.compose.ui.geometry.Rect oval);
@@ -325,7 +324,7 @@
 
   public final inline class ColorMatrix {
     ctor public ColorMatrix();
-    method public static float[]! constructor-impl(float[] values);
+    method public static float[]! constructor-impl(optional float[] values);
     method public static void convertRgbToYuv-impl(float[]! $this);
     method public static void convertYuvToRgb-impl(float[]! $this);
     method public static inline boolean equals-impl(float[]! p, Object? p1);
@@ -397,7 +396,7 @@
 
   public final inline class Matrix {
     ctor public Matrix();
-    method public static float[]! constructor-impl(float[] values);
+    method public static float[]! constructor-impl(optional float[] values);
     method public static inline boolean equals-impl(float[]! p, Object? p1);
     method public static boolean equals-impl0(float[] p1, float[] p2);
     method public static inline operator float get-impl(float[] $this, int row, int column);
@@ -877,7 +876,7 @@
   }
 
   public final class TransferParameters {
-    ctor public TransferParameters(double gamma, double a, double b, double c, double d, double e, double f);
+    ctor public TransferParameters(double gamma, double a, double b, double c, double d, optional double e, optional double f);
     method public double component1();
     method public double component2();
     method public double component3();
@@ -1049,8 +1048,7 @@
   }
 
   public final class Stroke extends androidx.compose.ui.graphics.drawscope.DrawStyle {
-    ctor public Stroke(float width, float miter, androidx.compose.ui.graphics.StrokeCap cap, androidx.compose.ui.graphics.StrokeJoin join, androidx.compose.ui.graphics.PathEffect? pathEffect);
-    ctor public Stroke();
+    ctor public Stroke(optional float width, optional float miter, optional androidx.compose.ui.graphics.StrokeCap cap, optional androidx.compose.ui.graphics.StrokeJoin join, optional androidx.compose.ui.graphics.PathEffect? pathEffect);
     method public androidx.compose.ui.graphics.StrokeCap getCap();
     method public androidx.compose.ui.graphics.StrokeJoin getJoin();
     method public float getMiter();
diff --git a/compose/ui/ui-graphics/api/public_plus_experimental_current.txt b/compose/ui/ui-graphics/api/public_plus_experimental_current.txt
index 49af2a6..4ac2634 100644
--- a/compose/ui/ui-graphics/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-graphics/api/public_plus_experimental_current.txt
@@ -74,8 +74,7 @@
   }
 
   public final class AndroidPath implements androidx.compose.ui.graphics.Path {
-    ctor public AndroidPath(android.graphics.Path internalPath);
-    ctor public AndroidPath();
+    ctor public AndroidPath(optional android.graphics.Path internalPath);
     method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
     method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
     method public void addOval(androidx.compose.ui.geometry.Rect oval);
@@ -325,7 +324,7 @@
 
   public final inline class ColorMatrix {
     ctor public ColorMatrix();
-    method public static float[]! constructor-impl(float[] values);
+    method public static float[]! constructor-impl(optional float[] values);
     method public static void convertRgbToYuv-impl(float[]! $this);
     method public static void convertYuvToRgb-impl(float[]! $this);
     method public static inline boolean equals-impl(float[]! p, Object? p1);
@@ -397,7 +396,7 @@
 
   public final inline class Matrix {
     ctor public Matrix();
-    method public static float[]! constructor-impl(float[] values);
+    method public static float[]! constructor-impl(optional float[] values);
     method public static inline boolean equals-impl(float[]! p, Object? p1);
     method public static boolean equals-impl0(float[] p1, float[] p2);
     method public static inline operator float get-impl(float[] $this, int row, int column);
@@ -877,7 +876,7 @@
   }
 
   public final class TransferParameters {
-    ctor public TransferParameters(double gamma, double a, double b, double c, double d, double e, double f);
+    ctor public TransferParameters(double gamma, double a, double b, double c, double d, optional double e, optional double f);
     method public double component1();
     method public double component2();
     method public double component3();
@@ -1049,8 +1048,7 @@
   }
 
   public final class Stroke extends androidx.compose.ui.graphics.drawscope.DrawStyle {
-    ctor public Stroke(float width, float miter, androidx.compose.ui.graphics.StrokeCap cap, androidx.compose.ui.graphics.StrokeJoin join, androidx.compose.ui.graphics.PathEffect? pathEffect);
-    ctor public Stroke();
+    ctor public Stroke(optional float width, optional float miter, optional androidx.compose.ui.graphics.StrokeCap cap, optional androidx.compose.ui.graphics.StrokeJoin join, optional androidx.compose.ui.graphics.PathEffect? pathEffect);
     method public androidx.compose.ui.graphics.StrokeCap getCap();
     method public androidx.compose.ui.graphics.StrokeJoin getJoin();
     method public float getMiter();
diff --git a/compose/ui/ui-graphics/api/restricted_1.0.0-beta02.txt b/compose/ui/ui-graphics/api/restricted_1.0.0-beta02.txt
index ec4a395..398edf5 100644
--- a/compose/ui/ui-graphics/api/restricted_1.0.0-beta02.txt
+++ b/compose/ui/ui-graphics/api/restricted_1.0.0-beta02.txt
@@ -104,8 +104,7 @@
   }
 
   public final class AndroidPath implements androidx.compose.ui.graphics.Path {
-    ctor public AndroidPath(android.graphics.Path internalPath);
-    ctor public AndroidPath();
+    ctor public AndroidPath(optional android.graphics.Path internalPath);
     method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
     method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
     method public void addOval(androidx.compose.ui.geometry.Rect oval);
@@ -356,7 +355,7 @@
 
   public final inline class ColorMatrix {
     ctor public ColorMatrix();
-    method public static float[]! constructor-impl(float[] values);
+    method public static float[]! constructor-impl(optional float[] values);
     method public static void convertRgbToYuv-impl(float[]! $this);
     method public static void convertYuvToRgb-impl(float[]! $this);
     method public static inline boolean equals-impl(float[]! p, Object? p1);
@@ -429,7 +428,7 @@
 
   public final inline class Matrix {
     ctor public Matrix();
-    method public static float[]! constructor-impl(float[] values);
+    method public static float[]! constructor-impl(optional float[] values);
     method public static inline boolean equals-impl(float[]! p, Object? p1);
     method public static boolean equals-impl0(float[] p1, float[] p2);
     method public static inline operator float get-impl(float[] $this, int row, int column);
@@ -909,7 +908,7 @@
   }
 
   public final class TransferParameters {
-    ctor public TransferParameters(double gamma, double a, double b, double c, double d, double e, double f);
+    ctor public TransferParameters(double gamma, double a, double b, double c, double d, optional double e, optional double f);
     method public double component1();
     method public double component2();
     method public double component3();
@@ -1105,8 +1104,7 @@
   }
 
   public final class Stroke extends androidx.compose.ui.graphics.drawscope.DrawStyle {
-    ctor public Stroke(float width, float miter, androidx.compose.ui.graphics.StrokeCap cap, androidx.compose.ui.graphics.StrokeJoin join, androidx.compose.ui.graphics.PathEffect? pathEffect);
-    ctor public Stroke();
+    ctor public Stroke(optional float width, optional float miter, optional androidx.compose.ui.graphics.StrokeCap cap, optional androidx.compose.ui.graphics.StrokeJoin join, optional androidx.compose.ui.graphics.PathEffect? pathEffect);
     method public androidx.compose.ui.graphics.StrokeCap getCap();
     method public androidx.compose.ui.graphics.StrokeJoin getJoin();
     method public float getMiter();
diff --git a/compose/ui/ui-graphics/api/restricted_current.txt b/compose/ui/ui-graphics/api/restricted_current.txt
index ec4a395..398edf5 100644
--- a/compose/ui/ui-graphics/api/restricted_current.txt
+++ b/compose/ui/ui-graphics/api/restricted_current.txt
@@ -104,8 +104,7 @@
   }
 
   public final class AndroidPath implements androidx.compose.ui.graphics.Path {
-    ctor public AndroidPath(android.graphics.Path internalPath);
-    ctor public AndroidPath();
+    ctor public AndroidPath(optional android.graphics.Path internalPath);
     method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
     method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
     method public void addOval(androidx.compose.ui.geometry.Rect oval);
@@ -356,7 +355,7 @@
 
   public final inline class ColorMatrix {
     ctor public ColorMatrix();
-    method public static float[]! constructor-impl(float[] values);
+    method public static float[]! constructor-impl(optional float[] values);
     method public static void convertRgbToYuv-impl(float[]! $this);
     method public static void convertYuvToRgb-impl(float[]! $this);
     method public static inline boolean equals-impl(float[]! p, Object? p1);
@@ -429,7 +428,7 @@
 
   public final inline class Matrix {
     ctor public Matrix();
-    method public static float[]! constructor-impl(float[] values);
+    method public static float[]! constructor-impl(optional float[] values);
     method public static inline boolean equals-impl(float[]! p, Object? p1);
     method public static boolean equals-impl0(float[] p1, float[] p2);
     method public static inline operator float get-impl(float[] $this, int row, int column);
@@ -909,7 +908,7 @@
   }
 
   public final class TransferParameters {
-    ctor public TransferParameters(double gamma, double a, double b, double c, double d, double e, double f);
+    ctor public TransferParameters(double gamma, double a, double b, double c, double d, optional double e, optional double f);
     method public double component1();
     method public double component2();
     method public double component3();
@@ -1105,8 +1104,7 @@
   }
 
   public final class Stroke extends androidx.compose.ui.graphics.drawscope.DrawStyle {
-    ctor public Stroke(float width, float miter, androidx.compose.ui.graphics.StrokeCap cap, androidx.compose.ui.graphics.StrokeJoin join, androidx.compose.ui.graphics.PathEffect? pathEffect);
-    ctor public Stroke();
+    ctor public Stroke(optional float width, optional float miter, optional androidx.compose.ui.graphics.StrokeCap cap, optional androidx.compose.ui.graphics.StrokeJoin join, optional androidx.compose.ui.graphics.PathEffect? pathEffect);
     method public androidx.compose.ui.graphics.StrokeCap getCap();
     method public androidx.compose.ui.graphics.StrokeJoin getJoin();
     method public float getMiter();
diff --git a/compose/ui/ui-test/api/1.0.0-beta02.txt b/compose/ui/ui-test/api/1.0.0-beta02.txt
index 963ed71..d1bbe8e 100644
--- a/compose/ui/ui-test/api/1.0.0-beta02.txt
+++ b/compose/ui/ui-test/api/1.0.0-beta02.txt
@@ -196,7 +196,7 @@
   }
 
   public final class SelectionResult {
-    ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, String? customErrorOnNoMatch);
+    ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, optional String? customErrorOnNoMatch);
     method public String? getCustomErrorOnNoMatch();
     method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> getSelectedNodes();
     property public final String? customErrorOnNoMatch;
@@ -256,7 +256,7 @@
   }
 
   public final class SemanticsSelector {
-    ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
+    ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, optional androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
     method public String getDescription();
     method public androidx.compose.ui.test.SelectionResult map(Iterable<androidx.compose.ui.semantics.SemanticsNode> nodes, String errorOnFail);
     property public final String description;
@@ -269,7 +269,7 @@
   }
 
   @kotlinx.coroutines.ExperimentalCoroutinesApi public final class TestMonotonicFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.test.DelayController delayController, long frameDelayNanos);
+    ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.test.DelayController delayController, optional long frameDelayNanos);
     method public long getFrameDelayNanos();
     method public boolean getHasAwaiters();
     method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
diff --git a/compose/ui/ui-test/api/current.txt b/compose/ui/ui-test/api/current.txt
index 963ed71..d1bbe8e 100644
--- a/compose/ui/ui-test/api/current.txt
+++ b/compose/ui/ui-test/api/current.txt
@@ -196,7 +196,7 @@
   }
 
   public final class SelectionResult {
-    ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, String? customErrorOnNoMatch);
+    ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, optional String? customErrorOnNoMatch);
     method public String? getCustomErrorOnNoMatch();
     method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> getSelectedNodes();
     property public final String? customErrorOnNoMatch;
@@ -256,7 +256,7 @@
   }
 
   public final class SemanticsSelector {
-    ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
+    ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, optional androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
     method public String getDescription();
     method public androidx.compose.ui.test.SelectionResult map(Iterable<androidx.compose.ui.semantics.SemanticsNode> nodes, String errorOnFail);
     property public final String description;
@@ -269,7 +269,7 @@
   }
 
   @kotlinx.coroutines.ExperimentalCoroutinesApi public final class TestMonotonicFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.test.DelayController delayController, long frameDelayNanos);
+    ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.test.DelayController delayController, optional long frameDelayNanos);
     method public long getFrameDelayNanos();
     method public boolean getHasAwaiters();
     method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
diff --git a/compose/ui/ui-test/api/public_plus_experimental_1.0.0-beta02.txt b/compose/ui/ui-test/api/public_plus_experimental_1.0.0-beta02.txt
index 963ed71..d1bbe8e 100644
--- a/compose/ui/ui-test/api/public_plus_experimental_1.0.0-beta02.txt
+++ b/compose/ui/ui-test/api/public_plus_experimental_1.0.0-beta02.txt
@@ -196,7 +196,7 @@
   }
 
   public final class SelectionResult {
-    ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, String? customErrorOnNoMatch);
+    ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, optional String? customErrorOnNoMatch);
     method public String? getCustomErrorOnNoMatch();
     method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> getSelectedNodes();
     property public final String? customErrorOnNoMatch;
@@ -256,7 +256,7 @@
   }
 
   public final class SemanticsSelector {
-    ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
+    ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, optional androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
     method public String getDescription();
     method public androidx.compose.ui.test.SelectionResult map(Iterable<androidx.compose.ui.semantics.SemanticsNode> nodes, String errorOnFail);
     property public final String description;
@@ -269,7 +269,7 @@
   }
 
   @kotlinx.coroutines.ExperimentalCoroutinesApi public final class TestMonotonicFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.test.DelayController delayController, long frameDelayNanos);
+    ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.test.DelayController delayController, optional long frameDelayNanos);
     method public long getFrameDelayNanos();
     method public boolean getHasAwaiters();
     method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
diff --git a/compose/ui/ui-test/api/public_plus_experimental_current.txt b/compose/ui/ui-test/api/public_plus_experimental_current.txt
index 963ed71..d1bbe8e 100644
--- a/compose/ui/ui-test/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-test/api/public_plus_experimental_current.txt
@@ -196,7 +196,7 @@
   }
 
   public final class SelectionResult {
-    ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, String? customErrorOnNoMatch);
+    ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, optional String? customErrorOnNoMatch);
     method public String? getCustomErrorOnNoMatch();
     method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> getSelectedNodes();
     property public final String? customErrorOnNoMatch;
@@ -256,7 +256,7 @@
   }
 
   public final class SemanticsSelector {
-    ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
+    ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, optional androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
     method public String getDescription();
     method public androidx.compose.ui.test.SelectionResult map(Iterable<androidx.compose.ui.semantics.SemanticsNode> nodes, String errorOnFail);
     property public final String description;
@@ -269,7 +269,7 @@
   }
 
   @kotlinx.coroutines.ExperimentalCoroutinesApi public final class TestMonotonicFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.test.DelayController delayController, long frameDelayNanos);
+    ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.test.DelayController delayController, optional long frameDelayNanos);
     method public long getFrameDelayNanos();
     method public boolean getHasAwaiters();
     method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
diff --git a/compose/ui/ui-test/api/restricted_1.0.0-beta02.txt b/compose/ui/ui-test/api/restricted_1.0.0-beta02.txt
index 963ed71..d1bbe8e 100644
--- a/compose/ui/ui-test/api/restricted_1.0.0-beta02.txt
+++ b/compose/ui/ui-test/api/restricted_1.0.0-beta02.txt
@@ -196,7 +196,7 @@
   }
 
   public final class SelectionResult {
-    ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, String? customErrorOnNoMatch);
+    ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, optional String? customErrorOnNoMatch);
     method public String? getCustomErrorOnNoMatch();
     method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> getSelectedNodes();
     property public final String? customErrorOnNoMatch;
@@ -256,7 +256,7 @@
   }
 
   public final class SemanticsSelector {
-    ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
+    ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, optional androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
     method public String getDescription();
     method public androidx.compose.ui.test.SelectionResult map(Iterable<androidx.compose.ui.semantics.SemanticsNode> nodes, String errorOnFail);
     property public final String description;
@@ -269,7 +269,7 @@
   }
 
   @kotlinx.coroutines.ExperimentalCoroutinesApi public final class TestMonotonicFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.test.DelayController delayController, long frameDelayNanos);
+    ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.test.DelayController delayController, optional long frameDelayNanos);
     method public long getFrameDelayNanos();
     method public boolean getHasAwaiters();
     method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
diff --git a/compose/ui/ui-test/api/restricted_current.txt b/compose/ui/ui-test/api/restricted_current.txt
index 963ed71..d1bbe8e 100644
--- a/compose/ui/ui-test/api/restricted_current.txt
+++ b/compose/ui/ui-test/api/restricted_current.txt
@@ -196,7 +196,7 @@
   }
 
   public final class SelectionResult {
-    ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, String? customErrorOnNoMatch);
+    ctor public SelectionResult(java.util.List<androidx.compose.ui.semantics.SemanticsNode> selectedNodes, optional String? customErrorOnNoMatch);
     method public String? getCustomErrorOnNoMatch();
     method public java.util.List<androidx.compose.ui.semantics.SemanticsNode> getSelectedNodes();
     property public final String? customErrorOnNoMatch;
@@ -256,7 +256,7 @@
   }
 
   public final class SemanticsSelector {
-    ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
+    ctor public SemanticsSelector(String description, boolean requiresExactlyOneNode, optional androidx.compose.ui.test.SemanticsSelector? chainedInputSelector, kotlin.jvm.functions.Function1<? super java.lang.Iterable<androidx.compose.ui.semantics.SemanticsNode>,androidx.compose.ui.test.SelectionResult> selector);
     method public String getDescription();
     method public androidx.compose.ui.test.SelectionResult map(Iterable<androidx.compose.ui.semantics.SemanticsNode> nodes, String errorOnFail);
     property public final String description;
@@ -269,7 +269,7 @@
   }
 
   @kotlinx.coroutines.ExperimentalCoroutinesApi public final class TestMonotonicFrameClock implements androidx.compose.runtime.MonotonicFrameClock {
-    ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.test.DelayController delayController, long frameDelayNanos);
+    ctor public TestMonotonicFrameClock(kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.test.DelayController delayController, optional long frameDelayNanos);
     method public long getFrameDelayNanos();
     method public boolean getHasAwaiters();
     method public suspend <R> Object? withFrameNanos(kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
diff --git a/compose/ui/ui-text/api/1.0.0-beta02.txt b/compose/ui/ui-text/api/1.0.0-beta02.txt
index 03711bf..00cd8e6 100644
--- a/compose/ui/ui-text/api/1.0.0-beta02.txt
+++ b/compose/ui/ui-text/api/1.0.0-beta02.txt
@@ -5,7 +5,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class AnnotatedString implements java.lang.CharSequence {
-    ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
+    ctor public AnnotatedString(String text, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public operator char get(int index);
     method public int getLength();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
@@ -24,8 +24,7 @@
   }
 
   public static final class AnnotatedString.Builder {
-    ctor public AnnotatedString.Builder(int capacity);
-    ctor public AnnotatedString.Builder();
+    ctor public AnnotatedString.Builder(optional int capacity);
     ctor public AnnotatedString.Builder(String text);
     ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
     method public void addStringAnnotation(String tag, String annotation, int start, int end);
@@ -85,8 +84,8 @@
   }
 
   public final class MultiParagraph {
-    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, float width);
-    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -738,8 +737,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class ImeOptions {
-    ctor public ImeOptions(boolean singleLine, androidx.compose.ui.text.input.KeyboardCapitalization capitalization, boolean autoCorrect, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction);
-    ctor public ImeOptions();
+    ctor public ImeOptions(optional boolean singleLine, optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public androidx.compose.ui.text.input.ImeOptions copy(optional boolean singleLine, optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public boolean getAutoCorrect();
     method public androidx.compose.ui.text.input.KeyboardCapitalization getCapitalization();
@@ -801,8 +799,7 @@
   }
 
   public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
-    ctor public PasswordVisualTransformation(char mask);
-    ctor public PasswordVisualTransformation();
+    ctor public PasswordVisualTransformation(optional char mask);
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
     method public char getMask();
     property public final char mask;
@@ -1068,8 +1065,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
-    ctor public TextGeometricTransform(float scaleX, float skewX);
-    ctor public TextGeometricTransform();
+    ctor public TextGeometricTransform(optional float scaleX, optional float skewX);
     method public androidx.compose.ui.text.style.TextGeometricTransform copy(optional float scaleX, optional float skewX);
     method public operator boolean equals(Object? other);
     method public float getScaleX();
diff --git a/compose/ui/ui-text/api/api_lint.ignore b/compose/ui/ui-text/api/api_lint.ignore
index 04e1505..1202086 100644
--- a/compose/ui/ui-text/api/api_lint.ignore
+++ b/compose/ui/ui-text/api/api_lint.ignore
@@ -37,6 +37,12 @@
     Missing nullability on method `toString-impl` return
 
 
+NullableCollection: androidx.compose.ui.text.SpanStyle#getLocaleList():
+    Return type of method androidx.compose.ui.text.SpanStyle.getLocaleList() is a nullable collection (`androidx.compose.ui.text.intl.LocaleList`); must be non-null
+NullableCollection: androidx.compose.ui.text.TextStyle#getLocaleList():
+    Return type of method androidx.compose.ui.text.TextStyle.getLocaleList() is a nullable collection (`androidx.compose.ui.text.intl.LocaleList`); must be non-null
+
+
 SetterReturnsThis: androidx.compose.ui.text.AnnotatedString.Builder#addStringAnnotation(String, String, int, int):
     Methods must return the builder object (return type androidx.compose.ui.text.AnnotatedString.Builder instead of void): method androidx.compose.ui.text.AnnotatedString.Builder.addStringAnnotation(String,String,int,int)
 SetterReturnsThis: androidx.compose.ui.text.AnnotatedString.Builder#addStyle(androidx.compose.ui.text.ParagraphStyle, int, int):
diff --git a/compose/ui/ui-text/api/current.txt b/compose/ui/ui-text/api/current.txt
index 03711bf..00cd8e6 100644
--- a/compose/ui/ui-text/api/current.txt
+++ b/compose/ui/ui-text/api/current.txt
@@ -5,7 +5,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class AnnotatedString implements java.lang.CharSequence {
-    ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
+    ctor public AnnotatedString(String text, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public operator char get(int index);
     method public int getLength();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
@@ -24,8 +24,7 @@
   }
 
   public static final class AnnotatedString.Builder {
-    ctor public AnnotatedString.Builder(int capacity);
-    ctor public AnnotatedString.Builder();
+    ctor public AnnotatedString.Builder(optional int capacity);
     ctor public AnnotatedString.Builder(String text);
     ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
     method public void addStringAnnotation(String tag, String annotation, int start, int end);
@@ -85,8 +84,8 @@
   }
 
   public final class MultiParagraph {
-    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, float width);
-    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -738,8 +737,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class ImeOptions {
-    ctor public ImeOptions(boolean singleLine, androidx.compose.ui.text.input.KeyboardCapitalization capitalization, boolean autoCorrect, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction);
-    ctor public ImeOptions();
+    ctor public ImeOptions(optional boolean singleLine, optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public androidx.compose.ui.text.input.ImeOptions copy(optional boolean singleLine, optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public boolean getAutoCorrect();
     method public androidx.compose.ui.text.input.KeyboardCapitalization getCapitalization();
@@ -801,8 +799,7 @@
   }
 
   public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
-    ctor public PasswordVisualTransformation(char mask);
-    ctor public PasswordVisualTransformation();
+    ctor public PasswordVisualTransformation(optional char mask);
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
     method public char getMask();
     property public final char mask;
@@ -1068,8 +1065,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
-    ctor public TextGeometricTransform(float scaleX, float skewX);
-    ctor public TextGeometricTransform();
+    ctor public TextGeometricTransform(optional float scaleX, optional float skewX);
     method public androidx.compose.ui.text.style.TextGeometricTransform copy(optional float scaleX, optional float skewX);
     method public operator boolean equals(Object? other);
     method public float getScaleX();
diff --git a/compose/ui/ui-text/api/public_plus_experimental_1.0.0-beta02.txt b/compose/ui/ui-text/api/public_plus_experimental_1.0.0-beta02.txt
index 03711bf..00cd8e6 100644
--- a/compose/ui/ui-text/api/public_plus_experimental_1.0.0-beta02.txt
+++ b/compose/ui/ui-text/api/public_plus_experimental_1.0.0-beta02.txt
@@ -5,7 +5,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class AnnotatedString implements java.lang.CharSequence {
-    ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
+    ctor public AnnotatedString(String text, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public operator char get(int index);
     method public int getLength();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
@@ -24,8 +24,7 @@
   }
 
   public static final class AnnotatedString.Builder {
-    ctor public AnnotatedString.Builder(int capacity);
-    ctor public AnnotatedString.Builder();
+    ctor public AnnotatedString.Builder(optional int capacity);
     ctor public AnnotatedString.Builder(String text);
     ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
     method public void addStringAnnotation(String tag, String annotation, int start, int end);
@@ -85,8 +84,8 @@
   }
 
   public final class MultiParagraph {
-    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, float width);
-    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -738,8 +737,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class ImeOptions {
-    ctor public ImeOptions(boolean singleLine, androidx.compose.ui.text.input.KeyboardCapitalization capitalization, boolean autoCorrect, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction);
-    ctor public ImeOptions();
+    ctor public ImeOptions(optional boolean singleLine, optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public androidx.compose.ui.text.input.ImeOptions copy(optional boolean singleLine, optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public boolean getAutoCorrect();
     method public androidx.compose.ui.text.input.KeyboardCapitalization getCapitalization();
@@ -801,8 +799,7 @@
   }
 
   public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
-    ctor public PasswordVisualTransformation(char mask);
-    ctor public PasswordVisualTransformation();
+    ctor public PasswordVisualTransformation(optional char mask);
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
     method public char getMask();
     property public final char mask;
@@ -1068,8 +1065,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
-    ctor public TextGeometricTransform(float scaleX, float skewX);
-    ctor public TextGeometricTransform();
+    ctor public TextGeometricTransform(optional float scaleX, optional float skewX);
     method public androidx.compose.ui.text.style.TextGeometricTransform copy(optional float scaleX, optional float skewX);
     method public operator boolean equals(Object? other);
     method public float getScaleX();
diff --git a/compose/ui/ui-text/api/public_plus_experimental_current.txt b/compose/ui/ui-text/api/public_plus_experimental_current.txt
index 03711bf..00cd8e6 100644
--- a/compose/ui/ui-text/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-text/api/public_plus_experimental_current.txt
@@ -5,7 +5,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class AnnotatedString implements java.lang.CharSequence {
-    ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
+    ctor public AnnotatedString(String text, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public operator char get(int index);
     method public int getLength();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
@@ -24,8 +24,7 @@
   }
 
   public static final class AnnotatedString.Builder {
-    ctor public AnnotatedString.Builder(int capacity);
-    ctor public AnnotatedString.Builder();
+    ctor public AnnotatedString.Builder(optional int capacity);
     ctor public AnnotatedString.Builder(String text);
     ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
     method public void addStringAnnotation(String tag, String annotation, int start, int end);
@@ -85,8 +84,8 @@
   }
 
   public final class MultiParagraph {
-    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, float width);
-    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -738,8 +737,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class ImeOptions {
-    ctor public ImeOptions(boolean singleLine, androidx.compose.ui.text.input.KeyboardCapitalization capitalization, boolean autoCorrect, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction);
-    ctor public ImeOptions();
+    ctor public ImeOptions(optional boolean singleLine, optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public androidx.compose.ui.text.input.ImeOptions copy(optional boolean singleLine, optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public boolean getAutoCorrect();
     method public androidx.compose.ui.text.input.KeyboardCapitalization getCapitalization();
@@ -801,8 +799,7 @@
   }
 
   public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
-    ctor public PasswordVisualTransformation(char mask);
-    ctor public PasswordVisualTransformation();
+    ctor public PasswordVisualTransformation(optional char mask);
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
     method public char getMask();
     property public final char mask;
@@ -1068,8 +1065,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
-    ctor public TextGeometricTransform(float scaleX, float skewX);
-    ctor public TextGeometricTransform();
+    ctor public TextGeometricTransform(optional float scaleX, optional float skewX);
     method public androidx.compose.ui.text.style.TextGeometricTransform copy(optional float scaleX, optional float skewX);
     method public operator boolean equals(Object? other);
     method public float getScaleX();
diff --git a/compose/ui/ui-text/api/restricted_1.0.0-beta02.txt b/compose/ui/ui-text/api/restricted_1.0.0-beta02.txt
index 03711bf..00cd8e6 100644
--- a/compose/ui/ui-text/api/restricted_1.0.0-beta02.txt
+++ b/compose/ui/ui-text/api/restricted_1.0.0-beta02.txt
@@ -5,7 +5,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class AnnotatedString implements java.lang.CharSequence {
-    ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
+    ctor public AnnotatedString(String text, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public operator char get(int index);
     method public int getLength();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
@@ -24,8 +24,7 @@
   }
 
   public static final class AnnotatedString.Builder {
-    ctor public AnnotatedString.Builder(int capacity);
-    ctor public AnnotatedString.Builder();
+    ctor public AnnotatedString.Builder(optional int capacity);
     ctor public AnnotatedString.Builder(String text);
     ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
     method public void addStringAnnotation(String tag, String annotation, int start, int end);
@@ -85,8 +84,8 @@
   }
 
   public final class MultiParagraph {
-    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, float width);
-    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -738,8 +737,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class ImeOptions {
-    ctor public ImeOptions(boolean singleLine, androidx.compose.ui.text.input.KeyboardCapitalization capitalization, boolean autoCorrect, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction);
-    ctor public ImeOptions();
+    ctor public ImeOptions(optional boolean singleLine, optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public androidx.compose.ui.text.input.ImeOptions copy(optional boolean singleLine, optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public boolean getAutoCorrect();
     method public androidx.compose.ui.text.input.KeyboardCapitalization getCapitalization();
@@ -801,8 +799,7 @@
   }
 
   public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
-    ctor public PasswordVisualTransformation(char mask);
-    ctor public PasswordVisualTransformation();
+    ctor public PasswordVisualTransformation(optional char mask);
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
     method public char getMask();
     property public final char mask;
@@ -1068,8 +1065,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
-    ctor public TextGeometricTransform(float scaleX, float skewX);
-    ctor public TextGeometricTransform();
+    ctor public TextGeometricTransform(optional float scaleX, optional float skewX);
     method public androidx.compose.ui.text.style.TextGeometricTransform copy(optional float scaleX, optional float skewX);
     method public operator boolean equals(Object? other);
     method public float getScaleX();
diff --git a/compose/ui/ui-text/api/restricted_current.txt b/compose/ui/ui-text/api/restricted_current.txt
index 03711bf..00cd8e6 100644
--- a/compose/ui/ui-text/api/restricted_current.txt
+++ b/compose/ui/ui-text/api/restricted_current.txt
@@ -5,7 +5,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class AnnotatedString implements java.lang.CharSequence {
-    ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
+    ctor public AnnotatedString(String text, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public operator char get(int index);
     method public int getLength();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
@@ -24,8 +24,7 @@
   }
 
   public static final class AnnotatedString.Builder {
-    ctor public AnnotatedString.Builder(int capacity);
-    ctor public AnnotatedString.Builder();
+    ctor public AnnotatedString.Builder(optional int capacity);
     ctor public AnnotatedString.Builder(String text);
     ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
     method public void addStringAnnotation(String tag, String annotation, int start, int end);
@@ -85,8 +84,8 @@
   }
 
   public final class MultiParagraph {
-    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, float width);
-    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, optional int maxLines, optional boolean ellipsis, float width);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional int maxLines, optional boolean ellipsis, float width, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -738,8 +737,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class ImeOptions {
-    ctor public ImeOptions(boolean singleLine, androidx.compose.ui.text.input.KeyboardCapitalization capitalization, boolean autoCorrect, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction);
-    ctor public ImeOptions();
+    ctor public ImeOptions(optional boolean singleLine, optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public androidx.compose.ui.text.input.ImeOptions copy(optional boolean singleLine, optional androidx.compose.ui.text.input.KeyboardCapitalization capitalization, optional boolean autoCorrect, optional androidx.compose.ui.text.input.KeyboardType keyboardType, optional androidx.compose.ui.text.input.ImeAction imeAction);
     method public boolean getAutoCorrect();
     method public androidx.compose.ui.text.input.KeyboardCapitalization getCapitalization();
@@ -801,8 +799,7 @@
   }
 
   public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
-    ctor public PasswordVisualTransformation(char mask);
-    ctor public PasswordVisualTransformation();
+    ctor public PasswordVisualTransformation(optional char mask);
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
     method public char getMask();
     property public final char mask;
@@ -1068,8 +1065,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
-    ctor public TextGeometricTransform(float scaleX, float skewX);
-    ctor public TextGeometricTransform();
+    ctor public TextGeometricTransform(optional float scaleX, optional float skewX);
     method public androidx.compose.ui.text.style.TextGeometricTransform copy(optional float scaleX, optional float skewX);
     method public operator boolean equals(Object? other);
     method public float getScaleX();
diff --git a/compose/ui/ui/api/1.0.0-beta02.txt b/compose/ui/ui/api/1.0.0-beta02.txt
index 9725abc..c23776f 100644
--- a/compose/ui/ui/api/1.0.0-beta02.txt
+++ b/compose/ui/ui/api/1.0.0-beta02.txt
@@ -168,7 +168,7 @@
   }
 
   @androidx.compose.ui.ExperimentalComposeUiApi public final class AutofillNode {
-    ctor public AutofillNode(java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    ctor public AutofillNode(optional java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, optional androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.compose.ui.autofill.AutofillType> getAutofillTypes();
     method public androidx.compose.ui.geometry.Rect? getBoundingBox();
     method public int getId();
@@ -1387,8 +1387,7 @@
   }
 
   public final class ConsumedData {
-    ctor public ConsumedData(boolean positionChange, boolean downChange);
-    ctor public ConsumedData();
+    ctor public ConsumedData(optional boolean positionChange, optional boolean downChange);
     method public boolean getDownChange();
     method public boolean getPositionChange();
     method public void setDownChange(boolean p);
@@ -1721,7 +1720,7 @@
   }
 
   public final class ModifierInfo {
-    ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, Object? extra);
+    ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, optional Object? extra);
     method public androidx.compose.ui.layout.LayoutCoordinates getCoordinates();
     method public Object? getExtra();
     method public androidx.compose.ui.Modifier getModifier();
@@ -1880,8 +1879,8 @@
 package androidx.compose.ui.platform {
 
   public abstract class AbstractComposeView extends android.view.ViewGroup {
-    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
-    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+    ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
     ctor public AbstractComposeView(android.content.Context context);
     method @androidx.compose.runtime.Composable public abstract void Content();
     method public final void createComposition();
@@ -1969,8 +1968,8 @@
   }
 
   public final class ComposeView extends androidx.compose.ui.platform.AbstractComposeView {
-    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
-    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+    ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
     ctor public ComposeView(android.content.Context context);
     method @androidx.compose.runtime.Composable public void Content();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
@@ -2254,7 +2253,7 @@
   }
 
   public final class ProgressBarRangeInfo {
-    ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, int steps);
+    ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional int steps);
     method public float getCurrent();
     method public kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> getRange();
     method public int getSteps();
@@ -2279,7 +2278,7 @@
   }
 
   public final class ScrollAxisRange {
-    ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, boolean reverseScrolling);
+    ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, optional boolean reverseScrolling);
     method public kotlin.jvm.functions.Function0<java.lang.Float> getMaxValue();
     method public boolean getReverseScrolling();
     method public kotlin.jvm.functions.Function0<java.lang.Float> getValue();
@@ -2501,7 +2500,7 @@
   }
 
   public final class SemanticsPropertyKey<T> {
-    ctor public SemanticsPropertyKey(String name, kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
+    ctor public SemanticsPropertyKey(String name, optional kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
     method public String getName();
     method public operator T! getValue(androidx.compose.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property);
     method public T? merge(T? parentValue, T? childValue);
@@ -2564,8 +2563,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class DialogProperties {
-    ctor public DialogProperties(boolean dismissOnBackPress, boolean dismissOnClickOutside, androidx.compose.ui.window.SecureFlagPolicy securePolicy);
-    ctor public DialogProperties();
+    ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
     method public boolean getDismissOnBackPress();
     method public boolean getDismissOnClickOutside();
     method public androidx.compose.ui.window.SecureFlagPolicy getSecurePolicy();
@@ -2584,8 +2582,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class PopupProperties {
-    ctor public PopupProperties(boolean focusable, boolean dismissOnBackPress, boolean dismissOnClickOutside, androidx.compose.ui.window.SecureFlagPolicy securePolicy);
-    ctor public PopupProperties();
+    ctor public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
     method public boolean getDismissOnBackPress();
     method public boolean getDismissOnClickOutside();
     method public boolean getFocusable();
diff --git a/compose/ui/ui/api/api_lint.ignore b/compose/ui/ui/api/api_lint.ignore
index 0f09d85..5a5edf2 100644
--- a/compose/ui/ui/api/api_lint.ignore
+++ b/compose/ui/ui/api/api_lint.ignore
@@ -23,17 +23,3 @@
     Missing nullability on parameter `p` in method `toString-impl`
 MissingNullability: androidx.compose.ui.input.pointer.PointerId#toString-impl(long):
     Missing nullability on method `toString-impl` return
-MissingNullability: androidx.compose.ui.layout.Measured#constructor-impl(androidx.compose.ui.layout.Placeable):
-    Missing nullability on method `constructor-impl` return
-MissingNullability: androidx.compose.ui.layout.Measured#equals-impl(androidx.compose.ui.layout.Placeable, Object) parameter #0:
-    Missing nullability on parameter `p` in method `equals-impl`
-MissingNullability: androidx.compose.ui.layout.Measured#getHeight-impl(androidx.compose.ui.layout.Placeable) parameter #0:
-    Missing nullability on parameter `$this` in method `getHeight-impl`
-MissingNullability: androidx.compose.ui.layout.Measured#getWidth-impl(androidx.compose.ui.layout.Placeable) parameter #0:
-    Missing nullability on parameter `$this` in method `getWidth-impl`
-MissingNullability: androidx.compose.ui.layout.Measured#hashCode-impl(androidx.compose.ui.layout.Placeable) parameter #0:
-    Missing nullability on parameter `p` in method `hashCode-impl`
-MissingNullability: androidx.compose.ui.layout.Measured#toString-impl(androidx.compose.ui.layout.Placeable):
-    Missing nullability on method `toString-impl` return
-MissingNullability: androidx.compose.ui.layout.Measured#toString-impl(androidx.compose.ui.layout.Placeable) parameter #0:
-    Missing nullability on parameter `p` in method `toString-impl`
diff --git a/compose/ui/ui/api/current.txt b/compose/ui/ui/api/current.txt
index 9725abc..c23776f 100644
--- a/compose/ui/ui/api/current.txt
+++ b/compose/ui/ui/api/current.txt
@@ -168,7 +168,7 @@
   }
 
   @androidx.compose.ui.ExperimentalComposeUiApi public final class AutofillNode {
-    ctor public AutofillNode(java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    ctor public AutofillNode(optional java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, optional androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.compose.ui.autofill.AutofillType> getAutofillTypes();
     method public androidx.compose.ui.geometry.Rect? getBoundingBox();
     method public int getId();
@@ -1387,8 +1387,7 @@
   }
 
   public final class ConsumedData {
-    ctor public ConsumedData(boolean positionChange, boolean downChange);
-    ctor public ConsumedData();
+    ctor public ConsumedData(optional boolean positionChange, optional boolean downChange);
     method public boolean getDownChange();
     method public boolean getPositionChange();
     method public void setDownChange(boolean p);
@@ -1721,7 +1720,7 @@
   }
 
   public final class ModifierInfo {
-    ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, Object? extra);
+    ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, optional Object? extra);
     method public androidx.compose.ui.layout.LayoutCoordinates getCoordinates();
     method public Object? getExtra();
     method public androidx.compose.ui.Modifier getModifier();
@@ -1880,8 +1879,8 @@
 package androidx.compose.ui.platform {
 
   public abstract class AbstractComposeView extends android.view.ViewGroup {
-    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
-    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+    ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
     ctor public AbstractComposeView(android.content.Context context);
     method @androidx.compose.runtime.Composable public abstract void Content();
     method public final void createComposition();
@@ -1969,8 +1968,8 @@
   }
 
   public final class ComposeView extends androidx.compose.ui.platform.AbstractComposeView {
-    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
-    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+    ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
     ctor public ComposeView(android.content.Context context);
     method @androidx.compose.runtime.Composable public void Content();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
@@ -2254,7 +2253,7 @@
   }
 
   public final class ProgressBarRangeInfo {
-    ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, int steps);
+    ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional int steps);
     method public float getCurrent();
     method public kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> getRange();
     method public int getSteps();
@@ -2279,7 +2278,7 @@
   }
 
   public final class ScrollAxisRange {
-    ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, boolean reverseScrolling);
+    ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, optional boolean reverseScrolling);
     method public kotlin.jvm.functions.Function0<java.lang.Float> getMaxValue();
     method public boolean getReverseScrolling();
     method public kotlin.jvm.functions.Function0<java.lang.Float> getValue();
@@ -2501,7 +2500,7 @@
   }
 
   public final class SemanticsPropertyKey<T> {
-    ctor public SemanticsPropertyKey(String name, kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
+    ctor public SemanticsPropertyKey(String name, optional kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
     method public String getName();
     method public operator T! getValue(androidx.compose.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property);
     method public T? merge(T? parentValue, T? childValue);
@@ -2564,8 +2563,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class DialogProperties {
-    ctor public DialogProperties(boolean dismissOnBackPress, boolean dismissOnClickOutside, androidx.compose.ui.window.SecureFlagPolicy securePolicy);
-    ctor public DialogProperties();
+    ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
     method public boolean getDismissOnBackPress();
     method public boolean getDismissOnClickOutside();
     method public androidx.compose.ui.window.SecureFlagPolicy getSecurePolicy();
@@ -2584,8 +2582,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class PopupProperties {
-    ctor public PopupProperties(boolean focusable, boolean dismissOnBackPress, boolean dismissOnClickOutside, androidx.compose.ui.window.SecureFlagPolicy securePolicy);
-    ctor public PopupProperties();
+    ctor public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
     method public boolean getDismissOnBackPress();
     method public boolean getDismissOnClickOutside();
     method public boolean getFocusable();
diff --git a/compose/ui/ui/api/public_plus_experimental_1.0.0-beta02.txt b/compose/ui/ui/api/public_plus_experimental_1.0.0-beta02.txt
index 9725abc..c23776f 100644
--- a/compose/ui/ui/api/public_plus_experimental_1.0.0-beta02.txt
+++ b/compose/ui/ui/api/public_plus_experimental_1.0.0-beta02.txt
@@ -168,7 +168,7 @@
   }
 
   @androidx.compose.ui.ExperimentalComposeUiApi public final class AutofillNode {
-    ctor public AutofillNode(java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    ctor public AutofillNode(optional java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, optional androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.compose.ui.autofill.AutofillType> getAutofillTypes();
     method public androidx.compose.ui.geometry.Rect? getBoundingBox();
     method public int getId();
@@ -1387,8 +1387,7 @@
   }
 
   public final class ConsumedData {
-    ctor public ConsumedData(boolean positionChange, boolean downChange);
-    ctor public ConsumedData();
+    ctor public ConsumedData(optional boolean positionChange, optional boolean downChange);
     method public boolean getDownChange();
     method public boolean getPositionChange();
     method public void setDownChange(boolean p);
@@ -1721,7 +1720,7 @@
   }
 
   public final class ModifierInfo {
-    ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, Object? extra);
+    ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, optional Object? extra);
     method public androidx.compose.ui.layout.LayoutCoordinates getCoordinates();
     method public Object? getExtra();
     method public androidx.compose.ui.Modifier getModifier();
@@ -1880,8 +1879,8 @@
 package androidx.compose.ui.platform {
 
   public abstract class AbstractComposeView extends android.view.ViewGroup {
-    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
-    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+    ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
     ctor public AbstractComposeView(android.content.Context context);
     method @androidx.compose.runtime.Composable public abstract void Content();
     method public final void createComposition();
@@ -1969,8 +1968,8 @@
   }
 
   public final class ComposeView extends androidx.compose.ui.platform.AbstractComposeView {
-    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
-    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+    ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
     ctor public ComposeView(android.content.Context context);
     method @androidx.compose.runtime.Composable public void Content();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
@@ -2254,7 +2253,7 @@
   }
 
   public final class ProgressBarRangeInfo {
-    ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, int steps);
+    ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional int steps);
     method public float getCurrent();
     method public kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> getRange();
     method public int getSteps();
@@ -2279,7 +2278,7 @@
   }
 
   public final class ScrollAxisRange {
-    ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, boolean reverseScrolling);
+    ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, optional boolean reverseScrolling);
     method public kotlin.jvm.functions.Function0<java.lang.Float> getMaxValue();
     method public boolean getReverseScrolling();
     method public kotlin.jvm.functions.Function0<java.lang.Float> getValue();
@@ -2501,7 +2500,7 @@
   }
 
   public final class SemanticsPropertyKey<T> {
-    ctor public SemanticsPropertyKey(String name, kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
+    ctor public SemanticsPropertyKey(String name, optional kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
     method public String getName();
     method public operator T! getValue(androidx.compose.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property);
     method public T? merge(T? parentValue, T? childValue);
@@ -2564,8 +2563,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class DialogProperties {
-    ctor public DialogProperties(boolean dismissOnBackPress, boolean dismissOnClickOutside, androidx.compose.ui.window.SecureFlagPolicy securePolicy);
-    ctor public DialogProperties();
+    ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
     method public boolean getDismissOnBackPress();
     method public boolean getDismissOnClickOutside();
     method public androidx.compose.ui.window.SecureFlagPolicy getSecurePolicy();
@@ -2584,8 +2582,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class PopupProperties {
-    ctor public PopupProperties(boolean focusable, boolean dismissOnBackPress, boolean dismissOnClickOutside, androidx.compose.ui.window.SecureFlagPolicy securePolicy);
-    ctor public PopupProperties();
+    ctor public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
     method public boolean getDismissOnBackPress();
     method public boolean getDismissOnClickOutside();
     method public boolean getFocusable();
diff --git a/compose/ui/ui/api/public_plus_experimental_current.txt b/compose/ui/ui/api/public_plus_experimental_current.txt
index 9725abc..c23776f 100644
--- a/compose/ui/ui/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui/api/public_plus_experimental_current.txt
@@ -168,7 +168,7 @@
   }
 
   @androidx.compose.ui.ExperimentalComposeUiApi public final class AutofillNode {
-    ctor public AutofillNode(java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    ctor public AutofillNode(optional java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, optional androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.compose.ui.autofill.AutofillType> getAutofillTypes();
     method public androidx.compose.ui.geometry.Rect? getBoundingBox();
     method public int getId();
@@ -1387,8 +1387,7 @@
   }
 
   public final class ConsumedData {
-    ctor public ConsumedData(boolean positionChange, boolean downChange);
-    ctor public ConsumedData();
+    ctor public ConsumedData(optional boolean positionChange, optional boolean downChange);
     method public boolean getDownChange();
     method public boolean getPositionChange();
     method public void setDownChange(boolean p);
@@ -1721,7 +1720,7 @@
   }
 
   public final class ModifierInfo {
-    ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, Object? extra);
+    ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, optional Object? extra);
     method public androidx.compose.ui.layout.LayoutCoordinates getCoordinates();
     method public Object? getExtra();
     method public androidx.compose.ui.Modifier getModifier();
@@ -1880,8 +1879,8 @@
 package androidx.compose.ui.platform {
 
   public abstract class AbstractComposeView extends android.view.ViewGroup {
-    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
-    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+    ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
     ctor public AbstractComposeView(android.content.Context context);
     method @androidx.compose.runtime.Composable public abstract void Content();
     method public final void createComposition();
@@ -1969,8 +1968,8 @@
   }
 
   public final class ComposeView extends androidx.compose.ui.platform.AbstractComposeView {
-    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
-    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+    ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
     ctor public ComposeView(android.content.Context context);
     method @androidx.compose.runtime.Composable public void Content();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
@@ -2254,7 +2253,7 @@
   }
 
   public final class ProgressBarRangeInfo {
-    ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, int steps);
+    ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional int steps);
     method public float getCurrent();
     method public kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> getRange();
     method public int getSteps();
@@ -2279,7 +2278,7 @@
   }
 
   public final class ScrollAxisRange {
-    ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, boolean reverseScrolling);
+    ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, optional boolean reverseScrolling);
     method public kotlin.jvm.functions.Function0<java.lang.Float> getMaxValue();
     method public boolean getReverseScrolling();
     method public kotlin.jvm.functions.Function0<java.lang.Float> getValue();
@@ -2501,7 +2500,7 @@
   }
 
   public final class SemanticsPropertyKey<T> {
-    ctor public SemanticsPropertyKey(String name, kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
+    ctor public SemanticsPropertyKey(String name, optional kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
     method public String getName();
     method public operator T! getValue(androidx.compose.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property);
     method public T? merge(T? parentValue, T? childValue);
@@ -2564,8 +2563,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class DialogProperties {
-    ctor public DialogProperties(boolean dismissOnBackPress, boolean dismissOnClickOutside, androidx.compose.ui.window.SecureFlagPolicy securePolicy);
-    ctor public DialogProperties();
+    ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
     method public boolean getDismissOnBackPress();
     method public boolean getDismissOnClickOutside();
     method public androidx.compose.ui.window.SecureFlagPolicy getSecurePolicy();
@@ -2584,8 +2582,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class PopupProperties {
-    ctor public PopupProperties(boolean focusable, boolean dismissOnBackPress, boolean dismissOnClickOutside, androidx.compose.ui.window.SecureFlagPolicy securePolicy);
-    ctor public PopupProperties();
+    ctor public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
     method public boolean getDismissOnBackPress();
     method public boolean getDismissOnClickOutside();
     method public boolean getFocusable();
diff --git a/compose/ui/ui/api/restricted_1.0.0-beta02.txt b/compose/ui/ui/api/restricted_1.0.0-beta02.txt
index 67f2a54..4c6447c 100644
--- a/compose/ui/ui/api/restricted_1.0.0-beta02.txt
+++ b/compose/ui/ui/api/restricted_1.0.0-beta02.txt
@@ -168,7 +168,7 @@
   }
 
   @androidx.compose.ui.ExperimentalComposeUiApi public final class AutofillNode {
-    ctor public AutofillNode(java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    ctor public AutofillNode(optional java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, optional androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.compose.ui.autofill.AutofillType> getAutofillTypes();
     method public androidx.compose.ui.geometry.Rect? getBoundingBox();
     method public int getId();
@@ -1387,8 +1387,7 @@
   }
 
   public final class ConsumedData {
-    ctor public ConsumedData(boolean positionChange, boolean downChange);
-    ctor public ConsumedData();
+    ctor public ConsumedData(optional boolean positionChange, optional boolean downChange);
     method public boolean getDownChange();
     method public boolean getPositionChange();
     method public void setDownChange(boolean p);
@@ -1722,7 +1721,7 @@
   }
 
   public final class ModifierInfo {
-    ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, Object? extra);
+    ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, optional Object? extra);
     method public androidx.compose.ui.layout.LayoutCoordinates getCoordinates();
     method public Object? getExtra();
     method public androidx.compose.ui.Modifier getModifier();
@@ -1910,8 +1909,8 @@
 package androidx.compose.ui.platform {
 
   public abstract class AbstractComposeView extends android.view.ViewGroup {
-    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
-    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+    ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
     ctor public AbstractComposeView(android.content.Context context);
     method @androidx.compose.runtime.Composable public abstract void Content();
     method public final void createComposition();
@@ -1999,8 +1998,8 @@
   }
 
   public final class ComposeView extends androidx.compose.ui.platform.AbstractComposeView {
-    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
-    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+    ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
     ctor public ComposeView(android.content.Context context);
     method @androidx.compose.runtime.Composable public void Content();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
@@ -2286,7 +2285,7 @@
   }
 
   public final class ProgressBarRangeInfo {
-    ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, int steps);
+    ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional int steps);
     method public float getCurrent();
     method public kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> getRange();
     method public int getSteps();
@@ -2311,7 +2310,7 @@
   }
 
   public final class ScrollAxisRange {
-    ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, boolean reverseScrolling);
+    ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, optional boolean reverseScrolling);
     method public kotlin.jvm.functions.Function0<java.lang.Float> getMaxValue();
     method public boolean getReverseScrolling();
     method public kotlin.jvm.functions.Function0<java.lang.Float> getValue();
@@ -2533,7 +2532,7 @@
   }
 
   public final class SemanticsPropertyKey<T> {
-    ctor public SemanticsPropertyKey(String name, kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
+    ctor public SemanticsPropertyKey(String name, optional kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
     method public String getName();
     method public operator T! getValue(androidx.compose.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property);
     method public T? merge(T? parentValue, T? childValue);
@@ -2596,8 +2595,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class DialogProperties {
-    ctor public DialogProperties(boolean dismissOnBackPress, boolean dismissOnClickOutside, androidx.compose.ui.window.SecureFlagPolicy securePolicy);
-    ctor public DialogProperties();
+    ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
     method public boolean getDismissOnBackPress();
     method public boolean getDismissOnClickOutside();
     method public androidx.compose.ui.window.SecureFlagPolicy getSecurePolicy();
@@ -2616,8 +2614,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class PopupProperties {
-    ctor public PopupProperties(boolean focusable, boolean dismissOnBackPress, boolean dismissOnClickOutside, androidx.compose.ui.window.SecureFlagPolicy securePolicy);
-    ctor public PopupProperties();
+    ctor public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
     method public boolean getDismissOnBackPress();
     method public boolean getDismissOnClickOutside();
     method public boolean getFocusable();
diff --git a/compose/ui/ui/api/restricted_current.txt b/compose/ui/ui/api/restricted_current.txt
index 67f2a54..4c6447c 100644
--- a/compose/ui/ui/api/restricted_current.txt
+++ b/compose/ui/ui/api/restricted_current.txt
@@ -168,7 +168,7 @@
   }
 
   @androidx.compose.ui.ExperimentalComposeUiApi public final class AutofillNode {
-    ctor public AutofillNode(java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    ctor public AutofillNode(optional java.util.List<? extends androidx.compose.ui.autofill.AutofillType> autofillTypes, optional androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.compose.ui.autofill.AutofillType> getAutofillTypes();
     method public androidx.compose.ui.geometry.Rect? getBoundingBox();
     method public int getId();
@@ -1387,8 +1387,7 @@
   }
 
   public final class ConsumedData {
-    ctor public ConsumedData(boolean positionChange, boolean downChange);
-    ctor public ConsumedData();
+    ctor public ConsumedData(optional boolean positionChange, optional boolean downChange);
     method public boolean getDownChange();
     method public boolean getPositionChange();
     method public void setDownChange(boolean p);
@@ -1722,7 +1721,7 @@
   }
 
   public final class ModifierInfo {
-    ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, Object? extra);
+    ctor public ModifierInfo(androidx.compose.ui.Modifier modifier, androidx.compose.ui.layout.LayoutCoordinates coordinates, optional Object? extra);
     method public androidx.compose.ui.layout.LayoutCoordinates getCoordinates();
     method public Object? getExtra();
     method public androidx.compose.ui.Modifier getModifier();
@@ -1910,8 +1909,8 @@
 package androidx.compose.ui.platform {
 
   public abstract class AbstractComposeView extends android.view.ViewGroup {
-    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
-    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+    ctor public AbstractComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
     ctor public AbstractComposeView(android.content.Context context);
     method @androidx.compose.runtime.Composable public abstract void Content();
     method public final void createComposition();
@@ -1999,8 +1998,8 @@
   }
 
   public final class ComposeView extends androidx.compose.ui.platform.AbstractComposeView {
-    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
-    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs, optional int defStyleAttr);
+    ctor public ComposeView(android.content.Context context, optional android.util.AttributeSet? attrs);
     ctor public ComposeView(android.content.Context context);
     method @androidx.compose.runtime.Composable public void Content();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
@@ -2286,7 +2285,7 @@
   }
 
   public final class ProgressBarRangeInfo {
-    ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, int steps);
+    ctor public ProgressBarRangeInfo(float current, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional int steps);
     method public float getCurrent();
     method public kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> getRange();
     method public int getSteps();
@@ -2311,7 +2310,7 @@
   }
 
   public final class ScrollAxisRange {
-    ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, boolean reverseScrolling);
+    ctor public ScrollAxisRange(kotlin.jvm.functions.Function0<java.lang.Float> value, kotlin.jvm.functions.Function0<java.lang.Float> maxValue, optional boolean reverseScrolling);
     method public kotlin.jvm.functions.Function0<java.lang.Float> getMaxValue();
     method public boolean getReverseScrolling();
     method public kotlin.jvm.functions.Function0<java.lang.Float> getValue();
@@ -2533,7 +2532,7 @@
   }
 
   public final class SemanticsPropertyKey<T> {
-    ctor public SemanticsPropertyKey(String name, kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
+    ctor public SemanticsPropertyKey(String name, optional kotlin.jvm.functions.Function2<? super T,? super T,? extends T> mergePolicy);
     method public String getName();
     method public operator T! getValue(androidx.compose.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property);
     method public T? merge(T? parentValue, T? childValue);
@@ -2596,8 +2595,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class DialogProperties {
-    ctor public DialogProperties(boolean dismissOnBackPress, boolean dismissOnClickOutside, androidx.compose.ui.window.SecureFlagPolicy securePolicy);
-    ctor public DialogProperties();
+    ctor public DialogProperties(optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
     method public boolean getDismissOnBackPress();
     method public boolean getDismissOnClickOutside();
     method public androidx.compose.ui.window.SecureFlagPolicy getSecurePolicy();
@@ -2616,8 +2614,7 @@
   }
 
   @androidx.compose.runtime.Immutable public final class PopupProperties {
-    ctor public PopupProperties(boolean focusable, boolean dismissOnBackPress, boolean dismissOnClickOutside, androidx.compose.ui.window.SecureFlagPolicy securePolicy);
-    ctor public PopupProperties();
+    ctor public PopupProperties(optional boolean focusable, optional boolean dismissOnBackPress, optional boolean dismissOnClickOutside, optional androidx.compose.ui.window.SecureFlagPolicy securePolicy);
     method public boolean getDismissOnBackPress();
     method public boolean getDismissOnClickOutside();
     method public boolean getFocusable();
diff --git a/core/core/api/api_lint.ignore b/core/core/api/api_lint.ignore
index b04878e..d5ab240 100644
--- a/core/core/api/api_lint.ignore
+++ b/core/core/api/api_lint.ignore
@@ -377,8 +377,6 @@
     androidx.core.view.WindowInsetsCompat does not declare a `getVisible()` method matching method androidx.core.view.WindowInsetsCompat.Builder.setVisible(int,boolean)
 
 
-MissingNullability: androidx.core.app.ActivityCompat#invalidateOptionsMenu(android.app.Activity) parameter #0:
-    Missing nullability on parameter `activity` in method `invalidateOptionsMenu`
 MissingNullability: androidx.core.app.ActivityCompat#requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent) parameter #0:
     Missing nullability on parameter `activity` in method `requestDragAndDropPermissions`
 MissingNullability: androidx.core.app.ActivityCompat#requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent) parameter #1:
@@ -481,8 +479,6 @@
     Missing nullability on method `addParentStack` return
 MissingNullability: androidx.core.app.TaskStackBuilder#addParentStack(android.content.ComponentName) parameter #0:
     Missing nullability on parameter `sourceActivityName` in method `addParentStack`
-MissingNullability: androidx.core.app.TaskStackBuilder#from(android.content.Context) parameter #0:
-    Missing nullability on parameter `context` in method `from`
 MissingNullability: androidx.core.content.ContentResolverCompat#query(android.content.ContentResolver, android.net.Uri, String[], String, String[], String, androidx.core.os.CancellationSignal):
     Missing nullability on method `query` return
 MissingNullability: androidx.core.content.ContentResolverCompat#query(android.content.ContentResolver, android.net.Uri, String[], String, String[], String, androidx.core.os.CancellationSignal) parameter #0:
@@ -523,14 +519,6 @@
     Missing nullability on method `toShortcutInfo` return
 MissingNullability: androidx.core.content.pm.ShortcutInfoCompat.Builder#setIcon(androidx.core.graphics.drawable.IconCompat) parameter #0:
     Missing nullability on parameter `icon` in method `setIcon`
-MissingNullability: androidx.core.database.DatabaseUtilsCompat#appendSelectionArgs(String[], String[]) parameter #0:
-    Missing nullability on parameter `originalValues` in method `appendSelectionArgs`
-MissingNullability: androidx.core.database.DatabaseUtilsCompat#appendSelectionArgs(String[], String[]) parameter #1:
-    Missing nullability on parameter `newValues` in method `appendSelectionArgs`
-MissingNullability: androidx.core.database.DatabaseUtilsCompat#concatenateWhere(String, String) parameter #0:
-    Missing nullability on parameter `a` in method `concatenateWhere`
-MissingNullability: androidx.core.database.DatabaseUtilsCompat#concatenateWhere(String, String) parameter #1:
-    Missing nullability on parameter `b` in method `concatenateWhere`
 MissingNullability: androidx.core.graphics.drawable.DrawableCompat#getColorFilter(android.graphics.drawable.Drawable):
     Missing nullability on method `getColorFilter` return
 MissingNullability: androidx.core.graphics.drawable.DrawableCompat#wrap(android.graphics.drawable.Drawable):
@@ -585,18 +573,10 @@
     Missing nullability on parameter `crypto` in method `AuthenticationResult`
 MissingNullability: androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult#getCryptoObject():
     Missing nullability on method `getCryptoObject` return
-MissingNullability: androidx.core.net.TrafficStatsCompat#tagSocket(java.net.Socket) parameter #0:
-    Missing nullability on parameter `socket` in method `tagSocket`
-MissingNullability: androidx.core.net.TrafficStatsCompat#untagSocket(java.net.Socket) parameter #0:
-    Missing nullability on parameter `socket` in method `untagSocket`
 MissingNullability: androidx.core.os.LocaleListCompat#get(int):
     Missing nullability on method `get` return
 MissingNullability: androidx.core.os.LocaleListCompat#indexOf(java.util.Locale) parameter #0:
     Missing nullability on parameter `locale` in method `indexOf`
-MissingNullability: androidx.core.os.LocaleListCompat#wrap(Object) parameter #0:
-    Missing nullability on parameter `localeList` in method `wrap`
-MissingNullability: androidx.core.os.ParcelableCompat#newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T>) parameter #0:
-    Missing nullability on parameter `callbacks` in method `newCreator`
 MissingNullability: androidx.core.os.ParcelableCompatCreatorCallbacks#createFromParcel(android.os.Parcel, ClassLoader) parameter #0:
     Missing nullability on parameter `in` in method `createFromParcel`
 MissingNullability: androidx.core.os.ParcelableCompatCreatorCallbacks#createFromParcel(android.os.Parcel, ClassLoader) parameter #1:
@@ -807,8 +787,6 @@
     Missing nullability on parameter `display` in method `applyDisplay`
 MissingNullability: androidx.core.view.GravityCompat#applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int) parameter #2:
     Missing nullability on parameter `inoutObj` in method `applyDisplay`
-MissingNullability: androidx.core.view.LayoutInflaterCompat#getFactory(android.view.LayoutInflater) parameter #0:
-    Missing nullability on parameter `inflater` in method `getFactory`
 MissingNullability: androidx.core.view.LayoutInflaterFactory#onCreateView(android.view.View, String, android.content.Context, android.util.AttributeSet):
     Missing nullability on method `onCreateView` return
 MissingNullability: androidx.core.view.LayoutInflaterFactory#onCreateView(android.view.View, String, android.content.Context, android.util.AttributeSet) parameter #0:
@@ -837,18 +815,10 @@
     Missing nullability on parameter `lp` in method `setMarginStart`
 MissingNullability: androidx.core.view.MenuCompat#setGroupDividerEnabled(android.view.Menu, boolean) parameter #0:
     Missing nullability on parameter `menu` in method `setGroupDividerEnabled`
-MissingNullability: androidx.core.view.MenuCompat#setShowAsAction(android.view.MenuItem, int) parameter #0:
-    Missing nullability on parameter `item` in method `setShowAsAction`
-MissingNullability: androidx.core.view.MenuItemCompat#collapseActionView(android.view.MenuItem) parameter #0:
-    Missing nullability on parameter `item` in method `collapseActionView`
-MissingNullability: androidx.core.view.MenuItemCompat#expandActionView(android.view.MenuItem) parameter #0:
-    Missing nullability on parameter `item` in method `expandActionView`
 MissingNullability: androidx.core.view.MenuItemCompat#getActionProvider(android.view.MenuItem):
     Missing nullability on method `getActionProvider` return
 MissingNullability: androidx.core.view.MenuItemCompat#getActionProvider(android.view.MenuItem) parameter #0:
     Missing nullability on parameter `item` in method `getActionProvider`
-MissingNullability: androidx.core.view.MenuItemCompat#getActionView(android.view.MenuItem) parameter #0:
-    Missing nullability on parameter `item` in method `getActionView`
 MissingNullability: androidx.core.view.MenuItemCompat#getAlphabeticModifiers(android.view.MenuItem) parameter #0:
     Missing nullability on parameter `item` in method `getAlphabeticModifiers`
 MissingNullability: androidx.core.view.MenuItemCompat#getContentDescription(android.view.MenuItem):
@@ -869,20 +839,12 @@
     Missing nullability on method `getTooltipText` return
 MissingNullability: androidx.core.view.MenuItemCompat#getTooltipText(android.view.MenuItem) parameter #0:
     Missing nullability on parameter `item` in method `getTooltipText`
-MissingNullability: androidx.core.view.MenuItemCompat#isActionViewExpanded(android.view.MenuItem) parameter #0:
-    Missing nullability on parameter `item` in method `isActionViewExpanded`
 MissingNullability: androidx.core.view.MenuItemCompat#setActionProvider(android.view.MenuItem, androidx.core.view.ActionProvider):
     Missing nullability on method `setActionProvider` return
 MissingNullability: androidx.core.view.MenuItemCompat#setActionProvider(android.view.MenuItem, androidx.core.view.ActionProvider) parameter #0:
     Missing nullability on parameter `item` in method `setActionProvider`
 MissingNullability: androidx.core.view.MenuItemCompat#setActionProvider(android.view.MenuItem, androidx.core.view.ActionProvider) parameter #1:
     Missing nullability on parameter `provider` in method `setActionProvider`
-MissingNullability: androidx.core.view.MenuItemCompat#setActionView(android.view.MenuItem, android.view.View) parameter #0:
-    Missing nullability on parameter `item` in method `setActionView`
-MissingNullability: androidx.core.view.MenuItemCompat#setActionView(android.view.MenuItem, android.view.View) parameter #1:
-    Missing nullability on parameter `view` in method `setActionView`
-MissingNullability: androidx.core.view.MenuItemCompat#setActionView(android.view.MenuItem, int) parameter #0:
-    Missing nullability on parameter `item` in method `setActionView`
 MissingNullability: androidx.core.view.MenuItemCompat#setAlphabeticShortcut(android.view.MenuItem, char, int) parameter #0:
     Missing nullability on parameter `item` in method `setAlphabeticShortcut`
 MissingNullability: androidx.core.view.MenuItemCompat#setContentDescription(android.view.MenuItem, CharSequence) parameter #0:
@@ -899,14 +861,8 @@
     Missing nullability on parameter `tintMode` in method `setIconTintMode`
 MissingNullability: androidx.core.view.MenuItemCompat#setNumericShortcut(android.view.MenuItem, char, int) parameter #0:
     Missing nullability on parameter `item` in method `setNumericShortcut`
-MissingNullability: androidx.core.view.MenuItemCompat#setOnActionExpandListener(android.view.MenuItem, androidx.core.view.MenuItemCompat.OnActionExpandListener) parameter #0:
-    Missing nullability on parameter `item` in method `setOnActionExpandListener`
-MissingNullability: androidx.core.view.MenuItemCompat#setOnActionExpandListener(android.view.MenuItem, androidx.core.view.MenuItemCompat.OnActionExpandListener) parameter #1:
-    Missing nullability on parameter `listener` in method `setOnActionExpandListener`
 MissingNullability: androidx.core.view.MenuItemCompat#setShortcut(android.view.MenuItem, char, char, int, int) parameter #0:
     Missing nullability on parameter `item` in method `setShortcut`
-MissingNullability: androidx.core.view.MenuItemCompat#setShowAsAction(android.view.MenuItem, int) parameter #0:
-    Missing nullability on parameter `item` in method `setShowAsAction`
 MissingNullability: androidx.core.view.MenuItemCompat#setTooltipText(android.view.MenuItem, CharSequence) parameter #0:
     Missing nullability on parameter `item` in method `setTooltipText`
 MissingNullability: androidx.core.view.MenuItemCompat#setTooltipText(android.view.MenuItem, CharSequence) parameter #1:
@@ -915,28 +871,6 @@
     Missing nullability on parameter `item` in method `onMenuItemActionCollapse`
 MissingNullability: androidx.core.view.MenuItemCompat.OnActionExpandListener#onMenuItemActionExpand(android.view.MenuItem) parameter #0:
     Missing nullability on parameter `item` in method `onMenuItemActionExpand`
-MissingNullability: androidx.core.view.MotionEventCompat#findPointerIndex(android.view.MotionEvent, int) parameter #0:
-    Missing nullability on parameter `event` in method `findPointerIndex`
-MissingNullability: androidx.core.view.MotionEventCompat#getActionIndex(android.view.MotionEvent) parameter #0:
-    Missing nullability on parameter `event` in method `getActionIndex`
-MissingNullability: androidx.core.view.MotionEventCompat#getActionMasked(android.view.MotionEvent) parameter #0:
-    Missing nullability on parameter `event` in method `getActionMasked`
-MissingNullability: androidx.core.view.MotionEventCompat#getAxisValue(android.view.MotionEvent, int) parameter #0:
-    Missing nullability on parameter `event` in method `getAxisValue`
-MissingNullability: androidx.core.view.MotionEventCompat#getAxisValue(android.view.MotionEvent, int, int) parameter #0:
-    Missing nullability on parameter `event` in method `getAxisValue`
-MissingNullability: androidx.core.view.MotionEventCompat#getButtonState(android.view.MotionEvent) parameter #0:
-    Missing nullability on parameter `event` in method `getButtonState`
-MissingNullability: androidx.core.view.MotionEventCompat#getPointerCount(android.view.MotionEvent) parameter #0:
-    Missing nullability on parameter `event` in method `getPointerCount`
-MissingNullability: androidx.core.view.MotionEventCompat#getPointerId(android.view.MotionEvent, int) parameter #0:
-    Missing nullability on parameter `event` in method `getPointerId`
-MissingNullability: androidx.core.view.MotionEventCompat#getSource(android.view.MotionEvent) parameter #0:
-    Missing nullability on parameter `event` in method `getSource`
-MissingNullability: androidx.core.view.MotionEventCompat#getX(android.view.MotionEvent, int) parameter #0:
-    Missing nullability on parameter `event` in method `getX`
-MissingNullability: androidx.core.view.MotionEventCompat#getY(android.view.MotionEvent, int) parameter #0:
-    Missing nullability on parameter `event` in method `getY`
 MissingNullability: androidx.core.view.MotionEventCompat#isFromSource(android.view.MotionEvent, int) parameter #0:
     Missing nullability on parameter `event` in method `isFromSource`
 MissingNullability: androidx.core.view.OnApplyWindowInsetsListener#onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat):
@@ -961,22 +895,10 @@
     Missing nullability on method `load` return
 MissingNullability: androidx.core.view.PointerIconCompat#load(android.content.res.Resources, int) parameter #0:
     Missing nullability on parameter `resources` in method `load`
-MissingNullability: androidx.core.view.ScaleGestureDetectorCompat#isQuickScaleEnabled(Object) parameter #0:
-    Missing nullability on parameter `scaleGestureDetector` in method `isQuickScaleEnabled`
 MissingNullability: androidx.core.view.ScaleGestureDetectorCompat#isQuickScaleEnabled(android.view.ScaleGestureDetector) parameter #0:
     Missing nullability on parameter `scaleGestureDetector` in method `isQuickScaleEnabled`
-MissingNullability: androidx.core.view.ScaleGestureDetectorCompat#setQuickScaleEnabled(Object, boolean) parameter #0:
-    Missing nullability on parameter `scaleGestureDetector` in method `setQuickScaleEnabled`
 MissingNullability: androidx.core.view.ScaleGestureDetectorCompat#setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean) parameter #0:
     Missing nullability on parameter `scaleGestureDetector` in method `setQuickScaleEnabled`
-MissingNullability: androidx.core.view.VelocityTrackerCompat#getXVelocity(android.view.VelocityTracker, int) parameter #0:
-    Missing nullability on parameter `tracker` in method `getXVelocity`
-MissingNullability: androidx.core.view.VelocityTrackerCompat#getYVelocity(android.view.VelocityTracker, int) parameter #0:
-    Missing nullability on parameter `tracker` in method `getYVelocity`
-MissingNullability: androidx.core.view.ViewCompat#canScrollHorizontally(android.view.View, int) parameter #0:
-    Missing nullability on parameter `view` in method `canScrollHorizontally`
-MissingNullability: androidx.core.view.ViewCompat#canScrollVertically(android.view.View, int) parameter #0:
-    Missing nullability on parameter `view` in method `canScrollVertically`
 MissingNullability: androidx.core.view.ViewCompat#enableAccessibleClickableSpanSupport(android.view.View) parameter #0:
     Missing nullability on parameter `view` in method `enableAccessibleClickableSpanSupport`
 MissingNullability: androidx.core.view.ViewCompat#getAccessibilityNodeProvider(android.view.View):
@@ -985,70 +907,22 @@
     Missing nullability on method `getAccessibilityPaneTitle` return
 MissingNullability: androidx.core.view.ViewCompat#getAccessibilityPaneTitle(android.view.View) parameter #0:
     Missing nullability on parameter `view` in method `getAccessibilityPaneTitle`
-MissingNullability: androidx.core.view.ViewCompat#getAlpha(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getAlpha`
 MissingNullability: androidx.core.view.ViewCompat#getBackgroundTintList(android.view.View):
     Missing nullability on method `getBackgroundTintList` return
 MissingNullability: androidx.core.view.ViewCompat#getBackgroundTintMode(android.view.View):
     Missing nullability on method `getBackgroundTintMode` return
-MissingNullability: androidx.core.view.ViewCompat#getLayerType(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getLayerType`
-MissingNullability: androidx.core.view.ViewCompat#getMatrix(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getMatrix`
-MissingNullability: androidx.core.view.ViewCompat#getMeasuredHeightAndState(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getMeasuredHeightAndState`
-MissingNullability: androidx.core.view.ViewCompat#getMeasuredState(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getMeasuredState`
-MissingNullability: androidx.core.view.ViewCompat#getMeasuredWidthAndState(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getMeasuredWidthAndState`
-MissingNullability: androidx.core.view.ViewCompat#getOverScrollMode(android.view.View) parameter #0:
-    Missing nullability on parameter `v` in method `getOverScrollMode`
 MissingNullability: androidx.core.view.ViewCompat#getParentForAccessibility(android.view.View):
     Missing nullability on method `getParentForAccessibility` return
-MissingNullability: androidx.core.view.ViewCompat#getPivotX(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getPivotX`
-MissingNullability: androidx.core.view.ViewCompat#getPivotY(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getPivotY`
-MissingNullability: androidx.core.view.ViewCompat#getRotation(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getRotation`
-MissingNullability: androidx.core.view.ViewCompat#getRotationX(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getRotationX`
-MissingNullability: androidx.core.view.ViewCompat#getRotationY(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getRotationY`
-MissingNullability: androidx.core.view.ViewCompat#getScaleX(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getScaleX`
-MissingNullability: androidx.core.view.ViewCompat#getScaleY(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getScaleY`
-MissingNullability: androidx.core.view.ViewCompat#getTranslationX(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getTranslationX`
-MissingNullability: androidx.core.view.ViewCompat#getTranslationY(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getTranslationY`
-MissingNullability: androidx.core.view.ViewCompat#getX(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getX`
-MissingNullability: androidx.core.view.ViewCompat#getY(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `getY`
 MissingNullability: androidx.core.view.ViewCompat#isAccessibilityHeading(android.view.View) parameter #0:
     Missing nullability on parameter `view` in method `isAccessibilityHeading`
-MissingNullability: androidx.core.view.ViewCompat#isOpaque(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `isOpaque`
 MissingNullability: androidx.core.view.ViewCompat#isScreenReaderFocusable(android.view.View) parameter #0:
     Missing nullability on parameter `view` in method `isScreenReaderFocusable`
-MissingNullability: androidx.core.view.ViewCompat#jumpDrawablesToCurrentState(android.view.View) parameter #0:
-    Missing nullability on parameter `v` in method `jumpDrawablesToCurrentState`
 MissingNullability: androidx.core.view.ViewCompat#keyboardNavigationClusterSearch(android.view.View, android.view.View, int):
     Missing nullability on method `keyboardNavigationClusterSearch` return
 MissingNullability: androidx.core.view.ViewCompat#keyboardNavigationClusterSearch(android.view.View, android.view.View, int) parameter #1:
     Missing nullability on parameter `currentCluster` in method `keyboardNavigationClusterSearch`
-MissingNullability: androidx.core.view.ViewCompat#onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent) parameter #0:
-    Missing nullability on parameter `v` in method `onInitializeAccessibilityEvent`
-MissingNullability: androidx.core.view.ViewCompat#onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent) parameter #1:
-    Missing nullability on parameter `event` in method `onInitializeAccessibilityEvent`
 MissingNullability: androidx.core.view.ViewCompat#onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat) parameter #1:
     Missing nullability on parameter `info` in method `onInitializeAccessibilityNodeInfo`
-MissingNullability: androidx.core.view.ViewCompat#onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent) parameter #0:
-    Missing nullability on parameter `v` in method `onPopulateAccessibilityEvent`
-MissingNullability: androidx.core.view.ViewCompat#onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent) parameter #1:
-    Missing nullability on parameter `event` in method `onPopulateAccessibilityEvent`
 MissingNullability: androidx.core.view.ViewCompat#performAccessibilityAction(android.view.View, int, android.os.Bundle) parameter #2:
     Missing nullability on parameter `arguments` in method `performAccessibilityAction`
 MissingNullability: androidx.core.view.ViewCompat#postOnAnimation(android.view.View, Runnable) parameter #1:
@@ -1063,58 +937,20 @@
     Missing nullability on parameter `view` in method `setAccessibilityPaneTitle`
 MissingNullability: androidx.core.view.ViewCompat#setAccessibilityPaneTitle(android.view.View, CharSequence) parameter #1:
     Missing nullability on parameter `accessibilityPaneTitle` in method `setAccessibilityPaneTitle`
-MissingNullability: androidx.core.view.ViewCompat#setActivated(android.view.View, boolean) parameter #0:
-    Missing nullability on parameter `view` in method `setActivated`
-MissingNullability: androidx.core.view.ViewCompat#setAlpha(android.view.View, float) parameter #0:
-    Missing nullability on parameter `view` in method `setAlpha`
 MissingNullability: androidx.core.view.ViewCompat#setBackgroundTintList(android.view.View, android.content.res.ColorStateList) parameter #1:
     Missing nullability on parameter `tintList` in method `setBackgroundTintList`
 MissingNullability: androidx.core.view.ViewCompat#setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode) parameter #1:
     Missing nullability on parameter `mode` in method `setBackgroundTintMode`
-MissingNullability: androidx.core.view.ViewCompat#setChildrenDrawingOrderEnabled(android.view.ViewGroup, boolean) parameter #0:
-    Missing nullability on parameter `viewGroup` in method `setChildrenDrawingOrderEnabled`
 MissingNullability: androidx.core.view.ViewCompat#setClipBounds(android.view.View, android.graphics.Rect) parameter #1:
     Missing nullability on parameter `clipBounds` in method `setClipBounds`
-MissingNullability: androidx.core.view.ViewCompat#setFitsSystemWindows(android.view.View, boolean) parameter #0:
-    Missing nullability on parameter `view` in method `setFitsSystemWindows`
 MissingNullability: androidx.core.view.ViewCompat#setLayerPaint(android.view.View, android.graphics.Paint) parameter #1:
     Missing nullability on parameter `paint` in method `setLayerPaint`
-MissingNullability: androidx.core.view.ViewCompat#setLayerType(android.view.View, int, android.graphics.Paint) parameter #0:
-    Missing nullability on parameter `view` in method `setLayerType`
-MissingNullability: androidx.core.view.ViewCompat#setLayerType(android.view.View, int, android.graphics.Paint) parameter #2:
-    Missing nullability on parameter `paint` in method `setLayerType`
-MissingNullability: androidx.core.view.ViewCompat#setOverScrollMode(android.view.View, int) parameter #0:
-    Missing nullability on parameter `v` in method `setOverScrollMode`
-MissingNullability: androidx.core.view.ViewCompat#setPivotX(android.view.View, float) parameter #0:
-    Missing nullability on parameter `view` in method `setPivotX`
-MissingNullability: androidx.core.view.ViewCompat#setPivotY(android.view.View, float) parameter #0:
-    Missing nullability on parameter `view` in method `setPivotY`
 MissingNullability: androidx.core.view.ViewCompat#setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat) parameter #1:
     Missing nullability on parameter `pointerIcon` in method `setPointerIcon`
-MissingNullability: androidx.core.view.ViewCompat#setRotation(android.view.View, float) parameter #0:
-    Missing nullability on parameter `view` in method `setRotation`
-MissingNullability: androidx.core.view.ViewCompat#setRotationX(android.view.View, float) parameter #0:
-    Missing nullability on parameter `view` in method `setRotationX`
-MissingNullability: androidx.core.view.ViewCompat#setRotationY(android.view.View, float) parameter #0:
-    Missing nullability on parameter `view` in method `setRotationY`
-MissingNullability: androidx.core.view.ViewCompat#setSaveFromParentEnabled(android.view.View, boolean) parameter #0:
-    Missing nullability on parameter `v` in method `setSaveFromParentEnabled`
-MissingNullability: androidx.core.view.ViewCompat#setScaleX(android.view.View, float) parameter #0:
-    Missing nullability on parameter `view` in method `setScaleX`
-MissingNullability: androidx.core.view.ViewCompat#setScaleY(android.view.View, float) parameter #0:
-    Missing nullability on parameter `view` in method `setScaleY`
 MissingNullability: androidx.core.view.ViewCompat#setScreenReaderFocusable(android.view.View, boolean) parameter #0:
     Missing nullability on parameter `view` in method `setScreenReaderFocusable`
 MissingNullability: androidx.core.view.ViewCompat#setTransitionName(android.view.View, String) parameter #1:
     Missing nullability on parameter `transitionName` in method `setTransitionName`
-MissingNullability: androidx.core.view.ViewCompat#setTranslationX(android.view.View, float) parameter #0:
-    Missing nullability on parameter `view` in method `setTranslationX`
-MissingNullability: androidx.core.view.ViewCompat#setTranslationY(android.view.View, float) parameter #0:
-    Missing nullability on parameter `view` in method `setTranslationY`
-MissingNullability: androidx.core.view.ViewCompat#setX(android.view.View, float) parameter #0:
-    Missing nullability on parameter `view` in method `setX`
-MissingNullability: androidx.core.view.ViewCompat#setY(android.view.View, float) parameter #0:
-    Missing nullability on parameter `view` in method `setY`
 MissingNullability: androidx.core.view.ViewCompat#startDragAndDrop(android.view.View, android.content.ClipData, android.view.View.DragShadowBuilder, Object, int) parameter #1:
     Missing nullability on parameter `data` in method `startDragAndDrop`
 MissingNullability: androidx.core.view.ViewCompat#startDragAndDrop(android.view.View, android.content.ClipData, android.view.View.DragShadowBuilder, Object, int) parameter #2:
@@ -1129,20 +965,8 @@
     Missing nullability on parameter `event` in method `onUnhandledKeyEvent`
 MissingNullability: androidx.core.view.ViewConfigurationCompat#getScaledHoverSlop(android.view.ViewConfiguration) parameter #0:
     Missing nullability on parameter `config` in method `getScaledHoverSlop`
-MissingNullability: androidx.core.view.ViewConfigurationCompat#getScaledPagingTouchSlop(android.view.ViewConfiguration) parameter #0:
-    Missing nullability on parameter `config` in method `getScaledPagingTouchSlop`
-MissingNullability: androidx.core.view.ViewConfigurationCompat#hasPermanentMenuKey(android.view.ViewConfiguration) parameter #0:
-    Missing nullability on parameter `config` in method `hasPermanentMenuKey`
 MissingNullability: androidx.core.view.ViewConfigurationCompat#shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration, android.content.Context) parameter #0:
     Missing nullability on parameter `config` in method `shouldShowMenuShortcutsWhenKeyboardPresent`
-MissingNullability: androidx.core.view.ViewGroupCompat#onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent) parameter #0:
-    Missing nullability on parameter `group` in method `onRequestSendAccessibilityEvent`
-MissingNullability: androidx.core.view.ViewGroupCompat#onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent) parameter #1:
-    Missing nullability on parameter `child` in method `onRequestSendAccessibilityEvent`
-MissingNullability: androidx.core.view.ViewGroupCompat#onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent) parameter #2:
-    Missing nullability on parameter `event` in method `onRequestSendAccessibilityEvent`
-MissingNullability: androidx.core.view.ViewGroupCompat#setMotionEventSplittingEnabled(android.view.ViewGroup, boolean) parameter #0:
-    Missing nullability on parameter `group` in method `setMotionEventSplittingEnabled`
 MissingNullability: androidx.core.view.ViewParentCompat#notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int) parameter #0:
     Missing nullability on parameter `parent` in method `notifySubtreeAccessibilityStateChanged`
 MissingNullability: androidx.core.view.ViewParentCompat#notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int) parameter #1:
@@ -1213,12 +1037,6 @@
     Missing nullability on parameter `parent` in method `onStopNestedScroll`
 MissingNullability: androidx.core.view.ViewParentCompat#onStopNestedScroll(android.view.ViewParent, android.view.View, int) parameter #1:
     Missing nullability on parameter `target` in method `onStopNestedScroll`
-MissingNullability: androidx.core.view.ViewParentCompat#requestSendAccessibilityEvent(android.view.ViewParent, android.view.View, android.view.accessibility.AccessibilityEvent) parameter #0:
-    Missing nullability on parameter `parent` in method `requestSendAccessibilityEvent`
-MissingNullability: androidx.core.view.ViewParentCompat#requestSendAccessibilityEvent(android.view.ViewParent, android.view.View, android.view.accessibility.AccessibilityEvent) parameter #1:
-    Missing nullability on parameter `child` in method `requestSendAccessibilityEvent`
-MissingNullability: androidx.core.view.ViewParentCompat#requestSendAccessibilityEvent(android.view.ViewParent, android.view.View, android.view.accessibility.AccessibilityEvent) parameter #2:
-    Missing nullability on parameter `event` in method `requestSendAccessibilityEvent`
 MissingNullability: androidx.core.view.ViewPropertyAnimatorCompat#alpha(float):
     Missing nullability on method `alpha` return
 MissingNullability: androidx.core.view.ViewPropertyAnimatorCompat#alphaBy(float):
@@ -1309,52 +1127,26 @@
     Missing nullability on parameter `view` in method `onAnimationStart`
 MissingNullability: androidx.core.view.ViewPropertyAnimatorUpdateListener#onAnimationUpdate(android.view.View) parameter #0:
     Missing nullability on parameter `view` in method `onAnimationUpdate`
-MissingNullability: androidx.core.view.accessibility.AccessibilityEventCompat#appendRecord(android.view.accessibility.AccessibilityEvent, androidx.core.view.accessibility.AccessibilityRecordCompat) parameter #0:
-    Missing nullability on parameter `event` in method `appendRecord`
-MissingNullability: androidx.core.view.accessibility.AccessibilityEventCompat#appendRecord(android.view.accessibility.AccessibilityEvent, androidx.core.view.accessibility.AccessibilityRecordCompat) parameter #1:
-    Missing nullability on parameter `record` in method `appendRecord`
-MissingNullability: androidx.core.view.accessibility.AccessibilityEventCompat#asRecord(android.view.accessibility.AccessibilityEvent) parameter #0:
-    Missing nullability on parameter `event` in method `asRecord`
 MissingNullability: androidx.core.view.accessibility.AccessibilityEventCompat#getAction(android.view.accessibility.AccessibilityEvent) parameter #0:
     Missing nullability on parameter `event` in method `getAction`
 MissingNullability: androidx.core.view.accessibility.AccessibilityEventCompat#getContentChangeTypes(android.view.accessibility.AccessibilityEvent) parameter #0:
     Missing nullability on parameter `event` in method `getContentChangeTypes`
 MissingNullability: androidx.core.view.accessibility.AccessibilityEventCompat#getMovementGranularity(android.view.accessibility.AccessibilityEvent) parameter #0:
     Missing nullability on parameter `event` in method `getMovementGranularity`
-MissingNullability: androidx.core.view.accessibility.AccessibilityEventCompat#getRecord(android.view.accessibility.AccessibilityEvent, int) parameter #0:
-    Missing nullability on parameter `event` in method `getRecord`
-MissingNullability: androidx.core.view.accessibility.AccessibilityEventCompat#getRecordCount(android.view.accessibility.AccessibilityEvent) parameter #0:
-    Missing nullability on parameter `event` in method `getRecordCount`
 MissingNullability: androidx.core.view.accessibility.AccessibilityEventCompat#setAction(android.view.accessibility.AccessibilityEvent, int) parameter #0:
     Missing nullability on parameter `event` in method `setAction`
 MissingNullability: androidx.core.view.accessibility.AccessibilityEventCompat#setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int) parameter #0:
     Missing nullability on parameter `event` in method `setContentChangeTypes`
 MissingNullability: androidx.core.view.accessibility.AccessibilityEventCompat#setMovementGranularity(android.view.accessibility.AccessibilityEvent, int) parameter #0:
     Missing nullability on parameter `event` in method `setMovementGranularity`
-MissingNullability: androidx.core.view.accessibility.AccessibilityManagerCompat#addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener) parameter #0:
-    Missing nullability on parameter `manager` in method `addAccessibilityStateChangeListener`
-MissingNullability: androidx.core.view.accessibility.AccessibilityManagerCompat#addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener) parameter #1:
-    Missing nullability on parameter `listener` in method `addAccessibilityStateChangeListener`
 MissingNullability: androidx.core.view.accessibility.AccessibilityManagerCompat#addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener) parameter #0:
     Missing nullability on parameter `manager` in method `addTouchExplorationStateChangeListener`
 MissingNullability: androidx.core.view.accessibility.AccessibilityManagerCompat#addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener) parameter #1:
     Missing nullability on parameter `listener` in method `addTouchExplorationStateChangeListener`
-MissingNullability: androidx.core.view.accessibility.AccessibilityManagerCompat#getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager, int) parameter #0:
-    Missing nullability on parameter `manager` in method `getEnabledAccessibilityServiceList`
-MissingNullability: androidx.core.view.accessibility.AccessibilityManagerCompat#getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager) parameter #0:
-    Missing nullability on parameter `manager` in method `getInstalledAccessibilityServiceList`
-MissingNullability: androidx.core.view.accessibility.AccessibilityManagerCompat#isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager) parameter #0:
-    Missing nullability on parameter `manager` in method `isTouchExplorationEnabled`
-MissingNullability: androidx.core.view.accessibility.AccessibilityManagerCompat#removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener) parameter #0:
-    Missing nullability on parameter `manager` in method `removeAccessibilityStateChangeListener`
-MissingNullability: androidx.core.view.accessibility.AccessibilityManagerCompat#removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener) parameter #1:
-    Missing nullability on parameter `listener` in method `removeAccessibilityStateChangeListener`
 MissingNullability: androidx.core.view.accessibility.AccessibilityManagerCompat#removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener) parameter #0:
     Missing nullability on parameter `manager` in method `removeTouchExplorationStateChangeListener`
 MissingNullability: androidx.core.view.accessibility.AccessibilityManagerCompat#removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener) parameter #1:
     Missing nullability on parameter `listener` in method `removeTouchExplorationStateChangeListener`
-MissingNullability: androidx.core.view.accessibility.AccessibilityNodeInfoCompat#AccessibilityNodeInfoCompat(Object) parameter #0:
-    Missing nullability on parameter `info` in method `AccessibilityNodeInfoCompat`
 MissingNullability: androidx.core.view.accessibility.AccessibilityNodeInfoCompat#addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat) parameter #0:
     Missing nullability on parameter `action` in method `addAction`
 MissingNullability: androidx.core.view.accessibility.AccessibilityNodeInfoCompat#addChild(android.view.View) parameter #0:
@@ -1375,8 +1167,6 @@
     Missing nullability on method `focusSearch` return
 MissingNullability: androidx.core.view.accessibility.AccessibilityNodeInfoCompat#getActionList():
     Missing nullability on method `getActionList` return
-MissingNullability: androidx.core.view.accessibility.AccessibilityNodeInfoCompat#getBoundsInParent(android.graphics.Rect) parameter #0:
-    Missing nullability on parameter `outBounds` in method `getBoundsInParent`
 MissingNullability: androidx.core.view.accessibility.AccessibilityNodeInfoCompat#getBoundsInScreen(android.graphics.Rect) parameter #0:
     Missing nullability on parameter `outBounds` in method `getBoundsInScreen`
 MissingNullability: androidx.core.view.accessibility.AccessibilityNodeInfoCompat#getChild(int):
@@ -1435,8 +1225,6 @@
     Missing nullability on parameter `child` in method `removeChild`
 MissingNullability: androidx.core.view.accessibility.AccessibilityNodeInfoCompat#removeChild(android.view.View, int) parameter #0:
     Missing nullability on parameter `root` in method `removeChild`
-MissingNullability: androidx.core.view.accessibility.AccessibilityNodeInfoCompat#setBoundsInParent(android.graphics.Rect) parameter #0:
-    Missing nullability on parameter `bounds` in method `setBoundsInParent`
 MissingNullability: androidx.core.view.accessibility.AccessibilityNodeInfoCompat#setBoundsInScreen(android.graphics.Rect) parameter #0:
     Missing nullability on parameter `bounds` in method `setBoundsInScreen`
 MissingNullability: androidx.core.view.accessibility.AccessibilityNodeInfoCompat#setClassName(CharSequence) parameter #0:
@@ -1573,30 +1361,14 @@
     Missing nullability on method `getProvider` return
 MissingNullability: androidx.core.view.accessibility.AccessibilityNodeProviderCompat#performAction(int, int, android.os.Bundle) parameter #2:
     Missing nullability on parameter `arguments` in method `performAction`
-MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#AccessibilityRecordCompat(Object) parameter #0:
-    Missing nullability on parameter `record` in method `AccessibilityRecordCompat`
 MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#getMaxScrollX(android.view.accessibility.AccessibilityRecord) parameter #0:
     Missing nullability on parameter `record` in method `getMaxScrollX`
 MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#getMaxScrollY(android.view.accessibility.AccessibilityRecord) parameter #0:
     Missing nullability on parameter `record` in method `getMaxScrollY`
-MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#obtain(androidx.core.view.accessibility.AccessibilityRecordCompat) parameter #0:
-    Missing nullability on parameter `record` in method `obtain`
-MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#setBeforeText(CharSequence) parameter #0:
-    Missing nullability on parameter `beforeText` in method `setBeforeText`
-MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#setClassName(CharSequence) parameter #0:
-    Missing nullability on parameter `className` in method `setClassName`
-MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#setContentDescription(CharSequence) parameter #0:
-    Missing nullability on parameter `contentDescription` in method `setContentDescription`
 MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#setMaxScrollX(android.view.accessibility.AccessibilityRecord, int) parameter #0:
     Missing nullability on parameter `record` in method `setMaxScrollX`
 MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#setMaxScrollY(android.view.accessibility.AccessibilityRecord, int) parameter #0:
     Missing nullability on parameter `record` in method `setMaxScrollY`
-MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#setParcelableData(android.os.Parcelable) parameter #0:
-    Missing nullability on parameter `parcelableData` in method `setParcelableData`
-MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#setSource(android.view.View) parameter #0:
-    Missing nullability on parameter `source` in method `setSource`
-MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#setSource(android.view.View, int) parameter #0:
-    Missing nullability on parameter `root` in method `setSource`
 MissingNullability: androidx.core.view.accessibility.AccessibilityRecordCompat#setSource(android.view.accessibility.AccessibilityRecord, android.view.View, int) parameter #1:
     Missing nullability on parameter `root` in method `setSource`
 MissingNullability: androidx.core.view.accessibility.AccessibilityViewCommand.MoveHtmlArguments#getHTMLElement():
@@ -1643,14 +1415,6 @@
     Missing nullability on method `setEnabled` return
 MissingNullability: androidx.core.widget.AutoScrollHelper#setExclusive(boolean):
     Missing nullability on method `setExclusive` return
-MissingNullability: androidx.core.widget.EdgeEffectCompat#EdgeEffectCompat(android.content.Context) parameter #0:
-    Missing nullability on parameter `context` in method `EdgeEffectCompat`
-MissingNullability: androidx.core.widget.EdgeEffectCompat#draw(android.graphics.Canvas) parameter #0:
-    Missing nullability on parameter `canvas` in method `draw`
-MissingNullability: androidx.core.widget.ListPopupWindowCompat#createDragToOpenListener(Object, android.view.View) parameter #0:
-    Missing nullability on parameter `listPopupWindow` in method `createDragToOpenListener`
-MissingNullability: androidx.core.widget.ListPopupWindowCompat#createDragToOpenListener(Object, android.view.View) parameter #1:
-    Missing nullability on parameter `src` in method `createDragToOpenListener`
 MissingNullability: androidx.core.widget.NestedScrollView#addView(android.view.View) parameter #0:
     Missing nullability on parameter `child` in method `addView`
 MissingNullability: androidx.core.widget.NestedScrollView#addView(android.view.View, android.view.ViewGroup.LayoutParams) parameter #0:
@@ -1707,12 +1471,6 @@
     Missing nullability on parameter `rectangle` in method `requestChildRectangleOnScreen`
 MissingNullability: androidx.core.widget.NestedScrollView.OnScrollChangeListener#onScrollChange(androidx.core.widget.NestedScrollView, int, int, int, int) parameter #0:
     Missing nullability on parameter `v` in method `onScrollChange`
-MissingNullability: androidx.core.widget.ScrollerCompat#create(android.content.Context) parameter #0:
-    Missing nullability on parameter `context` in method `create`
-MissingNullability: androidx.core.widget.ScrollerCompat#create(android.content.Context, android.view.animation.Interpolator) parameter #0:
-    Missing nullability on parameter `context` in method `create`
-MissingNullability: androidx.core.widget.ScrollerCompat#create(android.content.Context, android.view.animation.Interpolator) parameter #1:
-    Missing nullability on parameter `interpolator` in method `create`
 
 
 MutableBareField: androidx.core.app.NotificationCompat.Action#actionIntent:
@@ -1727,6 +1485,48 @@
     Provide an explicit copy constructor instead of implementing `clone()`
 
 
+NullableCollection: androidx.core.app.ActivityOptionsCompat#toBundle():
+    Return type of method androidx.core.app.ActivityOptionsCompat.toBundle() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.core.app.FrameMetricsAggregator#getMetrics():
+    Return type of method androidx.core.app.FrameMetricsAggregator.getMetrics() is a nullable collection (`android.util.SparseIntArray[]`); must be non-null
+NullableCollection: androidx.core.app.FrameMetricsAggregator#remove(android.app.Activity):
+    Return type of method androidx.core.app.FrameMetricsAggregator.remove(android.app.Activity) is a nullable collection (`android.util.SparseIntArray[]`); must be non-null
+NullableCollection: androidx.core.app.FrameMetricsAggregator#reset():
+    Return type of method androidx.core.app.FrameMetricsAggregator.reset() is a nullable collection (`android.util.SparseIntArray[]`); must be non-null
+NullableCollection: androidx.core.app.FrameMetricsAggregator#stop():
+    Return type of method androidx.core.app.FrameMetricsAggregator.stop() is a nullable collection (`android.util.SparseIntArray[]`); must be non-null
+NullableCollection: androidx.core.app.NotificationCompat#getExtras(android.app.Notification):
+    Return type of method androidx.core.app.NotificationCompat.getExtras(android.app.Notification) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.core.app.NotificationCompat.Action#getDataOnlyRemoteInputs():
+    Return type of method androidx.core.app.NotificationCompat.Action.getDataOnlyRemoteInputs() is a nullable collection (`androidx.core.app.RemoteInput[]`); must be non-null
+NullableCollection: androidx.core.app.NotificationCompat.Action#getRemoteInputs():
+    Return type of method androidx.core.app.NotificationCompat.Action.getRemoteInputs() is a nullable collection (`androidx.core.app.RemoteInput[]`); must be non-null
+NullableCollection: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation#getMessages():
+    Return type of method androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.getMessages() is a nullable collection (`java.lang.String[]`); must be non-null
+NullableCollection: androidx.core.app.NotificationCompat.CarExtender.UnreadConversation#getParticipants():
+    Return type of method androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.getParticipants() is a nullable collection (`java.lang.String[]`); must be non-null
+NullableCollection: androidx.core.app.ShareCompat.IntentReader#getEmailBcc():
+    Return type of method androidx.core.app.ShareCompat.IntentReader.getEmailBcc() is a nullable collection (`java.lang.String[]`); must be non-null
+NullableCollection: androidx.core.app.ShareCompat.IntentReader#getEmailCc():
+    Return type of method androidx.core.app.ShareCompat.IntentReader.getEmailCc() is a nullable collection (`java.lang.String[]`); must be non-null
+NullableCollection: androidx.core.app.ShareCompat.IntentReader#getEmailTo():
+    Return type of method androidx.core.app.ShareCompat.IntentReader.getEmailTo() is a nullable collection (`java.lang.String[]`); must be non-null
+NullableCollection: androidx.core.content.pm.ShortcutInfoCompat#getCategories():
+    Return type of method androidx.core.content.pm.ShortcutInfoCompat.getCategories() is a nullable collection (`java.util.Set`); must be non-null
+NullableCollection: androidx.core.content.pm.ShortcutInfoCompat#getExtras():
+    Return type of method androidx.core.content.pm.ShortcutInfoCompat.getExtras() is a nullable collection (`android.os.PersistableBundle`); must be non-null
+NullableCollection: androidx.core.net.MailTo#getHeaders():
+    Return type of method androidx.core.net.MailTo.getHeaders() is a nullable collection (`java.util.Map`); must be non-null
+NullableCollection: androidx.core.provider.FontRequest#getCertificates():
+    Return type of method androidx.core.provider.FontRequest.getCertificates() is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.core.view.ContentInfoCompat#getExtras():
+    Return type of method androidx.core.view.ContentInfoCompat.getExtras() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.core.view.ViewCompat#getOnReceiveContentMimeTypes(android.view.View):
+    Return type of method androidx.core.view.ViewCompat.getOnReceiveContentMimeTypes(android.view.View) is a nullable collection (`java.lang.String[]`); must be non-null
+NullableCollection: androidx.core.view.accessibility.AccessibilityNodeProviderCompat#findAccessibilityNodeInfosByText(String, int):
+    Return type of method androidx.core.view.accessibility.AccessibilityNodeProviderCompat.findAccessibilityNodeInfosByText(String,int) is a nullable collection (`java.util.List`); must be non-null
+
+
 OptionalBuilderConstructorArgument: androidx.core.app.NotificationCompat.Action.Builder#Builder(androidx.core.graphics.drawable.IconCompat, CharSequence, android.app.PendingIntent) parameter #0:
     Builder constructor arguments must be mandatory (i.e. not @Nullable): parameter icon in androidx.core.app.NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat icon, CharSequence title, android.app.PendingIntent intent)
 OptionalBuilderConstructorArgument: androidx.core.app.NotificationCompat.Action.Builder#Builder(androidx.core.graphics.drawable.IconCompat, CharSequence, android.app.PendingIntent) parameter #1:
diff --git a/core/core/api/current.ignore b/core/core/api/current.ignore
deleted file mode 100644
index f7a16ef..0000000
--- a/core/core/api/current.ignore
+++ /dev/null
@@ -1,21 +0,0 @@
-// Baseline format: 1.0
-// See tools/metalava/API-LINT.md for how to update this file.
-
-InvalidNullConversion: androidx.core.app.NotificationCompat.BubbleMetadata#getIcon():
-    Attempted to change method return from @NonNull to @Nullable: incompatible change for method androidx.core.app.NotificationCompat.BubbleMetadata.getIcon()
-InvalidNullConversion: androidx.core.app.NotificationCompat.BubbleMetadata#getIntent():
-    Attempted to change method return from @NonNull to @Nullable: incompatible change for method androidx.core.app.NotificationCompat.BubbleMetadata.getIntent()
-InvalidNullConversion: androidx.core.app.NotificationCompat.MessagingStyle.Message#getText():
-    Attempted to change method return from @NonNull to @Nullable: incompatible change for method androidx.core.app.NotificationCompat.MessagingStyle.Message.getText()
-InvalidNullConversion: androidx.core.util.Pair#Pair(F, S) parameter #0:
-    Attempted to remove @Nullable annotation from parameter arg1 in androidx.core.util.Pair(F arg1, S arg2)
-InvalidNullConversion: androidx.core.util.Pair#Pair(F, S) parameter #1:
-    Attempted to remove @Nullable annotation from parameter arg2 in androidx.core.util.Pair(F arg1, S arg2)
-InvalidNullConversion: androidx.core.util.Pair#create(A, B) parameter #0:
-    Attempted to remove @Nullable annotation from parameter arg1 in androidx.core.util.Pair.create(A arg1, B arg2)
-InvalidNullConversion: androidx.core.util.Pair#create(A, B) parameter #1:
-    Attempted to remove @Nullable annotation from parameter arg2 in androidx.core.util.Pair.create(A arg1, B arg2)
-InvalidNullConversion: androidx.core.util.Pair#first:
-    Attempted to remove @Nullable annotation from field androidx.core.util.Pair.first
-InvalidNullConversion: androidx.core.util.Pair#second:
-    Attempted to remove @Nullable annotation from field androidx.core.util.Pair.second
diff --git a/core/core/api/restricted_current.ignore b/core/core/api/restricted_current.ignore
deleted file mode 100644
index f7a16ef..0000000
--- a/core/core/api/restricted_current.ignore
+++ /dev/null
@@ -1,21 +0,0 @@
-// Baseline format: 1.0
-// See tools/metalava/API-LINT.md for how to update this file.
-
-InvalidNullConversion: androidx.core.app.NotificationCompat.BubbleMetadata#getIcon():
-    Attempted to change method return from @NonNull to @Nullable: incompatible change for method androidx.core.app.NotificationCompat.BubbleMetadata.getIcon()
-InvalidNullConversion: androidx.core.app.NotificationCompat.BubbleMetadata#getIntent():
-    Attempted to change method return from @NonNull to @Nullable: incompatible change for method androidx.core.app.NotificationCompat.BubbleMetadata.getIntent()
-InvalidNullConversion: androidx.core.app.NotificationCompat.MessagingStyle.Message#getText():
-    Attempted to change method return from @NonNull to @Nullable: incompatible change for method androidx.core.app.NotificationCompat.MessagingStyle.Message.getText()
-InvalidNullConversion: androidx.core.util.Pair#Pair(F, S) parameter #0:
-    Attempted to remove @Nullable annotation from parameter arg1 in androidx.core.util.Pair(F arg1, S arg2)
-InvalidNullConversion: androidx.core.util.Pair#Pair(F, S) parameter #1:
-    Attempted to remove @Nullable annotation from parameter arg2 in androidx.core.util.Pair(F arg1, S arg2)
-InvalidNullConversion: androidx.core.util.Pair#create(A, B) parameter #0:
-    Attempted to remove @Nullable annotation from parameter arg1 in androidx.core.util.Pair.create(A arg1, B arg2)
-InvalidNullConversion: androidx.core.util.Pair#create(A, B) parameter #1:
-    Attempted to remove @Nullable annotation from parameter arg2 in androidx.core.util.Pair.create(A arg1, B arg2)
-InvalidNullConversion: androidx.core.util.Pair#first:
-    Attempted to remove @Nullable annotation from field androidx.core.util.Pair.first
-InvalidNullConversion: androidx.core.util.Pair#second:
-    Attempted to remove @Nullable annotation from field androidx.core.util.Pair.second
diff --git a/cursoradapter/cursoradapter/api/api_lint.ignore b/cursoradapter/cursoradapter/api/api_lint.ignore
index b0ea08d..758537d 100644
--- a/cursoradapter/cursoradapter/api/api_lint.ignore
+++ b/cursoradapter/cursoradapter/api/api_lint.ignore
@@ -5,10 +5,6 @@
     Context is distinct, so it must be the first argument (method `bindView`)
 
 
-MissingNullability: androidx.cursoradapter.widget.CursorAdapter#CursorAdapter(android.content.Context, android.database.Cursor) parameter #0:
-    Missing nullability on parameter `context` in method `CursorAdapter`
-MissingNullability: androidx.cursoradapter.widget.CursorAdapter#CursorAdapter(android.content.Context, android.database.Cursor) parameter #1:
-    Missing nullability on parameter `c` in method `CursorAdapter`
 MissingNullability: androidx.cursoradapter.widget.CursorAdapter#CursorAdapter(android.content.Context, android.database.Cursor, boolean) parameter #0:
     Missing nullability on parameter `context` in method `CursorAdapter`
 MissingNullability: androidx.cursoradapter.widget.CursorAdapter#CursorAdapter(android.content.Context, android.database.Cursor, boolean) parameter #1:
@@ -49,10 +45,6 @@
     Missing nullability on parameter `convertView` in method `getView`
 MissingNullability: androidx.cursoradapter.widget.CursorAdapter#getView(int, android.view.View, android.view.ViewGroup) parameter #2:
     Missing nullability on parameter `parent` in method `getView`
-MissingNullability: androidx.cursoradapter.widget.CursorAdapter#init(android.content.Context, android.database.Cursor, boolean) parameter #0:
-    Missing nullability on parameter `context` in method `init`
-MissingNullability: androidx.cursoradapter.widget.CursorAdapter#init(android.content.Context, android.database.Cursor, boolean) parameter #1:
-    Missing nullability on parameter `c` in method `init`
 MissingNullability: androidx.cursoradapter.widget.CursorAdapter#newDropDownView(android.content.Context, android.database.Cursor, android.view.ViewGroup):
     Missing nullability on method `newDropDownView` return
 MissingNullability: androidx.cursoradapter.widget.CursorAdapter#newDropDownView(android.content.Context, android.database.Cursor, android.view.ViewGroup) parameter #0:
@@ -79,14 +71,6 @@
     Missing nullability on method `swapCursor` return
 MissingNullability: androidx.cursoradapter.widget.CursorAdapter#swapCursor(android.database.Cursor) parameter #0:
     Missing nullability on parameter `newCursor` in method `swapCursor`
-MissingNullability: androidx.cursoradapter.widget.ResourceCursorAdapter#ResourceCursorAdapter(android.content.Context, int, android.database.Cursor) parameter #0:
-    Missing nullability on parameter `context` in method `ResourceCursorAdapter`
-MissingNullability: androidx.cursoradapter.widget.ResourceCursorAdapter#ResourceCursorAdapter(android.content.Context, int, android.database.Cursor) parameter #2:
-    Missing nullability on parameter `c` in method `ResourceCursorAdapter`
-MissingNullability: androidx.cursoradapter.widget.ResourceCursorAdapter#ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, boolean) parameter #0:
-    Missing nullability on parameter `context` in method `ResourceCursorAdapter`
-MissingNullability: androidx.cursoradapter.widget.ResourceCursorAdapter#ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, boolean) parameter #2:
-    Missing nullability on parameter `c` in method `ResourceCursorAdapter`
 MissingNullability: androidx.cursoradapter.widget.ResourceCursorAdapter#ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, int) parameter #0:
     Missing nullability on parameter `context` in method `ResourceCursorAdapter`
 MissingNullability: androidx.cursoradapter.widget.ResourceCursorAdapter#ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, int) parameter #2:
@@ -107,14 +91,6 @@
     Missing nullability on parameter `cursor` in method `newView`
 MissingNullability: androidx.cursoradapter.widget.ResourceCursorAdapter#newView(android.content.Context, android.database.Cursor, android.view.ViewGroup) parameter #2:
     Missing nullability on parameter `parent` in method `newView`
-MissingNullability: androidx.cursoradapter.widget.SimpleCursorAdapter#SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, String[], int[]) parameter #0:
-    Missing nullability on parameter `context` in method `SimpleCursorAdapter`
-MissingNullability: androidx.cursoradapter.widget.SimpleCursorAdapter#SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, String[], int[]) parameter #2:
-    Missing nullability on parameter `c` in method `SimpleCursorAdapter`
-MissingNullability: androidx.cursoradapter.widget.SimpleCursorAdapter#SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, String[], int[]) parameter #3:
-    Missing nullability on parameter `from` in method `SimpleCursorAdapter`
-MissingNullability: androidx.cursoradapter.widget.SimpleCursorAdapter#SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, String[], int[]) parameter #4:
-    Missing nullability on parameter `to` in method `SimpleCursorAdapter`
 MissingNullability: androidx.cursoradapter.widget.SimpleCursorAdapter#SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, String[], int[], int) parameter #0:
     Missing nullability on parameter `context` in method `SimpleCursorAdapter`
 MissingNullability: androidx.cursoradapter.widget.SimpleCursorAdapter#SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, String[], int[], int) parameter #2:
diff --git a/datastore/datastore-core/api/current.txt b/datastore/datastore-core/api/current.txt
index 0b1e88c..abfdd9c 100644
--- a/datastore/datastore-core/api/current.txt
+++ b/datastore/datastore-core/api/current.txt
@@ -2,7 +2,7 @@
 package androidx.datastore.core {
 
   public final class CorruptionException extends java.io.IOException {
-    ctor public CorruptionException(String message, Throwable? cause);
+    ctor public CorruptionException(String message, optional Throwable? cause);
   }
 
   public interface DataMigration<T> {
diff --git a/datastore/datastore-core/api/public_plus_experimental_current.txt b/datastore/datastore-core/api/public_plus_experimental_current.txt
index 0b1e88c..abfdd9c 100644
--- a/datastore/datastore-core/api/public_plus_experimental_current.txt
+++ b/datastore/datastore-core/api/public_plus_experimental_current.txt
@@ -2,7 +2,7 @@
 package androidx.datastore.core {
 
   public final class CorruptionException extends java.io.IOException {
-    ctor public CorruptionException(String message, Throwable? cause);
+    ctor public CorruptionException(String message, optional Throwable? cause);
   }
 
   public interface DataMigration<T> {
diff --git a/datastore/datastore-core/api/restricted_current.txt b/datastore/datastore-core/api/restricted_current.txt
index 0b1e88c..abfdd9c 100644
--- a/datastore/datastore-core/api/restricted_current.txt
+++ b/datastore/datastore-core/api/restricted_current.txt
@@ -2,7 +2,7 @@
 package androidx.datastore.core {
 
   public final class CorruptionException extends java.io.IOException {
-    ctor public CorruptionException(String message, Throwable? cause);
+    ctor public CorruptionException(String message, optional Throwable? cause);
   }
 
   public interface DataMigration<T> {
diff --git a/datastore/datastore/api/api_lint.ignore b/datastore/datastore/api/api_lint.ignore
index f65d316..18fc7f7 100644
--- a/datastore/datastore/api/api_lint.ignore
+++ b/datastore/datastore/api/api_lint.ignore
@@ -3,3 +3,7 @@
     A Kotlin method with default parameter values should be annotated with @JvmOverloads for better Java interoperability; see https://android.github.io/kotlin-guides/interop.html#function-overloads-for-defaults
 MissingJvmstatic: androidx.datastore.migrations.SharedPreferencesView#getStringSet(String, java.util.Set<java.lang.String>):
     A Kotlin method with default parameter values should be annotated with @JvmOverloads for better Java interoperability; see https://android.github.io/kotlin-guides/interop.html#function-overloads-for-defaults
+
+
+NullableCollection: androidx.datastore.migrations.SharedPreferencesView#getStringSet(String, java.util.Set<java.lang.String>):
+    Return type of method androidx.datastore.migrations.SharedPreferencesView.getStringSet(String,java.util.Set<java.lang.String>) is a nullable collection (`java.util.Set`); must be non-null
diff --git a/datastore/datastore/api/current.txt b/datastore/datastore/api/current.txt
index 4a1f228..21497c8 100644
--- a/datastore/datastore/api/current.txt
+++ b/datastore/datastore/api/current.txt
@@ -13,11 +13,11 @@
 package androidx.datastore.migrations {
 
   public final class SharedPreferencesMigration<T> implements androidx.datastore.core.DataMigration<T> {
-    ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
-    ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+    ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+    ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
     ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
-    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
-    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
     ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
     method @kotlin.jvm.Throws(exceptionClasses=IOException::class) public suspend Object? cleanUp(kotlin.coroutines.Continuation<? super kotlin.Unit> p) throws java.io.IOException;
     method public suspend Object? migrate(T? currentData, kotlin.coroutines.Continuation<? super T> p);
diff --git a/datastore/datastore/api/public_plus_experimental_current.txt b/datastore/datastore/api/public_plus_experimental_current.txt
index 4a1f228..21497c8 100644
--- a/datastore/datastore/api/public_plus_experimental_current.txt
+++ b/datastore/datastore/api/public_plus_experimental_current.txt
@@ -13,11 +13,11 @@
 package androidx.datastore.migrations {
 
   public final class SharedPreferencesMigration<T> implements androidx.datastore.core.DataMigration<T> {
-    ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
-    ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+    ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+    ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
     ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
-    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
-    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
     ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
     method @kotlin.jvm.Throws(exceptionClasses=IOException::class) public suspend Object? cleanUp(kotlin.coroutines.Continuation<? super kotlin.Unit> p) throws java.io.IOException;
     method public suspend Object? migrate(T? currentData, kotlin.coroutines.Continuation<? super T> p);
diff --git a/datastore/datastore/api/restricted_current.txt b/datastore/datastore/api/restricted_current.txt
index 4a1f228..21497c8 100644
--- a/datastore/datastore/api/restricted_current.txt
+++ b/datastore/datastore/api/restricted_current.txt
@@ -13,11 +13,11 @@
 package androidx.datastore.migrations {
 
   public final class SharedPreferencesMigration<T> implements androidx.datastore.core.DataMigration<T> {
-    ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
-    ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+    ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+    ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
     ctor public SharedPreferencesMigration(kotlin.jvm.functions.Function0<? extends android.content.SharedPreferences> produceSharedPreferences, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
-    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
-    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate, optional kotlin.jvm.functions.Function2<? super T,? super kotlin.coroutines.Continuation<? super java.lang.Boolean>,?> shouldRunMigration, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
+    ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, optional java.util.Set<java.lang.String> keysToMigrate, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
     ctor public SharedPreferencesMigration(android.content.Context context, String sharedPreferencesName, kotlin.jvm.functions.Function3<? super androidx.datastore.migrations.SharedPreferencesView,? super T,? super kotlin.coroutines.Continuation<? super T>,?> migrate);
     method @kotlin.jvm.Throws(exceptionClasses=IOException::class) public suspend Object? cleanUp(kotlin.coroutines.Continuation<? super kotlin.Unit> p) throws java.io.IOException;
     method public suspend Object? migrate(T? currentData, kotlin.coroutines.Continuation<? super T> p);
diff --git a/drawerlayout/drawerlayout/api/api_lint.ignore b/drawerlayout/drawerlayout/api/api_lint.ignore
index 002b6b2..d9d6b75 100644
--- a/drawerlayout/drawerlayout/api/api_lint.ignore
+++ b/drawerlayout/drawerlayout/api/api_lint.ignore
@@ -45,8 +45,6 @@
     Missing nullability on method `onSaveInstanceState` return
 MissingNullability: androidx.drawerlayout.widget.DrawerLayout#onTouchEvent(android.view.MotionEvent) parameter #0:
     Missing nullability on parameter `ev` in method `onTouchEvent`
-MissingNullability: androidx.drawerlayout.widget.DrawerLayout#setDrawerListener(androidx.drawerlayout.widget.DrawerLayout.DrawerListener) parameter #0:
-    Missing nullability on parameter `listener` in method `setDrawerListener`
 MissingNullability: androidx.drawerlayout.widget.DrawerLayout#setDrawerShadow(android.graphics.drawable.Drawable, int) parameter #0:
     Missing nullability on parameter `shadowDrawable` in method `setDrawerShadow`
 MissingNullability: androidx.drawerlayout.widget.DrawerLayout.SavedState#CREATOR:
diff --git a/exifinterface/exifinterface/api/api_lint.ignore b/exifinterface/exifinterface/api/api_lint.ignore
index d22dffd..cbb1edd 100644
--- a/exifinterface/exifinterface/api/api_lint.ignore
+++ b/exifinterface/exifinterface/api/api_lint.ignore
@@ -5,8 +5,6 @@
     Missing nullability on field `BITS_PER_SAMPLE_GREYSCALE_2` in class `class androidx.exifinterface.media.ExifInterface`
 MissingNullability: androidx.exifinterface.media.ExifInterface#BITS_PER_SAMPLE_RGB:
     Missing nullability on field `BITS_PER_SAMPLE_RGB` in class `class androidx.exifinterface.media.ExifInterface`
-MissingNullability: androidx.exifinterface.media.ExifInterface#getLatLong(float[]) parameter #0:
-    Missing nullability on parameter `output` in method `getLatLong`
 MissingNullability: androidx.exifinterface.media.ExifInterface#setGpsInfo(android.location.Location) parameter #0:
     Missing nullability on parameter `location` in method `setGpsInfo`
 
diff --git a/fragment/fragment-testing/api/current.ignore b/fragment/fragment-testing/api/current.ignore
deleted file mode 100644
index aff4f36..0000000
--- a/fragment/fragment-testing/api/current.ignore
+++ /dev/null
@@ -1,27 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launch(Class<F>):
-    Method androidx.fragment.app.testing.FragmentScenario.launch has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launch(Class<F>, android.os.Bundle):
-    Method androidx.fragment.app.testing.FragmentScenario.launch has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launch(Class<F>, android.os.Bundle, androidx.fragment.app.FragmentFactory):
-    Method androidx.fragment.app.testing.FragmentScenario.launch has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launch(Class<F>, android.os.Bundle, int, androidx.fragment.app.FragmentFactory):
-    Method androidx.fragment.app.testing.FragmentScenario.launch has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launch(Class<F>, android.os.Bundle, int, androidx.lifecycle.Lifecycle.State, androidx.fragment.app.FragmentFactory):
-    Method androidx.fragment.app.testing.FragmentScenario.launch has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launchInContainer(Class<F>):
-    Method androidx.fragment.app.testing.FragmentScenario.launchInContainer has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launchInContainer(Class<F>, android.os.Bundle):
-    Method androidx.fragment.app.testing.FragmentScenario.launchInContainer has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launchInContainer(Class<F>, android.os.Bundle, androidx.fragment.app.FragmentFactory):
-    Method androidx.fragment.app.testing.FragmentScenario.launchInContainer has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launchInContainer(Class<F>, android.os.Bundle, int, androidx.fragment.app.FragmentFactory):
-    Method androidx.fragment.app.testing.FragmentScenario.launchInContainer has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launchInContainer(Class<F>, android.os.Bundle, int, androidx.lifecycle.Lifecycle.State, androidx.fragment.app.FragmentFactory):
-    Method androidx.fragment.app.testing.FragmentScenario.launchInContainer has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#moveToState(androidx.lifecycle.Lifecycle.State):
-    Method androidx.fragment.app.testing.FragmentScenario.moveToState has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F>):
-    Method androidx.fragment.app.testing.FragmentScenario.onFragment has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#recreate():
-    Method androidx.fragment.app.testing.FragmentScenario.recreate has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
diff --git a/fragment/fragment-testing/api/restricted_current.ignore b/fragment/fragment-testing/api/restricted_current.ignore
deleted file mode 100644
index aff4f36..0000000
--- a/fragment/fragment-testing/api/restricted_current.ignore
+++ /dev/null
@@ -1,27 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launch(Class<F>):
-    Method androidx.fragment.app.testing.FragmentScenario.launch has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launch(Class<F>, android.os.Bundle):
-    Method androidx.fragment.app.testing.FragmentScenario.launch has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launch(Class<F>, android.os.Bundle, androidx.fragment.app.FragmentFactory):
-    Method androidx.fragment.app.testing.FragmentScenario.launch has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launch(Class<F>, android.os.Bundle, int, androidx.fragment.app.FragmentFactory):
-    Method androidx.fragment.app.testing.FragmentScenario.launch has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launch(Class<F>, android.os.Bundle, int, androidx.lifecycle.Lifecycle.State, androidx.fragment.app.FragmentFactory):
-    Method androidx.fragment.app.testing.FragmentScenario.launch has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launchInContainer(Class<F>):
-    Method androidx.fragment.app.testing.FragmentScenario.launchInContainer has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launchInContainer(Class<F>, android.os.Bundle):
-    Method androidx.fragment.app.testing.FragmentScenario.launchInContainer has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launchInContainer(Class<F>, android.os.Bundle, androidx.fragment.app.FragmentFactory):
-    Method androidx.fragment.app.testing.FragmentScenario.launchInContainer has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launchInContainer(Class<F>, android.os.Bundle, int, androidx.fragment.app.FragmentFactory):
-    Method androidx.fragment.app.testing.FragmentScenario.launchInContainer has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#launchInContainer(Class<F>, android.os.Bundle, int, androidx.lifecycle.Lifecycle.State, androidx.fragment.app.FragmentFactory):
-    Method androidx.fragment.app.testing.FragmentScenario.launchInContainer has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#moveToState(androidx.lifecycle.Lifecycle.State):
-    Method androidx.fragment.app.testing.FragmentScenario.moveToState has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F>):
-    Method androidx.fragment.app.testing.FragmentScenario.onFragment has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
-ChangedType: androidx.fragment.app.testing.FragmentScenario#recreate():
-    Method androidx.fragment.app.testing.FragmentScenario.recreate has changed return type from androidx.fragment.app.testing.FragmentScenario<F!> to androidx.fragment.app.testing.FragmentScenario<F>
diff --git a/fragment/fragment/api/api_lint.ignore b/fragment/fragment/api/api_lint.ignore
index b67ac72..e3c754d 100644
--- a/fragment/fragment/api/api_lint.ignore
+++ b/fragment/fragment/api/api_lint.ignore
@@ -27,32 +27,26 @@
     Missing nullability on parameter `intent` in method `startActivity`
 MissingNullability: androidx.fragment.app.Fragment#startActivity(android.content.Intent, android.os.Bundle) parameter #0:
     Missing nullability on parameter `intent` in method `startActivity`
-MissingNullability: androidx.fragment.app.Fragment#startActivityForResult(android.content.Intent, int) parameter #0:
-    Missing nullability on parameter `intent` in method `startActivityForResult`
-MissingNullability: androidx.fragment.app.Fragment#startActivityForResult(android.content.Intent, int, android.os.Bundle) parameter #0:
-    Missing nullability on parameter `intent` in method `startActivityForResult`
-MissingNullability: androidx.fragment.app.Fragment#startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) parameter #0:
-    Missing nullability on parameter `intent` in method `startIntentSenderForResult`
 MissingNullability: androidx.fragment.app.FragmentActivity#onNewIntent(android.content.Intent) parameter #0:
     Missing nullability on parameter `intent` in method `onNewIntent`
 MissingNullability: androidx.fragment.app.FragmentActivity#startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int) parameter #1:
     Missing nullability on parameter `intent` in method `startActivityFromFragment`
 MissingNullability: androidx.fragment.app.FragmentActivity#startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int, android.os.Bundle) parameter #1:
     Missing nullability on parameter `intent` in method `startActivityFromFragment`
-MissingNullability: androidx.fragment.app.FragmentActivity#startIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) parameter #1:
-    Missing nullability on parameter `intent` in method `startIntentSenderFromFragment`
 MissingNullability: androidx.fragment.app.FragmentController#getActiveFragments(java.util.List<androidx.fragment.app.Fragment>) parameter #0:
     Missing nullability on parameter `actives` in method `getActiveFragments`
-MissingNullability: androidx.fragment.app.FragmentController#restoreLoaderNonConfig(androidx.collection.SimpleArrayMap<java.lang.String,androidx.loader.app.LoaderManager>) parameter #0:
-    Missing nullability on parameter `loaderManagers` in method `restoreLoaderNonConfig`
 MissingNullability: androidx.fragment.app.FragmentHostCallback#onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int) parameter #1:
     Missing nullability on parameter `intent` in method `onStartActivityFromFragment`
 MissingNullability: androidx.fragment.app.FragmentHostCallback#onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int, android.os.Bundle) parameter #1:
     Missing nullability on parameter `intent` in method `onStartActivityFromFragment`
-MissingNullability: androidx.fragment.app.FragmentHostCallback#onStartIntentSenderFromFragment(androidx.fragment.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) parameter #1:
-    Missing nullability on parameter `intent` in method `onStartIntentSenderFromFragment`
-MissingNullability: androidx.fragment.app.FragmentTabHost#onRestoreInstanceState(android.os.Parcelable) parameter #0:
-    Missing nullability on parameter `state` in method `onRestoreInstanceState`
+
+
+NullableCollection: androidx.fragment.app.Fragment#getArguments():
+    Return type of method androidx.fragment.app.Fragment.getArguments() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.fragment.app.FragmentHostCallback#onDump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]) parameter #3:
+    Type of parameter args in androidx.fragment.app.FragmentHostCallback.onDump(String prefix, java.io.FileDescriptor fd, java.io.PrintWriter writer, String[] args) is a nullable collection (`java.lang.String[]`); must be non-null
+NullableCollection: androidx.fragment.app.FragmentHostCallback#onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent, int, android.os.Bundle) parameter #3:
+    Type of parameter options in androidx.fragment.app.FragmentHostCallback.onStartActivityFromFragment(androidx.fragment.app.Fragment fragment, android.content.Intent intent, int requestCode, android.os.Bundle options) is a nullable collection (`android.os.Bundle`); must be non-null
 
 
 ParcelNotFinal: androidx.fragment.app.Fragment.SavedState:
@@ -67,8 +61,6 @@
     Must use ParcelFileDescriptor instead of FileDescriptor in parameter fd in androidx.fragment.app.Fragment.dump(String prefix, java.io.FileDescriptor fd, java.io.PrintWriter writer, String[] args)
 UseParcelFileDescriptor: androidx.fragment.app.FragmentActivity#dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]) parameter #1:
     Must use ParcelFileDescriptor instead of FileDescriptor in parameter fd in androidx.fragment.app.FragmentActivity.dump(String prefix, java.io.FileDescriptor fd, java.io.PrintWriter writer, String[] args)
-UseParcelFileDescriptor: androidx.fragment.app.FragmentController#dumpLoaders(String, java.io.FileDescriptor, java.io.PrintWriter, String[]) parameter #1:
-    Must use ParcelFileDescriptor instead of FileDescriptor in parameter fd in androidx.fragment.app.FragmentController.dumpLoaders(String prefix, java.io.FileDescriptor fd, java.io.PrintWriter writer, String[] args)
 UseParcelFileDescriptor: androidx.fragment.app.FragmentHostCallback#onDump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]) parameter #1:
     Must use ParcelFileDescriptor instead of FileDescriptor in parameter fd in androidx.fragment.app.FragmentHostCallback.onDump(String prefix, java.io.FileDescriptor fd, java.io.PrintWriter writer, String[] args)
 UseParcelFileDescriptor: androidx.fragment.app.FragmentManager#dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]) parameter #1:
diff --git a/leanback/leanback-paging/api/1.1.0-beta01.txt b/leanback/leanback-paging/api/1.1.0-beta01.txt
index 7ea1929..7cdea77 100644
--- a/leanback/leanback-paging/api/1.1.0-beta01.txt
+++ b/leanback/leanback-paging/api/1.1.0-beta01.txt
@@ -2,14 +2,14 @@
 package androidx.leanback.paging {
 
   public final class PagingDataAdapter<T> extends androidx.leanback.widget.ObjectAdapter {
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
-    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
-    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public T? get(int position);
diff --git a/leanback/leanback-paging/api/current.txt b/leanback/leanback-paging/api/current.txt
index 7ea1929..7cdea77 100644
--- a/leanback/leanback-paging/api/current.txt
+++ b/leanback/leanback-paging/api/current.txt
@@ -2,14 +2,14 @@
 package androidx.leanback.paging {
 
   public final class PagingDataAdapter<T> extends androidx.leanback.widget.ObjectAdapter {
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
-    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
-    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public T? get(int position);
diff --git a/leanback/leanback-paging/api/public_plus_experimental_1.1.0-beta01.txt b/leanback/leanback-paging/api/public_plus_experimental_1.1.0-beta01.txt
index 7ea1929..7cdea77 100644
--- a/leanback/leanback-paging/api/public_plus_experimental_1.1.0-beta01.txt
+++ b/leanback/leanback-paging/api/public_plus_experimental_1.1.0-beta01.txt
@@ -2,14 +2,14 @@
 package androidx.leanback.paging {
 
   public final class PagingDataAdapter<T> extends androidx.leanback.widget.ObjectAdapter {
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
-    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
-    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public T? get(int position);
diff --git a/leanback/leanback-paging/api/public_plus_experimental_current.txt b/leanback/leanback-paging/api/public_plus_experimental_current.txt
index 7ea1929..7cdea77 100644
--- a/leanback/leanback-paging/api/public_plus_experimental_current.txt
+++ b/leanback/leanback-paging/api/public_plus_experimental_current.txt
@@ -2,14 +2,14 @@
 package androidx.leanback.paging {
 
   public final class PagingDataAdapter<T> extends androidx.leanback.widget.ObjectAdapter {
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
-    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
-    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public T? get(int position);
diff --git a/leanback/leanback-paging/api/restricted_1.1.0-beta01.txt b/leanback/leanback-paging/api/restricted_1.1.0-beta01.txt
index 7ea1929..7cdea77 100644
--- a/leanback/leanback-paging/api/restricted_1.1.0-beta01.txt
+++ b/leanback/leanback-paging/api/restricted_1.1.0-beta01.txt
@@ -2,14 +2,14 @@
 package androidx.leanback.paging {
 
   public final class PagingDataAdapter<T> extends androidx.leanback.widget.ObjectAdapter {
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
-    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
-    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public T? get(int position);
diff --git a/leanback/leanback-paging/api/restricted_current.txt b/leanback/leanback-paging/api/restricted_current.txt
index 7ea1929..7cdea77 100644
--- a/leanback/leanback-paging/api/restricted_current.txt
+++ b/leanback/leanback-paging/api/restricted_current.txt
@@ -2,14 +2,14 @@
 package androidx.leanback.paging {
 
   public final class PagingDataAdapter<T> extends androidx.leanback.widget.ObjectAdapter {
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
-    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.leanback.widget.Presenter presenter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
-    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.leanback.widget.PresenterSelector presenterSelector, androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public T? get(int position);
diff --git a/leanback/leanback/api/api_lint.ignore b/leanback/leanback/api/api_lint.ignore
index 3cb37ff..c4a34f6 100644
--- a/leanback/leanback/api/api_lint.ignore
+++ b/leanback/leanback/api/api_lint.ignore
@@ -93,8 +93,6 @@
     Parameter type is concrete collection (`java.util.ArrayList`); must be higher-level interface
 
 
-ContextFirst: androidx.leanback.widget.GuidedAction.BuilderBase#iconResourceId(int, android.content.Context) parameter #1:
-    Context is distinct, so it must be the first argument (method `iconResourceId`)
 ContextFirst: androidx.leanback.widget.PlaybackControlsRow.ThumbsAction#ThumbsAction(int, android.content.Context, int, int) parameter #1:
     Context is distinct, so it must be the first argument (method `ThumbsAction`)
 
@@ -179,8 +177,6 @@
     Missing nullability on parameter `activity` in method `getInstance`
 MissingNullability: androidx.leanback.app.BackgroundManager#setBitmap(android.graphics.Bitmap) parameter #0:
     Missing nullability on parameter `bitmap` in method `setBitmap`
-MissingNullability: androidx.leanback.app.BackgroundManager#setDimLayer(android.graphics.drawable.Drawable) parameter #0:
-    Missing nullability on parameter `drawable` in method `setDimLayer`
 MissingNullability: androidx.leanback.app.BackgroundManager#setDrawable(android.graphics.drawable.Drawable) parameter #0:
     Missing nullability on parameter `drawable` in method `setDrawable`
 MissingNullability: androidx.leanback.app.BaseFragment#createEntranceTransition():
@@ -453,12 +449,6 @@
     Missing nullability on method `getParallax` return
 MissingNullability: androidx.leanback.app.DetailsFragment#getRowsFragment():
     Missing nullability on method `getRowsFragment` return
-MissingNullability: androidx.leanback.app.DetailsFragment#inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) parameter #0:
-    Missing nullability on parameter `inflater` in method `inflateTitle`
-MissingNullability: androidx.leanback.app.DetailsFragment#inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) parameter #1:
-    Missing nullability on parameter `parent` in method `inflateTitle`
-MissingNullability: androidx.leanback.app.DetailsFragment#inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) parameter #2:
-    Missing nullability on parameter `savedInstanceState` in method `inflateTitle`
 MissingNullability: androidx.leanback.app.DetailsFragment#onCreate(android.os.Bundle) parameter #0:
     Missing nullability on parameter `savedInstanceState` in method `onCreate`
 MissingNullability: androidx.leanback.app.DetailsFragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle):
@@ -525,12 +515,6 @@
     Missing nullability on method `getParallax` return
 MissingNullability: androidx.leanback.app.DetailsSupportFragment#getRowsSupportFragment():
     Missing nullability on method `getRowsSupportFragment` return
-MissingNullability: androidx.leanback.app.DetailsSupportFragment#inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) parameter #0:
-    Missing nullability on parameter `inflater` in method `inflateTitle`
-MissingNullability: androidx.leanback.app.DetailsSupportFragment#inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) parameter #1:
-    Missing nullability on parameter `parent` in method `inflateTitle`
-MissingNullability: androidx.leanback.app.DetailsSupportFragment#inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) parameter #2:
-    Missing nullability on parameter `savedInstanceState` in method `inflateTitle`
 MissingNullability: androidx.leanback.app.DetailsSupportFragment#onCreate(android.os.Bundle) parameter #0:
     Missing nullability on parameter `savedInstanceState` in method `onCreate`
 MissingNullability: androidx.leanback.app.DetailsSupportFragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle):
@@ -719,8 +703,6 @@
     Missing nullability on parameter `action` in method `onGuidedActionClicked`
 MissingNullability: androidx.leanback.app.GuidedStepFragment#onGuidedActionEditCanceled(androidx.leanback.widget.GuidedAction) parameter #0:
     Missing nullability on parameter `action` in method `onGuidedActionEditCanceled`
-MissingNullability: androidx.leanback.app.GuidedStepFragment#onGuidedActionEdited(androidx.leanback.widget.GuidedAction) parameter #0:
-    Missing nullability on parameter `action` in method `onGuidedActionEdited`
 MissingNullability: androidx.leanback.app.GuidedStepFragment#onGuidedActionEditedAndProceed(androidx.leanback.widget.GuidedAction) parameter #0:
     Missing nullability on parameter `action` in method `onGuidedActionEditedAndProceed`
 MissingNullability: androidx.leanback.app.GuidedStepFragment#onGuidedActionFocused(androidx.leanback.widget.GuidedAction) parameter #0:
@@ -815,8 +797,6 @@
     Missing nullability on parameter `action` in method `onGuidedActionClicked`
 MissingNullability: androidx.leanback.app.GuidedStepSupportFragment#onGuidedActionEditCanceled(androidx.leanback.widget.GuidedAction) parameter #0:
     Missing nullability on parameter `action` in method `onGuidedActionEditCanceled`
-MissingNullability: androidx.leanback.app.GuidedStepSupportFragment#onGuidedActionEdited(androidx.leanback.widget.GuidedAction) parameter #0:
-    Missing nullability on parameter `action` in method `onGuidedActionEdited`
 MissingNullability: androidx.leanback.app.GuidedStepSupportFragment#onGuidedActionEditedAndProceed(androidx.leanback.widget.GuidedAction) parameter #0:
     Missing nullability on parameter `action` in method `onGuidedActionEditedAndProceed`
 MissingNullability: androidx.leanback.app.GuidedStepSupportFragment#onGuidedActionFocused(androidx.leanback.widget.GuidedAction) parameter #0:
@@ -1159,8 +1139,6 @@
     Missing nullability on parameter `intent` in method `setSearchQuery`
 MissingNullability: androidx.leanback.app.SearchFragment#setSearchResultProvider(androidx.leanback.app.SearchFragment.SearchResultProvider) parameter #0:
     Missing nullability on parameter `searchResultProvider` in method `setSearchResultProvider`
-MissingNullability: androidx.leanback.app.SearchFragment#setSpeechRecognitionCallback(androidx.leanback.widget.SpeechRecognitionCallback) parameter #0:
-    Missing nullability on parameter `callback` in method `setSpeechRecognitionCallback`
 MissingNullability: androidx.leanback.app.SearchFragment#setTitle(String) parameter #0:
     Missing nullability on parameter `title` in method `setTitle`
 MissingNullability: androidx.leanback.app.SearchFragment.SearchResultProvider#getResultsAdapter():
@@ -1229,8 +1207,6 @@
     Missing nullability on parameter `intent` in method `setSearchQuery`
 MissingNullability: androidx.leanback.app.SearchSupportFragment#setSearchResultProvider(androidx.leanback.app.SearchSupportFragment.SearchResultProvider) parameter #0:
     Missing nullability on parameter `searchResultProvider` in method `setSearchResultProvider`
-MissingNullability: androidx.leanback.app.SearchSupportFragment#setSpeechRecognitionCallback(androidx.leanback.widget.SpeechRecognitionCallback) parameter #0:
-    Missing nullability on parameter `callback` in method `setSpeechRecognitionCallback`
 MissingNullability: androidx.leanback.app.SearchSupportFragment#setTitle(String) parameter #0:
     Missing nullability on parameter `title` in method `setTitle`
 MissingNullability: androidx.leanback.app.SearchSupportFragment.SearchResultProvider#getResultsAdapter():
@@ -1593,8 +1569,6 @@
     Missing nullability on parameter `event` in method `onKey`
 MissingNullability: androidx.leanback.media.PlaybackControlGlue#setControlsRow(androidx.leanback.widget.PlaybackControlsRow) parameter #0:
     Missing nullability on parameter `controlsRow` in method `setControlsRow`
-MissingNullability: androidx.leanback.media.PlaybackControlGlue#setControlsRowPresenter(androidx.leanback.widget.PlaybackControlsRowPresenter) parameter #0:
-    Missing nullability on parameter `presenter` in method `setControlsRowPresenter`
 MissingNullability: androidx.leanback.media.PlaybackControlGlue#setPlaybackRowPresenter(androidx.leanback.widget.PlaybackRowPresenter) parameter #0:
     Missing nullability on parameter `presenter` in method `setPlaybackRowPresenter`
 MissingNullability: androidx.leanback.media.PlaybackGlue#PlaybackGlue(android.content.Context) parameter #0:
@@ -2053,10 +2027,6 @@
     Missing nullability on field `mParentViewHolder` in class `class androidx.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder`
 MissingNullability: androidx.leanback.widget.DetailsOverviewRow#DetailsOverviewRow(Object) parameter #0:
     Missing nullability on parameter `item` in method `DetailsOverviewRow`
-MissingNullability: androidx.leanback.widget.DetailsOverviewRow#addAction(androidx.leanback.widget.Action) parameter #0:
-    Missing nullability on parameter `action` in method `addAction`
-MissingNullability: androidx.leanback.widget.DetailsOverviewRow#addAction(int, androidx.leanback.widget.Action) parameter #1:
-    Missing nullability on parameter `action` in method `addAction`
 MissingNullability: androidx.leanback.widget.DetailsOverviewRow#getActionForKeyCode(int):
     Missing nullability on method `getActionForKeyCode` return
 MissingNullability: androidx.leanback.widget.DetailsOverviewRow#getActionsAdapter():
@@ -2065,8 +2035,6 @@
     Missing nullability on method `getImageDrawable` return
 MissingNullability: androidx.leanback.widget.DetailsOverviewRow#getItem():
     Missing nullability on method `getItem` return
-MissingNullability: androidx.leanback.widget.DetailsOverviewRow#removeAction(androidx.leanback.widget.Action) parameter #0:
-    Missing nullability on parameter `action` in method `removeAction`
 MissingNullability: androidx.leanback.widget.DetailsOverviewRow#setActionsAdapter(androidx.leanback.widget.ObjectAdapter) parameter #0:
     Missing nullability on parameter `adapter` in method `setActionsAdapter`
 MissingNullability: androidx.leanback.widget.DetailsOverviewRow#setImageBitmap(android.content.Context, android.graphics.Bitmap) parameter #0:
@@ -2149,10 +2117,6 @@
     Missing nullability on parameter `adapter` in method `setupHeaderItemFocusHighlight`
 MissingNullability: androidx.leanback.widget.FocusHighlightHelper#setupHeaderItemFocusHighlight(androidx.leanback.widget.ItemBridgeAdapter, boolean) parameter #0:
     Missing nullability on parameter `adapter` in method `setupHeaderItemFocusHighlight`
-MissingNullability: androidx.leanback.widget.FocusHighlightHelper#setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView) parameter #0:
-    Missing nullability on parameter `gridView` in method `setupHeaderItemFocusHighlight`
-MissingNullability: androidx.leanback.widget.FocusHighlightHelper#setupHeaderItemFocusHighlight(androidx.leanback.widget.VerticalGridView, boolean) parameter #0:
-    Missing nullability on parameter `gridView` in method `setupHeaderItemFocusHighlight`
 MissingNullability: androidx.leanback.widget.FullWidthDetailsOverviewRowPresenter#FullWidthDetailsOverviewRowPresenter(androidx.leanback.widget.Presenter) parameter #0:
     Missing nullability on parameter `detailsPresenter` in method `FullWidthDetailsOverviewRowPresenter`
 MissingNullability: androidx.leanback.widget.FullWidthDetailsOverviewRowPresenter#FullWidthDetailsOverviewRowPresenter(androidx.leanback.widget.Presenter, androidx.leanback.widget.DetailsOverviewLogoPresenter) parameter #0:
@@ -2317,8 +2281,6 @@
     Missing nullability on method `getContext` return
 MissingNullability: androidx.leanback.widget.GuidedAction.BuilderBase#icon(android.graphics.drawable.Drawable) parameter #0:
     Missing nullability on parameter `icon` in method `icon`
-MissingNullability: androidx.leanback.widget.GuidedAction.BuilderBase#iconResourceId(int, android.content.Context) parameter #1:
-    Missing nullability on parameter `context` in method `iconResourceId`
 MissingNullability: androidx.leanback.widget.GuidedAction.BuilderBase#intent(android.content.Intent) parameter #0:
     Missing nullability on parameter `intent` in method `intent`
 MissingNullability: androidx.leanback.widget.GuidedAction.BuilderBase#subActions(java.util.List<androidx.leanback.widget.GuidedAction>) parameter #0:
@@ -2403,10 +2365,6 @@
     Missing nullability on method `onCreateViewHolder` return
 MissingNullability: androidx.leanback.widget.GuidedActionsStylist#onCreateViewHolder(android.view.ViewGroup, int) parameter #0:
     Missing nullability on parameter `parent` in method `onCreateViewHolder`
-MissingNullability: androidx.leanback.widget.GuidedActionsStylist#onEditingModeChange(androidx.leanback.widget.GuidedActionsStylist.ViewHolder, androidx.leanback.widget.GuidedAction, boolean) parameter #0:
-    Missing nullability on parameter `vh` in method `onEditingModeChange`
-MissingNullability: androidx.leanback.widget.GuidedActionsStylist#onEditingModeChange(androidx.leanback.widget.GuidedActionsStylist.ViewHolder, androidx.leanback.widget.GuidedAction, boolean) parameter #1:
-    Missing nullability on parameter `action` in method `onEditingModeChange`
 MissingNullability: androidx.leanback.widget.GuidedActionsStylist#onEditingModeChange(androidx.leanback.widget.GuidedActionsStylist.ViewHolder, boolean, boolean) parameter #0:
     Missing nullability on parameter `vh` in method `onEditingModeChange`
 MissingNullability: androidx.leanback.widget.GuidedActionsStylist#onUpdateActivatorView(androidx.leanback.widget.GuidedActionsStylist.ViewHolder, androidx.leanback.widget.GuidedAction) parameter #0:
@@ -2417,18 +2375,10 @@
     Missing nullability on parameter `avh` in method `onUpdateExpandedViewHolder`
 MissingNullability: androidx.leanback.widget.GuidedActionsStylist#openInEditMode(androidx.leanback.widget.GuidedAction) parameter #0:
     Missing nullability on parameter `action` in method `openInEditMode`
-MissingNullability: androidx.leanback.widget.GuidedActionsStylist#setEditingMode(androidx.leanback.widget.GuidedActionsStylist.ViewHolder, androidx.leanback.widget.GuidedAction, boolean) parameter #0:
-    Missing nullability on parameter `vh` in method `setEditingMode`
-MissingNullability: androidx.leanback.widget.GuidedActionsStylist#setEditingMode(androidx.leanback.widget.GuidedActionsStylist.ViewHolder, androidx.leanback.widget.GuidedAction, boolean) parameter #1:
-    Missing nullability on parameter `action` in method `setEditingMode`
-MissingNullability: androidx.leanback.widget.GuidedActionsStylist#setExpandedViewHolder(androidx.leanback.widget.GuidedActionsStylist.ViewHolder) parameter #0:
-    Missing nullability on parameter `avh` in method `setExpandedViewHolder`
 MissingNullability: androidx.leanback.widget.GuidedActionsStylist#setupImeOptions(androidx.leanback.widget.GuidedActionsStylist.ViewHolder, androidx.leanback.widget.GuidedAction) parameter #0:
     Missing nullability on parameter `vh` in method `setupImeOptions`
 MissingNullability: androidx.leanback.widget.GuidedActionsStylist#setupImeOptions(androidx.leanback.widget.GuidedActionsStylist.ViewHolder, androidx.leanback.widget.GuidedAction) parameter #1:
     Missing nullability on parameter `action` in method `setupImeOptions`
-MissingNullability: androidx.leanback.widget.GuidedActionsStylist#startExpandedTransition(androidx.leanback.widget.GuidedActionsStylist.ViewHolder) parameter #0:
-    Missing nullability on parameter `avh` in method `startExpandedTransition`
 MissingNullability: androidx.leanback.widget.GuidedActionsStylist.ViewHolder#ViewHolder(android.view.View) parameter #0:
     Missing nullability on parameter `v` in method `ViewHolder`
 MissingNullability: androidx.leanback.widget.GuidedActionsStylist.ViewHolder#ViewHolder(android.view.View, boolean) parameter #0:
@@ -2527,8 +2477,6 @@
     Missing nullability on parameter `context` in method `ImageCardView`
 MissingNullability: androidx.leanback.widget.ImageCardView#ImageCardView(android.content.Context, android.util.AttributeSet, int) parameter #1:
     Missing nullability on parameter `attrs` in method `ImageCardView`
-MissingNullability: androidx.leanback.widget.ImageCardView#ImageCardView(android.content.Context, int) parameter #0:
-    Missing nullability on parameter `context` in method `ImageCardView`
 MissingNullability: androidx.leanback.widget.ImageCardView#getBadgeImage():
     Missing nullability on method `getBadgeImage` return
 MissingNullability: androidx.leanback.widget.ImageCardView#getContentText():
@@ -3341,8 +3289,6 @@
     Missing nullability on parameter `listener` in method `setSearchBarListener`
 MissingNullability: androidx.leanback.widget.SearchBar#setSearchQuery(String) parameter #0:
     Missing nullability on parameter `query` in method `setSearchQuery`
-MissingNullability: androidx.leanback.widget.SearchBar#setSpeechRecognitionCallback(androidx.leanback.widget.SpeechRecognitionCallback) parameter #0:
-    Missing nullability on parameter `request` in method `setSpeechRecognitionCallback`
 MissingNullability: androidx.leanback.widget.SearchBar#setSpeechRecognizer(android.speech.SpeechRecognizer) parameter #0:
     Missing nullability on parameter `recognizer` in method `setSpeechRecognizer`
 MissingNullability: androidx.leanback.widget.SearchBar#setTitle(String) parameter #0:
diff --git a/lifecycle/lifecycle-livedata-ktx/api/current.txt b/lifecycle/lifecycle-livedata-ktx/api/current.txt
index 002fa4e..152a448 100644
--- a/lifecycle/lifecycle-livedata-ktx/api/current.txt
+++ b/lifecycle/lifecycle-livedata-ktx/api/current.txt
@@ -2,8 +2,8 @@
 package androidx.lifecycle {
 
   public final class CoroutineLiveDataKt {
-    method public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @RequiresApi(android.os.Build.VERSION_CODES.O) public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, java.time.Duration timeout, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, java.time.Duration timeout, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
   }
 
   public final class FlowLiveDataConversions {
diff --git a/lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt b/lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt
index 002fa4e..152a448 100644
--- a/lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt
+++ b/lifecycle/lifecycle-livedata-ktx/api/restricted_current.txt
@@ -2,8 +2,8 @@
 package androidx.lifecycle {
 
   public final class CoroutineLiveDataKt {
-    method public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @RequiresApi(android.os.Build.VERSION_CODES.O) public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, java.time.Duration timeout, @kotlin.BuilderInference kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, optional long timeoutInMs, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @RequiresApi(android.os.Build.VERSION_CODES.O) public static <T> androidx.lifecycle.LiveData<T> liveData(optional kotlin.coroutines.CoroutineContext context, java.time.Duration timeout, kotlin.jvm.functions.Function2<? super androidx.lifecycle.LiveDataScope<T>,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
   }
 
   public final class FlowLiveDataConversions {
diff --git a/lifecycle/lifecycle-runtime-testing/api/current.ignore b/lifecycle/lifecycle-runtime-testing/api/current.ignore
new file mode 100644
index 0000000..2bacdcd
--- /dev/null
+++ b/lifecycle/lifecycle-runtime-testing/api/current.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedMethod: androidx.lifecycle.testing.TestLifecycleOwner#TestLifecycleOwner():
+    Removed constructor androidx.lifecycle.testing.TestLifecycleOwner()
diff --git a/lifecycle/lifecycle-runtime-testing/api/current.txt b/lifecycle/lifecycle-runtime-testing/api/current.txt
index f7d5eec..2161789 100644
--- a/lifecycle/lifecycle-runtime-testing/api/current.txt
+++ b/lifecycle/lifecycle-runtime-testing/api/current.txt
@@ -2,9 +2,8 @@
 package androidx.lifecycle.testing {
 
   public final class TestLifecycleOwner implements androidx.lifecycle.LifecycleOwner {
-    ctor public TestLifecycleOwner(androidx.lifecycle.Lifecycle.State initialState, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
-    ctor public TestLifecycleOwner(androidx.lifecycle.Lifecycle.State initialState);
-    ctor public TestLifecycleOwner();
+    ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
+    ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState);
     method public androidx.lifecycle.Lifecycle.State getCurrentState();
     method public androidx.lifecycle.LifecycleRegistry getLifecycle();
     method public int getObserverCount();
diff --git a/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_current.txt
index f7d5eec..2161789 100644
--- a/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_current.txt
@@ -2,9 +2,8 @@
 package androidx.lifecycle.testing {
 
   public final class TestLifecycleOwner implements androidx.lifecycle.LifecycleOwner {
-    ctor public TestLifecycleOwner(androidx.lifecycle.Lifecycle.State initialState, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
-    ctor public TestLifecycleOwner(androidx.lifecycle.Lifecycle.State initialState);
-    ctor public TestLifecycleOwner();
+    ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
+    ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState);
     method public androidx.lifecycle.Lifecycle.State getCurrentState();
     method public androidx.lifecycle.LifecycleRegistry getLifecycle();
     method public int getObserverCount();
diff --git a/lifecycle/lifecycle-runtime-testing/api/restricted_current.ignore b/lifecycle/lifecycle-runtime-testing/api/restricted_current.ignore
new file mode 100644
index 0000000..2bacdcd
--- /dev/null
+++ b/lifecycle/lifecycle-runtime-testing/api/restricted_current.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedMethod: androidx.lifecycle.testing.TestLifecycleOwner#TestLifecycleOwner():
+    Removed constructor androidx.lifecycle.testing.TestLifecycleOwner()
diff --git a/lifecycle/lifecycle-runtime-testing/api/restricted_current.txt b/lifecycle/lifecycle-runtime-testing/api/restricted_current.txt
index f7d5eec..2161789 100644
--- a/lifecycle/lifecycle-runtime-testing/api/restricted_current.txt
+++ b/lifecycle/lifecycle-runtime-testing/api/restricted_current.txt
@@ -2,9 +2,8 @@
 package androidx.lifecycle.testing {
 
   public final class TestLifecycleOwner implements androidx.lifecycle.LifecycleOwner {
-    ctor public TestLifecycleOwner(androidx.lifecycle.Lifecycle.State initialState, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
-    ctor public TestLifecycleOwner(androidx.lifecycle.Lifecycle.State initialState);
-    ctor public TestLifecycleOwner();
+    ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
+    ctor public TestLifecycleOwner(optional androidx.lifecycle.Lifecycle.State initialState);
     method public androidx.lifecycle.Lifecycle.State getCurrentState();
     method public androidx.lifecycle.LifecycleRegistry getLifecycle();
     method public int getObserverCount();
diff --git a/loader/loader/api/api_lint.ignore b/loader/loader/api/api_lint.ignore
index 4db086d9..f3e0a93 100644
--- a/loader/loader/api/api_lint.ignore
+++ b/loader/loader/api/api_lint.ignore
@@ -3,6 +3,12 @@
     Class should be named ForceLoadContentCallback
 
 
+NullableCollection: androidx.loader.content.CursorLoader#getProjection():
+    Return type of method androidx.loader.content.CursorLoader.getProjection() is a nullable collection (`java.lang.String[]`); must be non-null
+NullableCollection: androidx.loader.content.CursorLoader#getSelectionArgs():
+    Return type of method androidx.loader.content.CursorLoader.getSelectionArgs() is a nullable collection (`java.lang.String[]`); must be non-null
+
+
 RegistrationName: androidx.loader.content.Loader#registerListener(int, androidx.loader.content.Loader.OnLoadCompleteListener<D>):
     Listener methods should be named add/remove; was registerListener
 RegistrationName: androidx.loader.content.Loader#registerOnLoadCanceledListener(androidx.loader.content.Loader.OnLoadCanceledListener<D>):
@@ -21,16 +27,6 @@
     Callback class names should be singular: LoaderCallbacks
 
 
-UseParcelFileDescriptor: androidx.loader.app.LoaderManager#dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]) parameter #1:
-    Must use ParcelFileDescriptor instead of FileDescriptor in parameter fd in androidx.loader.app.LoaderManager.dump(String prefix, java.io.FileDescriptor fd, java.io.PrintWriter writer, String[] args)
-UseParcelFileDescriptor: androidx.loader.content.AsyncTaskLoader#dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]) parameter #1:
-    Must use ParcelFileDescriptor instead of FileDescriptor in parameter fd in androidx.loader.content.AsyncTaskLoader.dump(String prefix, java.io.FileDescriptor fd, java.io.PrintWriter writer, String[] args)
-UseParcelFileDescriptor: androidx.loader.content.CursorLoader#dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]) parameter #1:
-    Must use ParcelFileDescriptor instead of FileDescriptor in parameter fd in androidx.loader.content.CursorLoader.dump(String prefix, java.io.FileDescriptor fd, java.io.PrintWriter writer, String[] args)
-UseParcelFileDescriptor: androidx.loader.content.Loader#dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]) parameter #1:
-    Must use ParcelFileDescriptor instead of FileDescriptor in parameter fd in androidx.loader.content.Loader.dump(String prefix, java.io.FileDescriptor fd, java.io.PrintWriter writer, String[] args)
-
-
 VisiblySynchronized: androidx.loader.content.CursorLoader#cancelLoadInBackground():
     Internal locks must not be exposed (synchronizing on this or class is still externally observable): method androidx.loader.content.CursorLoader.cancelLoadInBackground()
 VisiblySynchronized: androidx.loader.content.CursorLoader#loadInBackground():
diff --git a/media/media/api/api_lint.ignore b/media/media/api/api_lint.ignore
index 7463740..afc210b 100644
--- a/media/media/api/api_lint.ignore
+++ b/media/media/api/api_lint.ignore
@@ -503,8 +503,6 @@
     Missing nullability on method `setActiveQueueItemId` return
 MissingNullability: android.support.v4.media.session.PlaybackStateCompat.Builder#setBufferedPosition(long):
     Missing nullability on method `setBufferedPosition` return
-MissingNullability: android.support.v4.media.session.PlaybackStateCompat.Builder#setErrorMessage(CharSequence) parameter #0:
-    Missing nullability on parameter `errorMessage` in method `setErrorMessage`
 MissingNullability: android.support.v4.media.session.PlaybackStateCompat.Builder#setErrorMessage(int, CharSequence):
     Missing nullability on method `setErrorMessage` return
 MissingNullability: android.support.v4.media.session.PlaybackStateCompat.Builder#setErrorMessage(int, CharSequence) parameter #1:
@@ -645,6 +643,14 @@
     Bare field volumeType must be marked final, or moved behind accessors if mutable
 
 
+NullableCollection: android.support.v4.media.MediaBrowserCompat#getExtras():
+    Return type of method android.support.v4.media.MediaBrowserCompat.getExtras() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: android.support.v4.media.MediaDescriptionCompat#getExtras():
+    Return type of method android.support.v4.media.MediaDescriptionCompat.getExtras() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: android.support.v4.media.session.PlaybackStateCompat#getExtras():
+    Return type of method android.support.v4.media.session.PlaybackStateCompat.getExtras() is a nullable collection (`android.os.Bundle`); must be non-null
+
+
 ParcelConstructor: android.support.v4.media.session.ParcelableVolumeInfo#ParcelableVolumeInfo(android.os.Parcel):
     Parcelable inflation is exposed through CREATOR, not raw constructors, in android.support.v4.media.session.ParcelableVolumeInfo
 
diff --git a/media/media/api/current.ignore b/media/media/api/current.ignore
deleted file mode 100644
index de0edac..0000000
--- a/media/media/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-ChangedThrows: android.support.v4.media.session.MediaControllerCompat#MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token):
-    Constructor android.support.v4.media.session.MediaControllerCompat no longer throws exception android.os.RemoteException
diff --git a/media/media/api/restricted_current.ignore b/media/media/api/restricted_current.ignore
deleted file mode 100644
index 5779f4b..0000000
--- a/media/media/api/restricted_current.ignore
+++ /dev/null
@@ -1,73 +0,0 @@
-// Baseline format: 1.0
-ChangedThrows: android.support.v4.media.session.MediaControllerCompat#MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token):
-    Constructor android.support.v4.media.session.MediaControllerCompat no longer throws exception android.os.RemoteException
-
-
-RemovedClass: android.support.v4.media.MediaBrowserCompat.MediaItem.Flags:
-    Removed class android.support.v4.media.MediaBrowserCompat.MediaItem.Flags
-RemovedClass: android.support.v4.media.MediaMetadataCompat.BitmapKey:
-    Removed class android.support.v4.media.MediaMetadataCompat.BitmapKey
-RemovedClass: android.support.v4.media.MediaMetadataCompat.LongKey:
-    Removed class android.support.v4.media.MediaMetadataCompat.LongKey
-RemovedClass: android.support.v4.media.MediaMetadataCompat.RatingKey:
-    Removed class android.support.v4.media.MediaMetadataCompat.RatingKey
-RemovedClass: android.support.v4.media.MediaMetadataCompat.TextKey:
-    Removed class android.support.v4.media.MediaMetadataCompat.TextKey
-RemovedClass: android.support.v4.media.RatingCompat.StarStyle:
-    Removed class android.support.v4.media.RatingCompat.StarStyle
-RemovedClass: android.support.v4.media.session.MediaSessionCompat.SessionFlags:
-    Removed class android.support.v4.media.session.MediaSessionCompat.SessionFlags
-RemovedClass: android.support.v4.media.session.PlaybackStateCompat.ErrorCode:
-    Removed class android.support.v4.media.session.PlaybackStateCompat.ErrorCode
-RemovedClass: android.support.v4.media.session.PlaybackStateCompat.MediaKeyAction:
-    Removed class android.support.v4.media.session.PlaybackStateCompat.MediaKeyAction
-RemovedClass: androidx.media.AudioAttributesCompat.AttributeContentType:
-    Removed class androidx.media.AudioAttributesCompat.AttributeContentType
-RemovedClass: androidx.media.AudioAttributesCompat.AttributeUsage:
-    Removed class androidx.media.AudioAttributesCompat.AttributeUsage
-RemovedClass: androidx.media.AudioAttributesImplApi21:
-    Removed class androidx.media.AudioAttributesImplApi21
-RemovedClass: androidx.media.AudioAttributesImplApi26:
-    Removed class androidx.media.AudioAttributesImplApi26
-RemovedClass: androidx.media.AudioAttributesImplBase:
-    Removed class androidx.media.AudioAttributesImplBase
-RemovedClass: androidx.media.AudioFocusRequestCompat.FocusGainType:
-    Removed class androidx.media.AudioFocusRequestCompat.FocusGainType
-RemovedClass: androidx.media.MediaBrowserCompatUtils:
-    Removed class androidx.media.MediaBrowserCompatUtils
-
-
-RemovedField: android.support.v4.media.MediaDescriptionCompat#DESCRIPTION_KEY_MEDIA_URI:
-    Removed field android.support.v4.media.MediaDescriptionCompat.DESCRIPTION_KEY_MEDIA_URI
-RemovedField: android.support.v4.media.MediaDescriptionCompat#DESCRIPTION_KEY_NULL_BUNDLE_FLAG:
-    Removed field android.support.v4.media.MediaDescriptionCompat.DESCRIPTION_KEY_NULL_BUNDLE_FLAG
-RemovedField: android.support.v4.media.session.MediaSessionCompat#KEY_SESSION2_TOKEN:
-    Removed field android.support.v4.media.session.MediaSessionCompat.KEY_SESSION2_TOKEN
-RemovedField: android.support.v4.media.session.MediaSessionCompat#KEY_TOKEN:
-    Removed field android.support.v4.media.session.MediaSessionCompat.KEY_TOKEN
-RemovedField: androidx.media.AudioAttributesCompat#mImpl:
-    Removed field androidx.media.AudioAttributesCompat.mImpl
-
-
-RemovedMethod: android.support.v4.media.MediaMetadataCompat.Builder#Builder(android.support.v4.media.MediaMetadataCompat, int):
-    Removed constructor android.support.v4.media.MediaMetadataCompat.Builder(android.support.v4.media.MediaMetadataCompat,int)
-RemovedMethod: android.support.v4.media.session.MediaControllerCompat#getSession2Token():
-    Removed method android.support.v4.media.session.MediaControllerCompat.getSession2Token()
-RemovedMethod: android.support.v4.media.session.MediaSessionCompat#ensureClassLoader(android.os.Bundle):
-    Removed method android.support.v4.media.session.MediaSessionCompat.ensureClassLoader(android.os.Bundle)
-RemovedMethod: android.support.v4.media.session.MediaSessionCompat#getCallingPackage():
-    Removed method android.support.v4.media.session.MediaSessionCompat.getCallingPackage()
-RemovedMethod: android.support.v4.media.session.MediaSessionCompat.Token#fromToken(Object, android.support.v4.media.session.IMediaSession):
-    Removed method android.support.v4.media.session.MediaSessionCompat.Token.fromToken(Object,android.support.v4.media.session.IMediaSession)
-RemovedMethod: android.support.v4.media.session.MediaSessionCompat.Token#getExtraBinder():
-    Removed method android.support.v4.media.session.MediaSessionCompat.Token.getExtraBinder()
-RemovedMethod: android.support.v4.media.session.MediaSessionCompat.Token#setExtraBinder(android.support.v4.media.session.IMediaSession):
-    Removed method android.support.v4.media.session.MediaSessionCompat.Token.setExtraBinder(android.support.v4.media.session.IMediaSession)
-RemovedMethod: androidx.media.AudioAttributesCompat#setForceLegacyBehavior(boolean):
-    Removed method androidx.media.AudioAttributesCompat.setForceLegacyBehavior(boolean)
-RemovedMethod: androidx.media.MediaBrowserServiceCompat#onSubscribe(String, android.os.Bundle):
-    Removed method androidx.media.MediaBrowserServiceCompat.onSubscribe(String,android.os.Bundle)
-RemovedMethod: androidx.media.MediaBrowserServiceCompat#onUnsubscribe(String):
-    Removed method androidx.media.MediaBrowserServiceCompat.onUnsubscribe(String)
-RemovedMethod: androidx.media.MediaSessionManager.RemoteUserInfo#RemoteUserInfo(android.media.session.MediaSessionManager.RemoteUserInfo):
-    Removed constructor androidx.media.MediaSessionManager.RemoteUserInfo(android.media.session.MediaSessionManager.RemoteUserInfo)
diff --git a/media2/media2-common/api/api_lint.ignore b/media2/media2-common/api/api_lint.ignore
index 8d6bc95..072b6d9f 100644
--- a/media2/media2-common/api/api_lint.ignore
+++ b/media2/media2-common/api/api_lint.ignore
@@ -27,5 +27,17 @@
     Intent extra constant name must be EXTRA_FOO: METADATA_KEY_EXTRAS
 
 
+NullableCollection: androidx.media2.common.MediaMetadata#getExtras():
+    Return type of method androidx.media2.common.MediaMetadata.getExtras() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.media2.common.SessionPlayer#getPlaylist():
+    Return type of method androidx.media2.common.SessionPlayer.getPlaylist() is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.media2.common.SessionPlayer.PlayerCallback#onPlaylistChanged(androidx.media2.common.SessionPlayer, java.util.List<androidx.media2.common.MediaItem>, androidx.media2.common.MediaMetadata) parameter #1:
+    Type of parameter list in androidx.media2.common.SessionPlayer.PlayerCallback.onPlaylistChanged(androidx.media2.common.SessionPlayer player, java.util.List<androidx.media2.common.MediaItem> list, androidx.media2.common.MediaMetadata metadata) is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.media2.common.UriMediaItem#getUriCookies():
+    Return type of method androidx.media2.common.UriMediaItem.getUriCookies() is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.media2.common.UriMediaItem#getUriHeaders():
+    Return type of method androidx.media2.common.UriMediaItem.getUriHeaders() is a nullable collection (`java.util.Map`); must be non-null
+
+
 StaticFinalBuilder: androidx.media2.common.MediaItem.Builder:
     Builder must be final: androidx.media2.common.MediaItem.Builder
diff --git a/media2/media2-common/api/current.ignore b/media2/media2-common/api/current.ignore
deleted file mode 100644
index 1f84da4..0000000
--- a/media2/media2-common/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedInterface: androidx.media2.common.SessionPlayer:
-    Class androidx.media2.common.SessionPlayer no longer implements java.lang.AutoCloseable
diff --git a/media2/media2-common/api/restricted_current.ignore b/media2/media2-common/api/restricted_current.ignore
deleted file mode 100644
index 75bbed1..0000000
--- a/media2/media2-common/api/restricted_current.ignore
+++ /dev/null
@@ -1,43 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.media2.common.MediaMetadata.BitmapKey:
-    Removed class androidx.media2.common.MediaMetadata.BitmapKey
-RemovedClass: androidx.media2.common.MediaMetadata.BundleKey:
-    Removed class androidx.media2.common.MediaMetadata.BundleKey
-RemovedClass: androidx.media2.common.MediaMetadata.FloatKey:
-    Removed class androidx.media2.common.MediaMetadata.FloatKey
-RemovedClass: androidx.media2.common.MediaMetadata.LongKey:
-    Removed class androidx.media2.common.MediaMetadata.LongKey
-RemovedClass: androidx.media2.common.MediaMetadata.RatingKey:
-    Removed class androidx.media2.common.MediaMetadata.RatingKey
-RemovedClass: androidx.media2.common.MediaMetadata.TextKey:
-    Removed class androidx.media2.common.MediaMetadata.TextKey
-RemovedClass: androidx.media2.common.ParcelImplListSlice:
-    Removed class androidx.media2.common.ParcelImplListSlice
-RemovedClass: androidx.media2.common.SessionPlayer.BuffState:
-    Removed class androidx.media2.common.SessionPlayer.BuffState
-RemovedClass: androidx.media2.common.SessionPlayer.PlayerResult.ResultCode:
-    Removed class androidx.media2.common.SessionPlayer.PlayerResult.ResultCode
-RemovedClass: androidx.media2.common.SessionPlayer.PlayerState:
-    Removed class androidx.media2.common.SessionPlayer.PlayerState
-RemovedClass: androidx.media2.common.SessionPlayer.RepeatMode:
-    Removed class androidx.media2.common.SessionPlayer.RepeatMode
-RemovedClass: androidx.media2.common.SessionPlayer.ShuffleMode:
-    Removed class androidx.media2.common.SessionPlayer.ShuffleMode
-
-
-RemovedField: androidx.media2.common.MediaMetadata#METADATA_KEY_RADIO_FREQUENCY:
-    Removed field androidx.media2.common.MediaMetadata.METADATA_KEY_RADIO_FREQUENCY
-RemovedField: androidx.media2.common.MediaMetadata#METADATA_KEY_RADIO_PROGRAM_NAME:
-    Removed field androidx.media2.common.MediaMetadata.METADATA_KEY_RADIO_PROGRAM_NAME
-
-
-RemovedInterface: androidx.media2.common.SessionPlayer:
-    Class androidx.media2.common.SessionPlayer no longer implements java.lang.AutoCloseable
-
-
-RemovedMethod: androidx.media2.common.FileMediaItem#decreaseRefCount():
-    Removed method androidx.media2.common.FileMediaItem.decreaseRefCount()
-RemovedMethod: androidx.media2.common.FileMediaItem#increaseRefCount():
-    Removed method androidx.media2.common.FileMediaItem.increaseRefCount()
-RemovedMethod: androidx.media2.common.MediaMetadata#getObject(String):
-    Removed method androidx.media2.common.MediaMetadata.getObject(String)
diff --git a/media2/media2-player/api/current.ignore b/media2/media2-player/api/current.ignore
deleted file mode 100644
index 620d549..0000000
--- a/media2/media2-player/api/current.ignore
+++ /dev/null
@@ -1,27 +0,0 @@
-// Baseline format: 1.0
-RemovedField: androidx.media2.player.MediaPlayer.TrackInfo#MEDIA_TRACK_TYPE_AUDIO:
-    Removed field androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_AUDIO
-RemovedField: androidx.media2.player.MediaPlayer.TrackInfo#MEDIA_TRACK_TYPE_METADATA:
-    Removed field androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_METADATA
-RemovedField: androidx.media2.player.MediaPlayer.TrackInfo#MEDIA_TRACK_TYPE_SUBTITLE:
-    Removed field androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_SUBTITLE
-RemovedField: androidx.media2.player.MediaPlayer.TrackInfo#MEDIA_TRACK_TYPE_UNKNOWN:
-    Removed field androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_UNKNOWN
-RemovedField: androidx.media2.player.MediaPlayer.TrackInfo#MEDIA_TRACK_TYPE_VIDEO:
-    Removed field androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_VIDEO
-
-
-RemovedMethod: androidx.media2.player.MediaPlayer#close():
-    Removed method androidx.media2.player.MediaPlayer.close()
-RemovedMethod: androidx.media2.player.MediaPlayer#setSurface(android.view.Surface):
-    Removed method androidx.media2.player.MediaPlayer.setSurface(android.view.Surface)
-RemovedMethod: androidx.media2.player.MediaPlayer.TrackInfo#getFormat():
-    Removed method androidx.media2.player.MediaPlayer.TrackInfo.getFormat()
-RemovedMethod: androidx.media2.player.MediaPlayer.TrackInfo#getLanguage():
-    Removed method androidx.media2.player.MediaPlayer.TrackInfo.getLanguage()
-RemovedMethod: androidx.media2.player.MediaPlayer.TrackInfo#getTrackType():
-    Removed method androidx.media2.player.MediaPlayer.TrackInfo.getTrackType()
-RemovedMethod: androidx.media2.player.VideoSize#getHeight():
-    Removed method androidx.media2.player.VideoSize.getHeight()
-RemovedMethod: androidx.media2.player.VideoSize#getWidth():
-    Removed method androidx.media2.player.VideoSize.getWidth()
diff --git a/media2/media2-player/api/restricted_current.ignore b/media2/media2-player/api/restricted_current.ignore
deleted file mode 100644
index 35ef1f7..0000000
--- a/media2/media2-player/api/restricted_current.ignore
+++ /dev/null
@@ -1,121 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.media2.player.MediaPlayer.DrmInfo:
-    Removed class androidx.media2.player.MediaPlayer.DrmInfo
-RemovedClass: androidx.media2.player.MediaPlayer.DrmResult:
-    Removed class androidx.media2.player.MediaPlayer.DrmResult
-RemovedClass: androidx.media2.player.MediaPlayer.MediaError:
-    Removed class androidx.media2.player.MediaPlayer.MediaError
-RemovedClass: androidx.media2.player.MediaPlayer.MediaInfo:
-    Removed class androidx.media2.player.MediaPlayer.MediaInfo
-RemovedClass: androidx.media2.player.MediaPlayer.MetricsConstants:
-    Removed class androidx.media2.player.MediaPlayer.MetricsConstants
-RemovedClass: androidx.media2.player.MediaPlayer.NoDrmSchemeException:
-    Removed class androidx.media2.player.MediaPlayer.NoDrmSchemeException
-RemovedClass: androidx.media2.player.MediaPlayer.SeekMode:
-    Removed class androidx.media2.player.MediaPlayer.SeekMode
-RemovedClass: androidx.media2.player.MediaPlayer.TrackInfo.MediaTrackType:
-    Removed class androidx.media2.player.MediaPlayer.TrackInfo.MediaTrackType
-RemovedClass: androidx.media2.player.MediaPlayer2:
-    Removed class androidx.media2.player.MediaPlayer2
-RemovedClass: androidx.media2.player.MediaPlayer2Impl:
-    Removed class androidx.media2.player.MediaPlayer2Impl
-RemovedClass: androidx.media2.player.PlaybackParams.AudioFallbackMode:
-    Removed class androidx.media2.player.PlaybackParams.AudioFallbackMode
-
-
-RemovedField: androidx.media2.player.MediaPlayer#MEDIA_INFO_BUFFERING_END:
-    Removed field androidx.media2.player.MediaPlayer.MEDIA_INFO_BUFFERING_END
-RemovedField: androidx.media2.player.MediaPlayer#MEDIA_INFO_BUFFERING_START:
-    Removed field androidx.media2.player.MediaPlayer.MEDIA_INFO_BUFFERING_START
-RemovedField: androidx.media2.player.MediaPlayer#MEDIA_INFO_EXTERNAL_METADATA_UPDATE:
-    Removed field androidx.media2.player.MediaPlayer.MEDIA_INFO_EXTERNAL_METADATA_UPDATE
-RemovedField: androidx.media2.player.MediaPlayer#MEDIA_INFO_MEDIA_ITEM_END:
-    Removed field androidx.media2.player.MediaPlayer.MEDIA_INFO_MEDIA_ITEM_END
-RemovedField: androidx.media2.player.MediaPlayer#MEDIA_INFO_MEDIA_ITEM_LIST_END:
-    Removed field androidx.media2.player.MediaPlayer.MEDIA_INFO_MEDIA_ITEM_LIST_END
-RemovedField: androidx.media2.player.MediaPlayer#MEDIA_INFO_MEDIA_ITEM_REPEAT:
-    Removed field androidx.media2.player.MediaPlayer.MEDIA_INFO_MEDIA_ITEM_REPEAT
-RemovedField: androidx.media2.player.MediaPlayer#MEDIA_INFO_MEDIA_ITEM_START:
-    Removed field androidx.media2.player.MediaPlayer.MEDIA_INFO_MEDIA_ITEM_START
-RemovedField: androidx.media2.player.MediaPlayer#MEDIA_INFO_NETWORK_BANDWIDTH:
-    Removed field androidx.media2.player.MediaPlayer.MEDIA_INFO_NETWORK_BANDWIDTH
-RemovedField: androidx.media2.player.MediaPlayer#MEDIA_INFO_PREPARED:
-    Removed field androidx.media2.player.MediaPlayer.MEDIA_INFO_PREPARED
-RemovedField: androidx.media2.player.MediaPlayer#MEDIA_INFO_SUBTITLE_TIMED_OUT:
-    Removed field androidx.media2.player.MediaPlayer.MEDIA_INFO_SUBTITLE_TIMED_OUT
-RemovedField: androidx.media2.player.MediaPlayer#MEDIA_INFO_UNSUPPORTED_SUBTITLE:
-    Removed field androidx.media2.player.MediaPlayer.MEDIA_INFO_UNSUPPORTED_SUBTITLE
-RemovedField: androidx.media2.player.MediaPlayer.TrackInfo#MEDIA_TRACK_TYPE_AUDIO:
-    Removed field androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_AUDIO
-RemovedField: androidx.media2.player.MediaPlayer.TrackInfo#MEDIA_TRACK_TYPE_METADATA:
-    Removed field androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_METADATA
-RemovedField: androidx.media2.player.MediaPlayer.TrackInfo#MEDIA_TRACK_TYPE_SUBTITLE:
-    Removed field androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_SUBTITLE
-RemovedField: androidx.media2.player.MediaPlayer.TrackInfo#MEDIA_TRACK_TYPE_UNKNOWN:
-    Removed field androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_UNKNOWN
-RemovedField: androidx.media2.player.MediaPlayer.TrackInfo#MEDIA_TRACK_TYPE_VIDEO:
-    Removed field androidx.media2.player.MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_VIDEO
-
-
-RemovedInterface: androidx.media2.player.MediaPlayer.OnDrmConfigHelper:
-    Removed class androidx.media2.player.MediaPlayer.OnDrmConfigHelper
-
-
-RemovedMethod: androidx.media2.player.MediaPlayer#close():
-    Removed method androidx.media2.player.MediaPlayer.close()
-RemovedMethod: androidx.media2.player.MediaPlayer#deselectTrack(androidx.media2.player.MediaPlayer.TrackInfo):
-    Removed method androidx.media2.player.MediaPlayer.deselectTrack(androidx.media2.player.MediaPlayer.TrackInfo)
-RemovedMethod: androidx.media2.player.MediaPlayer#getDrmInfo():
-    Removed method androidx.media2.player.MediaPlayer.getDrmInfo()
-RemovedMethod: androidx.media2.player.MediaPlayer#getDrmKeyRequest(byte[], byte[], String, int, java.util.Map<java.lang.String,java.lang.String>):
-    Removed method androidx.media2.player.MediaPlayer.getDrmKeyRequest(byte[],byte[],String,int,java.util.Map<java.lang.String,java.lang.String>)
-RemovedMethod: androidx.media2.player.MediaPlayer#getDrmPropertyString(String):
-    Removed method androidx.media2.player.MediaPlayer.getDrmPropertyString(String)
-RemovedMethod: androidx.media2.player.MediaPlayer#getMetrics():
-    Removed method androidx.media2.player.MediaPlayer.getMetrics()
-RemovedMethod: androidx.media2.player.MediaPlayer#prepareDrm(java.util.UUID):
-    Removed method androidx.media2.player.MediaPlayer.prepareDrm(java.util.UUID)
-RemovedMethod: androidx.media2.player.MediaPlayer#provideDrmKeyResponse(byte[], byte[]):
-    Removed method androidx.media2.player.MediaPlayer.provideDrmKeyResponse(byte[],byte[])
-RemovedMethod: androidx.media2.player.MediaPlayer#releaseDrm():
-    Removed method androidx.media2.player.MediaPlayer.releaseDrm()
-RemovedMethod: androidx.media2.player.MediaPlayer#restoreDrmKeys(byte[]):
-    Removed method androidx.media2.player.MediaPlayer.restoreDrmKeys(byte[])
-RemovedMethod: androidx.media2.player.MediaPlayer#setDrmPropertyString(String, String):
-    Removed method androidx.media2.player.MediaPlayer.setDrmPropertyString(String,String)
-RemovedMethod: androidx.media2.player.MediaPlayer#setOnDrmConfigHelper(androidx.media2.player.MediaPlayer.OnDrmConfigHelper):
-    Removed method androidx.media2.player.MediaPlayer.setOnDrmConfigHelper(androidx.media2.player.MediaPlayer.OnDrmConfigHelper)
-RemovedMethod: androidx.media2.player.MediaPlayer#setSurface(android.view.Surface):
-    Removed method androidx.media2.player.MediaPlayer.setSurface(android.view.Surface)
-RemovedMethod: androidx.media2.player.MediaPlayer.PlayerCallback#onDrmInfo(androidx.media2.player.MediaPlayer, androidx.media2.common.MediaItem, androidx.media2.player.MediaPlayer.DrmInfo):
-    Removed method androidx.media2.player.MediaPlayer.PlayerCallback.onDrmInfo(androidx.media2.player.MediaPlayer,androidx.media2.common.MediaItem,androidx.media2.player.MediaPlayer.DrmInfo)
-RemovedMethod: androidx.media2.player.MediaPlayer.TrackInfo#TrackInfo(int, androidx.media2.common.MediaItem, int, android.media.MediaFormat):
-    Removed constructor androidx.media2.player.MediaPlayer.TrackInfo(int,androidx.media2.common.MediaItem,int,android.media.MediaFormat)
-RemovedMethod: androidx.media2.player.MediaPlayer.TrackInfo#getFormat():
-    Removed method androidx.media2.player.MediaPlayer.TrackInfo.getFormat()
-RemovedMethod: androidx.media2.player.MediaPlayer.TrackInfo#getLanguage():
-    Removed method androidx.media2.player.MediaPlayer.TrackInfo.getLanguage()
-RemovedMethod: androidx.media2.player.MediaPlayer.TrackInfo#getTrackType():
-    Removed method androidx.media2.player.MediaPlayer.TrackInfo.getTrackType()
-RemovedMethod: androidx.media2.player.MediaTimestamp#MediaTimestamp(long, long, float):
-    Removed constructor androidx.media2.player.MediaTimestamp(long,long,float)
-RemovedMethod: androidx.media2.player.PlaybackParams#getPlaybackParams():
-    Removed method androidx.media2.player.PlaybackParams.getPlaybackParams()
-RemovedMethod: androidx.media2.player.PlaybackParams.Builder#Builder(android.media.PlaybackParams):
-    Removed constructor androidx.media2.player.PlaybackParams.Builder(android.media.PlaybackParams)
-RemovedMethod: androidx.media2.player.TimedMetaData#TimedMetaData(android.media.TimedMetaData):
-    Removed constructor androidx.media2.player.TimedMetaData(android.media.TimedMetaData)
-RemovedMethod: androidx.media2.player.TimedMetaData#TimedMetaData(long, byte[]):
-    Removed constructor androidx.media2.player.TimedMetaData(long,byte[])
-RemovedMethod: androidx.media2.player.VideoSize#getHeight():
-    Removed method androidx.media2.player.VideoSize.getHeight()
-RemovedMethod: androidx.media2.player.VideoSize#getWidth():
-    Removed method androidx.media2.player.VideoSize.getWidth()
-
-
-RemovedPackage: androidx.media2.player.common:
-    Removed package androidx.media2.player.common
-RemovedPackage: androidx.media2.player.exoplayer:
-    Removed package androidx.media2.player.exoplayer
-RemovedPackage: androidx.media2.player.subtitle:
-    Removed package androidx.media2.player.subtitle
diff --git a/media2/media2-session/api/api_lint.ignore b/media2/media2-session/api/api_lint.ignore
index 1f9b7db..1a746d2 100644
--- a/media2/media2-session/api/api_lint.ignore
+++ b/media2/media2-session/api/api_lint.ignore
@@ -45,3 +45,25 @@
     Missing nullability on method `onBind` return
 MissingNullability: androidx.media2.session.MediaSessionService#onStartCommand(android.content.Intent, int, int) parameter #0:
     Missing nullability on parameter `intent` in method `onStartCommand`
+
+
+NullableCollection: androidx.media2.session.LibraryResult#getMediaItems():
+    Return type of method androidx.media2.session.LibraryResult.getMediaItems() is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.media2.session.MediaController#getPlaylist():
+    Return type of method androidx.media2.session.MediaController.getPlaylist() is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.media2.session.MediaController.ControllerCallback#onCustomCommand(androidx.media2.session.MediaController, androidx.media2.session.SessionCommand, android.os.Bundle) parameter #2:
+    Type of parameter args in androidx.media2.session.MediaController.ControllerCallback.onCustomCommand(androidx.media2.session.MediaController controller, androidx.media2.session.SessionCommand command, android.os.Bundle args) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.media2.session.MediaController.ControllerCallback#onPlaylistChanged(androidx.media2.session.MediaController, java.util.List<androidx.media2.common.MediaItem>, androidx.media2.common.MediaMetadata) parameter #1:
+    Type of parameter list in androidx.media2.session.MediaController.ControllerCallback.onPlaylistChanged(androidx.media2.session.MediaController controller, java.util.List<androidx.media2.common.MediaItem> list, androidx.media2.common.MediaMetadata metadata) is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.media2.session.MediaLibraryService.LibraryParams#getExtras():
+    Return type of method androidx.media2.session.MediaLibraryService.LibraryParams.getExtras() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.media2.session.MediaSession.CommandButton#getExtras():
+    Return type of method androidx.media2.session.MediaSession.CommandButton.getExtras() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.media2.session.MediaSession.SessionCallback#onCustomCommand(androidx.media2.session.MediaSession, androidx.media2.session.MediaSession.ControllerInfo, androidx.media2.session.SessionCommand, android.os.Bundle) parameter #3:
+    Type of parameter args in androidx.media2.session.MediaSession.SessionCallback.onCustomCommand(androidx.media2.session.MediaSession session, androidx.media2.session.MediaSession.ControllerInfo controller, androidx.media2.session.SessionCommand customCommand, android.os.Bundle args) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.media2.session.MediaSession.SessionCallback#onSetMediaUri(androidx.media2.session.MediaSession, androidx.media2.session.MediaSession.ControllerInfo, android.net.Uri, android.os.Bundle) parameter #3:
+    Type of parameter extras in androidx.media2.session.MediaSession.SessionCallback.onSetMediaUri(androidx.media2.session.MediaSession session, androidx.media2.session.MediaSession.ControllerInfo controller, android.net.Uri uri, android.os.Bundle extras) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.media2.session.SessionCommand#getCustomExtras():
+    Return type of method androidx.media2.session.SessionCommand.getCustomExtras() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.media2.session.SessionResult#getCustomCommandResult():
+    Return type of method androidx.media2.session.SessionResult.getCustomCommandResult() is a nullable collection (`android.os.Bundle`); must be non-null
diff --git a/media2/media2-session/api/current.ignore b/media2/media2-session/api/current.ignore
deleted file mode 100644
index a09adab..0000000
--- a/media2/media2-session/api/current.ignore
+++ /dev/null
@@ -1,5 +0,0 @@
-// Baseline format: 1.0
-RemovedInterface: androidx.media2.session.MediaController:
-    Class androidx.media2.session.MediaController no longer implements java.lang.AutoCloseable
-RemovedInterface: androidx.media2.session.MediaSession:
-    Class androidx.media2.session.MediaSession no longer implements java.lang.AutoCloseable
diff --git a/media2/media2-session/api/restricted_current.ignore b/media2/media2-session/api/restricted_current.ignore
deleted file mode 100644
index e9db2bf..0000000
--- a/media2/media2-session/api/restricted_current.ignore
+++ /dev/null
@@ -1,87 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.media2.session.LibraryResult.ResultCode:
-    Removed class androidx.media2.session.LibraryResult.ResultCode
-RemovedClass: androidx.media2.session.MediaController.VolumeDirection:
-    Removed class androidx.media2.session.MediaController.VolumeDirection
-RemovedClass: androidx.media2.session.MediaController.VolumeFlags:
-    Removed class androidx.media2.session.MediaController.VolumeFlags
-RemovedClass: androidx.media2.session.RemoteSessionPlayer.VolumeControlType:
-    Removed class androidx.media2.session.RemoteSessionPlayer.VolumeControlType
-RemovedClass: androidx.media2.session.SessionCommand.CommandCode:
-    Removed class androidx.media2.session.SessionCommand.CommandCode
-RemovedClass: androidx.media2.session.SessionCommand.CommandVersion:
-    Removed class androidx.media2.session.SessionCommand.CommandVersion
-RemovedClass: androidx.media2.session.SessionResult.ResultCode:
-    Removed class androidx.media2.session.SessionResult.ResultCode
-RemovedClass: androidx.media2.session.SessionToken.TokenType:
-    Removed class androidx.media2.session.SessionToken.TokenType
-
-
-RemovedField: androidx.media2.session.SessionCommand#COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID:
-    Removed field androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_MEDIA_ID
-RemovedField: androidx.media2.session.SessionCommand#COMMAND_CODE_SESSION_PLAY_FROM_SEARCH:
-    Removed field androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_SEARCH
-RemovedField: androidx.media2.session.SessionCommand#COMMAND_CODE_SESSION_PLAY_FROM_URI:
-    Removed field androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PLAY_FROM_URI
-RemovedField: androidx.media2.session.SessionCommand#COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID:
-    Removed field androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_MEDIA_ID
-RemovedField: androidx.media2.session.SessionCommand#COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH:
-    Removed field androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_SEARCH
-RemovedField: androidx.media2.session.SessionCommand#COMMAND_CODE_SESSION_PREPARE_FROM_URI:
-    Removed field androidx.media2.session.SessionCommand.COMMAND_CODE_SESSION_PREPARE_FROM_URI
-RemovedField: androidx.media2.session.SessionCommand#COMMAND_VERSION_CURRENT:
-    Removed field androidx.media2.session.SessionCommand.COMMAND_VERSION_CURRENT
-
-
-RemovedInterface: androidx.media2.session.MediaController:
-    Class androidx.media2.session.MediaController no longer implements java.lang.AutoCloseable
-RemovedInterface: androidx.media2.session.MediaSession:
-    Class androidx.media2.session.MediaSession no longer implements java.lang.AutoCloseable
-RemovedInterface: androidx.media2.session.SessionResult:
-    Class androidx.media2.session.SessionResult no longer implements androidx.versionedparcelable.VersionedParcelable
-RemovedInterface: androidx.media2.session.SessionToken.OnSessionTokenCreatedListener:
-    Removed class androidx.media2.session.SessionToken.OnSessionTokenCreatedListener
-
-
-RemovedMethod: androidx.media2.session.MediaController#playFromMediaId(String, android.os.Bundle):
-    Removed method androidx.media2.session.MediaController.playFromMediaId(String,android.os.Bundle)
-RemovedMethod: androidx.media2.session.MediaController#playFromSearch(String, android.os.Bundle):
-    Removed method androidx.media2.session.MediaController.playFromSearch(String,android.os.Bundle)
-RemovedMethod: androidx.media2.session.MediaController#playFromUri(android.net.Uri, android.os.Bundle):
-    Removed method androidx.media2.session.MediaController.playFromUri(android.net.Uri,android.os.Bundle)
-RemovedMethod: androidx.media2.session.MediaController#prepareFromMediaId(String, android.os.Bundle):
-    Removed method androidx.media2.session.MediaController.prepareFromMediaId(String,android.os.Bundle)
-RemovedMethod: androidx.media2.session.MediaController#prepareFromSearch(String, android.os.Bundle):
-    Removed method androidx.media2.session.MediaController.prepareFromSearch(String,android.os.Bundle)
-RemovedMethod: androidx.media2.session.MediaController#prepareFromUri(android.net.Uri, android.os.Bundle):
-    Removed method androidx.media2.session.MediaController.prepareFromUri(android.net.Uri,android.os.Bundle)
-RemovedMethod: androidx.media2.session.MediaController#setTimeDiff(Long):
-    Removed method androidx.media2.session.MediaController.setTimeDiff(Long)
-RemovedMethod: androidx.media2.session.MediaSession#getSessionCompat():
-    Removed method androidx.media2.session.MediaSession.getSessionCompat()
-RemovedMethod: androidx.media2.session.MediaSession#isClosed():
-    Removed method androidx.media2.session.MediaSession.isClosed()
-RemovedMethod: androidx.media2.session.MediaSession.ControllerInfo#getRemoteUserInfo():
-    Removed method androidx.media2.session.MediaSession.ControllerInfo.getRemoteUserInfo()
-RemovedMethod: androidx.media2.session.MediaSession.ControllerInfo#isTrusted():
-    Removed method androidx.media2.session.MediaSession.ControllerInfo.isTrusted()
-RemovedMethod: androidx.media2.session.MediaSession.SessionCallback#onPlayFromMediaId(androidx.media2.session.MediaSession, androidx.media2.session.MediaSession.ControllerInfo, String, android.os.Bundle):
-    Removed method androidx.media2.session.MediaSession.SessionCallback.onPlayFromMediaId(androidx.media2.session.MediaSession,androidx.media2.session.MediaSession.ControllerInfo,String,android.os.Bundle)
-RemovedMethod: androidx.media2.session.MediaSession.SessionCallback#onPlayFromSearch(androidx.media2.session.MediaSession, androidx.media2.session.MediaSession.ControllerInfo, String, android.os.Bundle):
-    Removed method androidx.media2.session.MediaSession.SessionCallback.onPlayFromSearch(androidx.media2.session.MediaSession,androidx.media2.session.MediaSession.ControllerInfo,String,android.os.Bundle)
-RemovedMethod: androidx.media2.session.MediaSession.SessionCallback#onPlayFromUri(androidx.media2.session.MediaSession, androidx.media2.session.MediaSession.ControllerInfo, android.net.Uri, android.os.Bundle):
-    Removed method androidx.media2.session.MediaSession.SessionCallback.onPlayFromUri(androidx.media2.session.MediaSession,androidx.media2.session.MediaSession.ControllerInfo,android.net.Uri,android.os.Bundle)
-RemovedMethod: androidx.media2.session.MediaSession.SessionCallback#onPrepareFromMediaId(androidx.media2.session.MediaSession, androidx.media2.session.MediaSession.ControllerInfo, String, android.os.Bundle):
-    Removed method androidx.media2.session.MediaSession.SessionCallback.onPrepareFromMediaId(androidx.media2.session.MediaSession,androidx.media2.session.MediaSession.ControllerInfo,String,android.os.Bundle)
-RemovedMethod: androidx.media2.session.MediaSession.SessionCallback#onPrepareFromSearch(androidx.media2.session.MediaSession, androidx.media2.session.MediaSession.ControllerInfo, String, android.os.Bundle):
-    Removed method androidx.media2.session.MediaSession.SessionCallback.onPrepareFromSearch(androidx.media2.session.MediaSession,androidx.media2.session.MediaSession.ControllerInfo,String,android.os.Bundle)
-RemovedMethod: androidx.media2.session.MediaSession.SessionCallback#onPrepareFromUri(androidx.media2.session.MediaSession, androidx.media2.session.MediaSession.ControllerInfo, android.net.Uri, android.os.Bundle):
-    Removed method androidx.media2.session.MediaSession.SessionCallback.onPrepareFromUri(androidx.media2.session.MediaSession,androidx.media2.session.MediaSession.ControllerInfo,android.net.Uri,android.os.Bundle)
-RemovedMethod: androidx.media2.session.SessionToken#createSessionToken(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token, java.util.concurrent.Executor, androidx.media2.session.SessionToken.OnSessionTokenCreatedListener):
-    Removed method androidx.media2.session.SessionToken.createSessionToken(android.content.Context,android.support.v4.media.session.MediaSessionCompat.Token,java.util.concurrent.Executor,androidx.media2.session.SessionToken.OnSessionTokenCreatedListener)
-RemovedMethod: androidx.media2.session.SessionToken#getBinder():
-    Removed method androidx.media2.session.SessionToken.getBinder()
-RemovedMethod: androidx.media2.session.SessionToken#getComponentName():
-    Removed method androidx.media2.session.SessionToken.getComponentName()
-RemovedMethod: androidx.media2.session.SessionToken#isLegacySession():
-    Removed method androidx.media2.session.SessionToken.isLegacySession()
diff --git a/mediarouter/mediarouter/api/api_lint.ignore b/mediarouter/mediarouter/api/api_lint.ignore
index 9db8fc8..4be53a4 100644
--- a/mediarouter/mediarouter/api/api_lint.ignore
+++ b/mediarouter/mediarouter/api/api_lint.ignore
@@ -117,6 +117,28 @@
     Missing nullability on field `EMPTY` in class `class androidx.mediarouter.media.MediaRouteSelector`
 
 
+NullableCollection: androidx.mediarouter.media.MediaItemStatus#getExtras():
+    Return type of method androidx.mediarouter.media.MediaItemStatus.getExtras() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.mediarouter.media.MediaRouteDescriptor#getExtras():
+    Return type of method androidx.mediarouter.media.MediaRouteDescriptor.getExtras() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.mediarouter.media.MediaRouter.ControlRequestCallback#onError(String, android.os.Bundle) parameter #1:
+    Type of parameter data in androidx.mediarouter.media.MediaRouter.ControlRequestCallback.onError(String error, android.os.Bundle data) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.mediarouter.media.MediaRouter.ControlRequestCallback#onResult(android.os.Bundle) parameter #0:
+    Type of parameter data in androidx.mediarouter.media.MediaRouter.ControlRequestCallback.onResult(android.os.Bundle data) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.mediarouter.media.MediaRouter.RouteInfo#getExtras():
+    Return type of method androidx.mediarouter.media.MediaRouter.RouteInfo.getExtras() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.mediarouter.media.MediaSessionStatus#getExtras():
+    Return type of method androidx.mediarouter.media.MediaSessionStatus.getExtras() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.mediarouter.media.RemotePlaybackClient.ActionCallback#onError(String, int, android.os.Bundle) parameter #2:
+    Type of parameter data in androidx.mediarouter.media.RemotePlaybackClient.ActionCallback.onError(String error, int code, android.os.Bundle data) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.mediarouter.media.RemotePlaybackClient.OnMessageReceivedListener#onMessageReceived(String, android.os.Bundle) parameter #1:
+    Type of parameter message in androidx.mediarouter.media.RemotePlaybackClient.OnMessageReceivedListener.onMessageReceived(String sessionId, android.os.Bundle message) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.mediarouter.media.RemotePlaybackClient.StatusCallback#onItemStatusChanged(android.os.Bundle, String, androidx.mediarouter.media.MediaSessionStatus, String, androidx.mediarouter.media.MediaItemStatus) parameter #0:
+    Type of parameter data in androidx.mediarouter.media.RemotePlaybackClient.StatusCallback.onItemStatusChanged(android.os.Bundle data, String sessionId, androidx.mediarouter.media.MediaSessionStatus sessionStatus, String itemId, androidx.mediarouter.media.MediaItemStatus itemStatus) is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.mediarouter.media.RemotePlaybackClient.StatusCallback#onSessionStatusChanged(android.os.Bundle, String, androidx.mediarouter.media.MediaSessionStatus) parameter #0:
+    Type of parameter data in androidx.mediarouter.media.RemotePlaybackClient.StatusCallback.onSessionStatusChanged(android.os.Bundle data, String sessionId, androidx.mediarouter.media.MediaSessionStatus sessionStatus) is a nullable collection (`android.os.Bundle`); must be non-null
+
+
 RegistrationName: androidx.mediarouter.media.MediaRouter#addCallback(androidx.mediarouter.media.MediaRouteSelector, androidx.mediarouter.media.MediaRouter.Callback):
     Callback methods should be named register/unregister; was addCallback
 RegistrationName: androidx.mediarouter.media.MediaRouter#addCallback(androidx.mediarouter.media.MediaRouteSelector, androidx.mediarouter.media.MediaRouter.Callback, int):
diff --git a/mediarouter/mediarouter/api/restricted_current.ignore b/mediarouter/mediarouter/api/restricted_current.ignore
deleted file mode 100644
index 6871cc5..0000000
--- a/mediarouter/mediarouter/api/restricted_current.ignore
+++ /dev/null
@@ -1,47 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.SelectionState:
-    Removed class androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.SelectionState
-
-
-RemovedField: androidx.mediarouter.media.MediaRouter.RouteInfo#DEVICE_TYPE_BLUETOOTH:
-    Removed field androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_BLUETOOTH
-RemovedField: androidx.mediarouter.media.MediaRouter.RouteInfo#DEVICE_TYPE_UNKNOWN:
-    Removed field androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_UNKNOWN
-RemovedField: androidx.mediarouter.media.MediaRouter.RouteInfo#PRESENTATION_DISPLAY_ID_NONE:
-    Removed field androidx.mediarouter.media.MediaRouter.RouteInfo.PRESENTATION_DISPLAY_ID_NONE
-
-
-RemovedMethod: androidx.mediarouter.app.MediaRouteControllerDialogFragment#getRouteSelector():
-    Removed method androidx.mediarouter.app.MediaRouteControllerDialogFragment.getRouteSelector()
-RemovedMethod: androidx.mediarouter.app.MediaRouteControllerDialogFragment#setRouteSelector(androidx.mediarouter.media.MediaRouteSelector):
-    Removed method androidx.mediarouter.app.MediaRouteControllerDialogFragment.setRouteSelector(androidx.mediarouter.media.MediaRouteSelector)
-RemovedMethod: androidx.mediarouter.media.MediaRouteDescriptor#getGroupMemberIds():
-    Removed method androidx.mediarouter.media.MediaRouteDescriptor.getGroupMemberIds()
-RemovedMethod: androidx.mediarouter.media.MediaRouteDescriptor#getMaxClientVersion():
-    Removed method androidx.mediarouter.media.MediaRouteDescriptor.getMaxClientVersion()
-RemovedMethod: androidx.mediarouter.media.MediaRouteDescriptor#getMinClientVersion():
-    Removed method androidx.mediarouter.media.MediaRouteDescriptor.getMinClientVersion()
-RemovedMethod: androidx.mediarouter.media.MediaRouteDescriptor.Builder#addGroupMemberId(String):
-    Removed method androidx.mediarouter.media.MediaRouteDescriptor.Builder.addGroupMemberId(String)
-RemovedMethod: androidx.mediarouter.media.MediaRouteDescriptor.Builder#addGroupMemberIds(java.util.Collection<java.lang.String>):
-    Removed method androidx.mediarouter.media.MediaRouteDescriptor.Builder.addGroupMemberIds(java.util.Collection<java.lang.String>)
-RemovedMethod: androidx.mediarouter.media.MediaRouteDescriptor.Builder#removeGroupMemberId(String):
-    Removed method androidx.mediarouter.media.MediaRouteDescriptor.Builder.removeGroupMemberId(String)
-RemovedMethod: androidx.mediarouter.media.MediaRouteDescriptor.Builder#setMaxClientVersion(int):
-    Removed method androidx.mediarouter.media.MediaRouteDescriptor.Builder.setMaxClientVersion(int)
-RemovedMethod: androidx.mediarouter.media.MediaRouteDescriptor.Builder#setMinClientVersion(int):
-    Removed method androidx.mediarouter.media.MediaRouteDescriptor.Builder.setMinClientVersion(int)
-RemovedMethod: androidx.mediarouter.media.MediaRouteProvider#onCreateRouteController(String, String):
-    Removed method androidx.mediarouter.media.MediaRouteProvider.onCreateRouteController(String,String)
-RemovedMethod: androidx.mediarouter.media.MediaRouter.RouteInfo#getDynamicGroupController():
-    Removed method androidx.mediarouter.media.MediaRouter.RouteInfo.getDynamicGroupController()
-RemovedMethod: androidx.mediarouter.media.MediaRouter.RouteInfo#getMemberRoutes():
-    Removed method androidx.mediarouter.media.MediaRouter.RouteInfo.getMemberRoutes()
-RemovedMethod: androidx.mediarouter.media.MediaRouter.RouteInfo#getPresentationDisplayId():
-    Removed method androidx.mediarouter.media.MediaRouter.RouteInfo.getPresentationDisplayId()
-RemovedMethod: androidx.mediarouter.media.MediaRouter.RouteInfo#getProviderInstance():
-    Removed method androidx.mediarouter.media.MediaRouter.RouteInfo.getProviderInstance()
-RemovedMethod: androidx.mediarouter.media.MediaRouter.RouteInfo#isDefaultOrBluetooth():
-    Removed method androidx.mediarouter.media.MediaRouter.RouteInfo.isDefaultOrBluetooth()
-RemovedMethod: androidx.mediarouter.media.MediaRouter.RouteInfo#isGroup():
-    Removed method androidx.mediarouter.media.MediaRouter.RouteInfo.isGroup()
diff --git a/navigation/navigation-common/api/api_lint.ignore b/navigation/navigation-common/api/api_lint.ignore
index 496b83c..baa1c57 100644
--- a/navigation/navigation-common/api/api_lint.ignore
+++ b/navigation/navigation-common/api/api_lint.ignore
@@ -59,3 +59,9 @@
     androidx.navigation.NavArgument does not declare a `isIsNullable()` method matching method androidx.navigation.NavArgument.Builder.setIsNullable(boolean)
 MissingGetterMatchingBuilder: androidx.navigation.NavOptions.Builder#setLaunchSingleTop(boolean):
     androidx.navigation.NavOptions does not declare a `isLaunchSingleTop()` method matching method androidx.navigation.NavOptions.Builder.setLaunchSingleTop(boolean)
+
+
+NullableCollection: androidx.navigation.NavAction#getDefaultArguments():
+    Return type of method androidx.navigation.NavAction.getDefaultArguments() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.navigation.Navigator#onSaveState():
+    Return type of method androidx.navigation.Navigator.onSaveState() is a nullable collection (`android.os.Bundle`); must be non-null
diff --git a/navigation/navigation-dynamic-features-runtime/api/current.ignore b/navigation/navigation-dynamic-features-runtime/api/current.ignore
new file mode 100644
index 0000000..86f7ec0
--- /dev/null
+++ b/navigation/navigation-dynamic-features-runtime/api/current.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedMethod: androidx.navigation.dynamicfeatures.DynamicExtras#DynamicExtras():
+    Removed constructor androidx.navigation.dynamicfeatures.DynamicExtras()
diff --git a/navigation/navigation-dynamic-features-runtime/api/current.txt b/navigation/navigation-dynamic-features-runtime/api/current.txt
index aa521d7..2145c1f 100644
--- a/navigation/navigation-dynamic-features-runtime/api/current.txt
+++ b/navigation/navigation-dynamic-features-runtime/api/current.txt
@@ -42,9 +42,8 @@
   }
 
   public final class DynamicExtras implements androidx.navigation.Navigator.Extras {
-    ctor public DynamicExtras(androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, androidx.navigation.Navigator.Extras? destinationExtras);
-    ctor public DynamicExtras(androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
-    ctor public DynamicExtras();
+    ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, optional androidx.navigation.Navigator.Extras? destinationExtras);
+    ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
     method public androidx.navigation.Navigator.Extras? getDestinationExtras();
     method public androidx.navigation.dynamicfeatures.DynamicInstallMonitor? getInstallMonitor();
     property public final androidx.navigation.Navigator.Extras? destinationExtras;
diff --git a/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_current.txt b/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_current.txt
index aa521d7..2145c1f 100644
--- a/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_current.txt
@@ -42,9 +42,8 @@
   }
 
   public final class DynamicExtras implements androidx.navigation.Navigator.Extras {
-    ctor public DynamicExtras(androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, androidx.navigation.Navigator.Extras? destinationExtras);
-    ctor public DynamicExtras(androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
-    ctor public DynamicExtras();
+    ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, optional androidx.navigation.Navigator.Extras? destinationExtras);
+    ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
     method public androidx.navigation.Navigator.Extras? getDestinationExtras();
     method public androidx.navigation.dynamicfeatures.DynamicInstallMonitor? getInstallMonitor();
     property public final androidx.navigation.Navigator.Extras? destinationExtras;
diff --git a/navigation/navigation-dynamic-features-runtime/api/restricted_current.ignore b/navigation/navigation-dynamic-features-runtime/api/restricted_current.ignore
new file mode 100644
index 0000000..86f7ec0
--- /dev/null
+++ b/navigation/navigation-dynamic-features-runtime/api/restricted_current.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedMethod: androidx.navigation.dynamicfeatures.DynamicExtras#DynamicExtras():
+    Removed constructor androidx.navigation.dynamicfeatures.DynamicExtras()
diff --git a/navigation/navigation-dynamic-features-runtime/api/restricted_current.txt b/navigation/navigation-dynamic-features-runtime/api/restricted_current.txt
index aa521d7..2145c1f 100644
--- a/navigation/navigation-dynamic-features-runtime/api/restricted_current.txt
+++ b/navigation/navigation-dynamic-features-runtime/api/restricted_current.txt
@@ -42,9 +42,8 @@
   }
 
   public final class DynamicExtras implements androidx.navigation.Navigator.Extras {
-    ctor public DynamicExtras(androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, androidx.navigation.Navigator.Extras? destinationExtras);
-    ctor public DynamicExtras(androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
-    ctor public DynamicExtras();
+    ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor, optional androidx.navigation.Navigator.Extras? destinationExtras);
+    ctor public DynamicExtras(optional androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor);
     method public androidx.navigation.Navigator.Extras? getDestinationExtras();
     method public androidx.navigation.dynamicfeatures.DynamicInstallMonitor? getInstallMonitor();
     property public final androidx.navigation.Navigator.Extras? destinationExtras;
diff --git a/navigation/navigation-runtime/api/api_lint.ignore b/navigation/navigation-runtime/api/api_lint.ignore
index 15edacb..71e80b5 100644
--- a/navigation/navigation-runtime/api/api_lint.ignore
+++ b/navigation/navigation-runtime/api/api_lint.ignore
@@ -13,5 +13,13 @@
     androidx.navigation.NavDeepLinkBuilder does not declare a `build()` method, but builder classes are expected to
 
 
+NullableCollection: androidx.navigation.NavBackStackEntry#getArguments():
+    Return type of method androidx.navigation.NavBackStackEntry.getArguments() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.navigation.NavController#saveState():
+    Return type of method androidx.navigation.NavController.saveState() is a nullable collection (`android.os.Bundle`); must be non-null
+NullableCollection: androidx.navigation.NavController.OnDestinationChangedListener#onDestinationChanged(androidx.navigation.NavController, androidx.navigation.NavDestination, android.os.Bundle) parameter #2:
+    Type of parameter arguments in androidx.navigation.NavController.OnDestinationChangedListener.onDestinationChanged(androidx.navigation.NavController controller, androidx.navigation.NavDestination destination, android.os.Bundle arguments) is a nullable collection (`android.os.Bundle`); must be non-null
+
+
 TopLevelBuilder: androidx.navigation.NavDeepLinkBuilder:
     Builder should be defined as inner class: androidx.navigation.NavDeepLinkBuilder
diff --git a/paging/common/api/3.0.0-beta01.txt b/paging/common/api/3.0.0-beta01.txt
index 5d8c35c..641dd69 100644
--- a/paging/common/api/3.0.0-beta01.txt
+++ b/paging/common/api/3.0.0-beta01.txt
@@ -9,7 +9,7 @@
   }
 
   public final class CombinedLoadStates {
-    ctor public CombinedLoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append, androidx.paging.LoadStates source, androidx.paging.LoadStates? mediator);
+    ctor public CombinedLoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append, androidx.paging.LoadStates source, optional androidx.paging.LoadStates? mediator);
     method public androidx.paging.LoadState getAppend();
     method public androidx.paging.LoadStates? getMediator();
     method public androidx.paging.LoadState getPrepend();
@@ -265,19 +265,19 @@
   }
 
   public final class Pager<Key, Value> {
-    ctor @androidx.paging.ExperimentalPagingApi public Pager(androidx.paging.PagingConfig config, Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
-    ctor public Pager(androidx.paging.PagingConfig config, Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+    ctor @androidx.paging.ExperimentalPagingApi public Pager(androidx.paging.PagingConfig config, optional Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+    ctor public Pager(androidx.paging.PagingConfig config, optional Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
     ctor public Pager(androidx.paging.PagingConfig config, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
     method public kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> getFlow();
     property public final kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> flow;
   }
 
   public final class PagingConfig {
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize, @IntRange(from=2) int maxSize, int jumpThreshold);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize, @IntRange(from=2) int maxSize);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize, optional @IntRange(from=2) int maxSize, optional int jumpThreshold);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize, optional @IntRange(from=2) int maxSize);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance);
     ctor public PagingConfig(int pageSize);
     field public static final androidx.paging.PagingConfig.Companion Companion;
     field public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
@@ -369,7 +369,7 @@
   }
 
   public static final class PagingSource.LoadResult.Page<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> {
-    ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsBefore, @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsAfter);
+    ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, optional @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsBefore, optional @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsAfter);
     ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey);
     method public java.util.List<Value> component1();
     method public Key? component2();
diff --git a/paging/common/api/current.txt b/paging/common/api/current.txt
index 5d8c35c..641dd69 100644
--- a/paging/common/api/current.txt
+++ b/paging/common/api/current.txt
@@ -9,7 +9,7 @@
   }
 
   public final class CombinedLoadStates {
-    ctor public CombinedLoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append, androidx.paging.LoadStates source, androidx.paging.LoadStates? mediator);
+    ctor public CombinedLoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append, androidx.paging.LoadStates source, optional androidx.paging.LoadStates? mediator);
     method public androidx.paging.LoadState getAppend();
     method public androidx.paging.LoadStates? getMediator();
     method public androidx.paging.LoadState getPrepend();
@@ -265,19 +265,19 @@
   }
 
   public final class Pager<Key, Value> {
-    ctor @androidx.paging.ExperimentalPagingApi public Pager(androidx.paging.PagingConfig config, Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
-    ctor public Pager(androidx.paging.PagingConfig config, Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+    ctor @androidx.paging.ExperimentalPagingApi public Pager(androidx.paging.PagingConfig config, optional Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+    ctor public Pager(androidx.paging.PagingConfig config, optional Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
     ctor public Pager(androidx.paging.PagingConfig config, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
     method public kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> getFlow();
     property public final kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> flow;
   }
 
   public final class PagingConfig {
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize, @IntRange(from=2) int maxSize, int jumpThreshold);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize, @IntRange(from=2) int maxSize);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize, optional @IntRange(from=2) int maxSize, optional int jumpThreshold);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize, optional @IntRange(from=2) int maxSize);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance);
     ctor public PagingConfig(int pageSize);
     field public static final androidx.paging.PagingConfig.Companion Companion;
     field public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
@@ -369,7 +369,7 @@
   }
 
   public static final class PagingSource.LoadResult.Page<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> {
-    ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsBefore, @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsAfter);
+    ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, optional @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsBefore, optional @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsAfter);
     ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey);
     method public java.util.List<Value> component1();
     method public Key? component2();
diff --git a/paging/common/api/public_plus_experimental_3.0.0-beta01.txt b/paging/common/api/public_plus_experimental_3.0.0-beta01.txt
index 8f4fedf..9ae0302 100644
--- a/paging/common/api/public_plus_experimental_3.0.0-beta01.txt
+++ b/paging/common/api/public_plus_experimental_3.0.0-beta01.txt
@@ -9,7 +9,7 @@
   }
 
   public final class CombinedLoadStates {
-    ctor public CombinedLoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append, androidx.paging.LoadStates source, androidx.paging.LoadStates? mediator);
+    ctor public CombinedLoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append, androidx.paging.LoadStates source, optional androidx.paging.LoadStates? mediator);
     method public androidx.paging.LoadState getAppend();
     method public androidx.paging.LoadStates? getMediator();
     method public androidx.paging.LoadState getPrepend();
@@ -266,19 +266,19 @@
   }
 
   public final class Pager<Key, Value> {
-    ctor @androidx.paging.ExperimentalPagingApi public Pager(androidx.paging.PagingConfig config, Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
-    ctor public Pager(androidx.paging.PagingConfig config, Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+    ctor @androidx.paging.ExperimentalPagingApi public Pager(androidx.paging.PagingConfig config, optional Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+    ctor public Pager(androidx.paging.PagingConfig config, optional Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
     ctor public Pager(androidx.paging.PagingConfig config, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
     method public kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> getFlow();
     property public final kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> flow;
   }
 
   public final class PagingConfig {
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize, @IntRange(from=2) int maxSize, int jumpThreshold);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize, @IntRange(from=2) int maxSize);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize, optional @IntRange(from=2) int maxSize, optional int jumpThreshold);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize, optional @IntRange(from=2) int maxSize);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance);
     ctor public PagingConfig(int pageSize);
     field public static final androidx.paging.PagingConfig.Companion Companion;
     field public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
@@ -370,7 +370,7 @@
   }
 
   public static final class PagingSource.LoadResult.Page<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> {
-    ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsBefore, @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsAfter);
+    ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, optional @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsBefore, optional @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsAfter);
     ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey);
     method public java.util.List<Value> component1();
     method public Key? component2();
diff --git a/paging/common/api/public_plus_experimental_current.txt b/paging/common/api/public_plus_experimental_current.txt
index 8f4fedf..9ae0302 100644
--- a/paging/common/api/public_plus_experimental_current.txt
+++ b/paging/common/api/public_plus_experimental_current.txt
@@ -9,7 +9,7 @@
   }
 
   public final class CombinedLoadStates {
-    ctor public CombinedLoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append, androidx.paging.LoadStates source, androidx.paging.LoadStates? mediator);
+    ctor public CombinedLoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append, androidx.paging.LoadStates source, optional androidx.paging.LoadStates? mediator);
     method public androidx.paging.LoadState getAppend();
     method public androidx.paging.LoadStates? getMediator();
     method public androidx.paging.LoadState getPrepend();
@@ -266,19 +266,19 @@
   }
 
   public final class Pager<Key, Value> {
-    ctor @androidx.paging.ExperimentalPagingApi public Pager(androidx.paging.PagingConfig config, Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
-    ctor public Pager(androidx.paging.PagingConfig config, Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+    ctor @androidx.paging.ExperimentalPagingApi public Pager(androidx.paging.PagingConfig config, optional Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+    ctor public Pager(androidx.paging.PagingConfig config, optional Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
     ctor public Pager(androidx.paging.PagingConfig config, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
     method public kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> getFlow();
     property public final kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> flow;
   }
 
   public final class PagingConfig {
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize, @IntRange(from=2) int maxSize, int jumpThreshold);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize, @IntRange(from=2) int maxSize);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize, optional @IntRange(from=2) int maxSize, optional int jumpThreshold);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize, optional @IntRange(from=2) int maxSize);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance);
     ctor public PagingConfig(int pageSize);
     field public static final androidx.paging.PagingConfig.Companion Companion;
     field public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
@@ -370,7 +370,7 @@
   }
 
   public static final class PagingSource.LoadResult.Page<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> {
-    ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsBefore, @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsAfter);
+    ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, optional @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsBefore, optional @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsAfter);
     ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey);
     method public java.util.List<Value> component1();
     method public Key? component2();
diff --git a/paging/common/api/restricted_3.0.0-beta01.txt b/paging/common/api/restricted_3.0.0-beta01.txt
index 5d8c35c..641dd69 100644
--- a/paging/common/api/restricted_3.0.0-beta01.txt
+++ b/paging/common/api/restricted_3.0.0-beta01.txt
@@ -9,7 +9,7 @@
   }
 
   public final class CombinedLoadStates {
-    ctor public CombinedLoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append, androidx.paging.LoadStates source, androidx.paging.LoadStates? mediator);
+    ctor public CombinedLoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append, androidx.paging.LoadStates source, optional androidx.paging.LoadStates? mediator);
     method public androidx.paging.LoadState getAppend();
     method public androidx.paging.LoadStates? getMediator();
     method public androidx.paging.LoadState getPrepend();
@@ -265,19 +265,19 @@
   }
 
   public final class Pager<Key, Value> {
-    ctor @androidx.paging.ExperimentalPagingApi public Pager(androidx.paging.PagingConfig config, Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
-    ctor public Pager(androidx.paging.PagingConfig config, Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+    ctor @androidx.paging.ExperimentalPagingApi public Pager(androidx.paging.PagingConfig config, optional Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+    ctor public Pager(androidx.paging.PagingConfig config, optional Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
     ctor public Pager(androidx.paging.PagingConfig config, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
     method public kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> getFlow();
     property public final kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> flow;
   }
 
   public final class PagingConfig {
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize, @IntRange(from=2) int maxSize, int jumpThreshold);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize, @IntRange(from=2) int maxSize);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize, optional @IntRange(from=2) int maxSize, optional int jumpThreshold);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize, optional @IntRange(from=2) int maxSize);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance);
     ctor public PagingConfig(int pageSize);
     field public static final androidx.paging.PagingConfig.Companion Companion;
     field public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
@@ -369,7 +369,7 @@
   }
 
   public static final class PagingSource.LoadResult.Page<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> {
-    ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsBefore, @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsAfter);
+    ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, optional @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsBefore, optional @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsAfter);
     ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey);
     method public java.util.List<Value> component1();
     method public Key? component2();
diff --git a/paging/common/api/restricted_current.txt b/paging/common/api/restricted_current.txt
index 5d8c35c..641dd69 100644
--- a/paging/common/api/restricted_current.txt
+++ b/paging/common/api/restricted_current.txt
@@ -9,7 +9,7 @@
   }
 
   public final class CombinedLoadStates {
-    ctor public CombinedLoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append, androidx.paging.LoadStates source, androidx.paging.LoadStates? mediator);
+    ctor public CombinedLoadStates(androidx.paging.LoadState refresh, androidx.paging.LoadState prepend, androidx.paging.LoadState append, androidx.paging.LoadStates source, optional androidx.paging.LoadStates? mediator);
     method public androidx.paging.LoadState getAppend();
     method public androidx.paging.LoadStates? getMediator();
     method public androidx.paging.LoadState getPrepend();
@@ -265,19 +265,19 @@
   }
 
   public final class Pager<Key, Value> {
-    ctor @androidx.paging.ExperimentalPagingApi public Pager(androidx.paging.PagingConfig config, Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
-    ctor public Pager(androidx.paging.PagingConfig config, Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+    ctor @androidx.paging.ExperimentalPagingApi public Pager(androidx.paging.PagingConfig config, optional Key? initialKey, androidx.paging.RemoteMediator<Key,Value>? remoteMediator, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
+    ctor public Pager(androidx.paging.PagingConfig config, optional Key? initialKey, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
     ctor public Pager(androidx.paging.PagingConfig config, kotlin.jvm.functions.Function0<? extends androidx.paging.PagingSource<Key,Value>> pagingSourceFactory);
     method public kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> getFlow();
     property public final kotlinx.coroutines.flow.Flow<androidx.paging.PagingData<Value>> flow;
   }
 
   public final class PagingConfig {
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize, @IntRange(from=2) int maxSize, int jumpThreshold);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize, @IntRange(from=2) int maxSize);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders, @IntRange(from=1) int initialLoadSize);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance, boolean enablePlaceholders);
-    ctor public PagingConfig(int pageSize, @IntRange(from=0) int prefetchDistance);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize, optional @IntRange(from=2) int maxSize, optional int jumpThreshold);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize, optional @IntRange(from=2) int maxSize);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders, optional @IntRange(from=1) int initialLoadSize);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance, optional boolean enablePlaceholders);
+    ctor public PagingConfig(int pageSize, optional @IntRange(from=0) int prefetchDistance);
     ctor public PagingConfig(int pageSize);
     field public static final androidx.paging.PagingConfig.Companion Companion;
     field public static final int MAX_SIZE_UNBOUNDED = 2147483647; // 0x7fffffff
@@ -369,7 +369,7 @@
   }
 
   public static final class PagingSource.LoadResult.Page<Key, Value> extends androidx.paging.PagingSource.LoadResult<Key,Value> {
-    ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsBefore, @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsAfter);
+    ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey, optional @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsBefore, optional @IntRange(from=COUNT_UNDEFINED.toLong()) int itemsAfter);
     ctor public PagingSource.LoadResult.Page(java.util.List<? extends Value> data, Key? prevKey, Key? nextKey);
     method public java.util.List<Value> component1();
     method public Key? component2();
diff --git a/paging/runtime/api/3.0.0-beta01.txt b/paging/runtime/api/3.0.0-beta01.txt
index 21124c9..b886d2e 100644
--- a/paging/runtime/api/3.0.0-beta01.txt
+++ b/paging/runtime/api/3.0.0-beta01.txt
@@ -24,8 +24,8 @@
   }
 
   public final class AsyncPagingDataDiffer<T> {
-    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public T? getItem(@IntRange(from=0) int index);
@@ -98,8 +98,8 @@
   }
 
   public abstract class PagingDataAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
     method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method protected final T? getItem(@IntRange(from=0) int position);
diff --git a/paging/runtime/api/api_lint.ignore b/paging/runtime/api/api_lint.ignore
index 191981b..60cdbfc 100644
--- a/paging/runtime/api/api_lint.ignore
+++ b/paging/runtime/api/api_lint.ignore
@@ -11,3 +11,13 @@
     androidx.lifecycle.LiveData does not declare a `getFetchExecutor()` method matching method androidx.paging.LivePagedListBuilder.setFetchExecutor(java.util.concurrent.Executor)
 MissingGetterMatchingBuilder: androidx.paging.LivePagedListBuilder#setInitialLoadKey(Key):
     androidx.lifecycle.LiveData does not declare a `getInitialLoadKey()` method matching method androidx.paging.LivePagedListBuilder.setInitialLoadKey(Key)
+
+
+NullableCollection: androidx.paging.AsyncPagedListDiffer#getCurrentList():
+    Return type of method androidx.paging.AsyncPagedListDiffer.getCurrentList() is a nullable collection (`androidx.paging.PagedList`); must be non-null
+NullableCollection: androidx.paging.AsyncPagedListDiffer.PagedListListener#onCurrentListChanged(androidx.paging.PagedList<T>, androidx.paging.PagedList<T>) parameter #0:
+    Type of parameter previousList in androidx.paging.AsyncPagedListDiffer.PagedListListener.onCurrentListChanged(androidx.paging.PagedList<T> previousList, androidx.paging.PagedList<T> currentList) is a nullable collection (`androidx.paging.PagedList`); must be non-null
+NullableCollection: androidx.paging.AsyncPagedListDiffer.PagedListListener#onCurrentListChanged(androidx.paging.PagedList<T>, androidx.paging.PagedList<T>) parameter #1:
+    Type of parameter currentList in androidx.paging.AsyncPagedListDiffer.PagedListListener.onCurrentListChanged(androidx.paging.PagedList<T> previousList, androidx.paging.PagedList<T> currentList) is a nullable collection (`androidx.paging.PagedList`); must be non-null
+NullableCollection: androidx.paging.PagedListAdapter#getCurrentList():
+    Return type of method androidx.paging.PagedListAdapter.getCurrentList() is a nullable collection (`androidx.paging.PagedList`); must be non-null
diff --git a/paging/runtime/api/current.txt b/paging/runtime/api/current.txt
index 21124c9..b886d2e 100644
--- a/paging/runtime/api/current.txt
+++ b/paging/runtime/api/current.txt
@@ -24,8 +24,8 @@
   }
 
   public final class AsyncPagingDataDiffer<T> {
-    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public T? getItem(@IntRange(from=0) int index);
@@ -98,8 +98,8 @@
   }
 
   public abstract class PagingDataAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
     method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method protected final T? getItem(@IntRange(from=0) int position);
diff --git a/paging/runtime/api/public_plus_experimental_3.0.0-beta01.txt b/paging/runtime/api/public_plus_experimental_3.0.0-beta01.txt
index 21124c9..b886d2e 100644
--- a/paging/runtime/api/public_plus_experimental_3.0.0-beta01.txt
+++ b/paging/runtime/api/public_plus_experimental_3.0.0-beta01.txt
@@ -24,8 +24,8 @@
   }
 
   public final class AsyncPagingDataDiffer<T> {
-    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public T? getItem(@IntRange(from=0) int index);
@@ -98,8 +98,8 @@
   }
 
   public abstract class PagingDataAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
     method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method protected final T? getItem(@IntRange(from=0) int position);
diff --git a/paging/runtime/api/public_plus_experimental_current.txt b/paging/runtime/api/public_plus_experimental_current.txt
index 21124c9..b886d2e 100644
--- a/paging/runtime/api/public_plus_experimental_current.txt
+++ b/paging/runtime/api/public_plus_experimental_current.txt
@@ -24,8 +24,8 @@
   }
 
   public final class AsyncPagingDataDiffer<T> {
-    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public T? getItem(@IntRange(from=0) int index);
@@ -98,8 +98,8 @@
   }
 
   public abstract class PagingDataAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
     method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method protected final T? getItem(@IntRange(from=0) int position);
diff --git a/paging/runtime/api/restricted_3.0.0-beta01.txt b/paging/runtime/api/restricted_3.0.0-beta01.txt
index 21124c9..b886d2e 100644
--- a/paging/runtime/api/restricted_3.0.0-beta01.txt
+++ b/paging/runtime/api/restricted_3.0.0-beta01.txt
@@ -24,8 +24,8 @@
   }
 
   public final class AsyncPagingDataDiffer<T> {
-    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public T? getItem(@IntRange(from=0) int index);
@@ -98,8 +98,8 @@
   }
 
   public abstract class PagingDataAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
     method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method protected final T? getItem(@IntRange(from=0) int position);
diff --git a/paging/runtime/api/restricted_current.txt b/paging/runtime/api/restricted_current.txt
index 21124c9..b886d2e 100644
--- a/paging/runtime/api/restricted_current.txt
+++ b/paging/runtime/api/restricted_current.txt
@@ -24,8 +24,8 @@
   }
 
   public final class AsyncPagingDataDiffer<T> {
-    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public T? getItem(@IntRange(from=0) int index);
@@ -98,8 +98,8 @@
   }
 
   public abstract class PagingDataAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher, kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
-    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
+    ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher);
     ctor public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback);
     method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method protected final T? getItem(@IntRange(from=0) int position);
diff --git a/percentlayout/percentlayout/api/api_lint.ignore b/percentlayout/percentlayout/api/api_lint.ignore
index 5ca3443..632646c 100644
--- a/percentlayout/percentlayout/api/api_lint.ignore
+++ b/percentlayout/percentlayout/api/api_lint.ignore
@@ -47,8 +47,6 @@
     Missing nullability on parameter `view` in method `fillMarginLayoutParams`
 MissingNullability: androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutInfo#fillMarginLayoutParams(android.view.View, android.view.ViewGroup.MarginLayoutParams, int, int) parameter #1:
     Missing nullability on parameter `params` in method `fillMarginLayoutParams`
-MissingNullability: androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutInfo#fillMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams, int, int) parameter #0:
-    Missing nullability on parameter `params` in method `fillMarginLayoutParams`
 MissingNullability: androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutInfo#restoreLayoutParams(android.view.ViewGroup.LayoutParams) parameter #0:
     Missing nullability on parameter `params` in method `restoreLayoutParams`
 MissingNullability: androidx.percentlayout.widget.PercentLayoutHelper.PercentLayoutInfo#restoreMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams) parameter #0:
diff --git a/preference/preference/api/api_lint.ignore b/preference/preference/api/api_lint.ignore
index 3abb208..99fff15 100644
--- a/preference/preference/api/api_lint.ignore
+++ b/preference/preference/api/api_lint.ignore
@@ -165,8 +165,6 @@
     Missing nullability on method `provideSummary` return
 MissingNullability: androidx.preference.EditTextPreference.SimpleSummaryProvider#provideSummary(androidx.preference.EditTextPreference) parameter #0:
     Missing nullability on parameter `preference` in method `provideSummary`
-MissingNullability: androidx.preference.EditTextPreferenceDialogFragment#newInstance(String) parameter #0:
-    Missing nullability on parameter `key` in method `newInstance`
 MissingNullability: androidx.preference.EditTextPreferenceDialogFragment#onBindDialogView(android.view.View) parameter #0:
     Missing nullability on parameter `view` in method `onBindDialogView`
 MissingNullability: androidx.preference.EditTextPreferenceDialogFragment#onCreate(android.os.Bundle) parameter #0:
@@ -229,8 +227,6 @@
     Missing nullability on method `provideSummary` return
 MissingNullability: androidx.preference.ListPreference.SimpleSummaryProvider#provideSummary(androidx.preference.ListPreference) parameter #0:
     Missing nullability on parameter `preference` in method `provideSummary`
-MissingNullability: androidx.preference.ListPreferenceDialogFragment#newInstance(String) parameter #0:
-    Missing nullability on parameter `key` in method `newInstance`
 MissingNullability: androidx.preference.ListPreferenceDialogFragment#onCreate(android.os.Bundle) parameter #0:
     Missing nullability on parameter `savedInstanceState` in method `onCreate`
 MissingNullability: androidx.preference.ListPreferenceDialogFragment#onPrepareDialogBuilder(android.app.AlertDialog.Builder) parameter #0:
@@ -283,8 +279,6 @@
     Missing nullability on parameter `entryValues` in method `setEntryValues`
 MissingNullability: androidx.preference.MultiSelectListPreference#setValues(java.util.Set<java.lang.String>) parameter #0:
     Missing nullability on parameter `values` in method `setValues`
-MissingNullability: androidx.preference.MultiSelectListPreferenceDialogFragment#newInstance(String) parameter #0:
-    Missing nullability on parameter `key` in method `newInstance`
 MissingNullability: androidx.preference.MultiSelectListPreferenceDialogFragment#onCreate(android.os.Bundle) parameter #0:
     Missing nullability on parameter `savedInstanceState` in method `onCreate`
 MissingNullability: androidx.preference.MultiSelectListPreferenceDialogFragment#onPrepareDialogBuilder(android.app.AlertDialog.Builder) parameter #0:
@@ -357,16 +351,12 @@
     Missing nullability on method `onGetDefaultValue` return
 MissingNullability: androidx.preference.Preference#onGetDefaultValue(android.content.res.TypedArray, int) parameter #0:
     Missing nullability on parameter `a` in method `onGetDefaultValue`
-MissingNullability: androidx.preference.Preference#onInitializeAccessibilityNodeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat) parameter #0:
-    Missing nullability on parameter `info` in method `onInitializeAccessibilityNodeInfo`
 MissingNullability: androidx.preference.Preference#onParentChanged(androidx.preference.Preference, boolean) parameter #0:
     Missing nullability on parameter `parent` in method `onParentChanged`
 MissingNullability: androidx.preference.Preference#onRestoreInstanceState(android.os.Parcelable) parameter #0:
     Missing nullability on parameter `state` in method `onRestoreInstanceState`
 MissingNullability: androidx.preference.Preference#onSaveInstanceState():
     Missing nullability on method `onSaveInstanceState` return
-MissingNullability: androidx.preference.Preference#onSetInitialValue(boolean, Object) parameter #1:
-    Missing nullability on parameter `defaultValue` in method `onSetInitialValue`
 MissingNullability: androidx.preference.Preference#peekExtras():
     Missing nullability on method `peekExtras` return
 MissingNullability: androidx.preference.Preference#persistString(String) parameter #0:
@@ -453,20 +443,12 @@
     Missing nullability on parameter `key` in method `putString`
 MissingNullability: androidx.preference.PreferenceDataStore#putStringSet(String, java.util.Set<java.lang.String>) parameter #0:
     Missing nullability on parameter `key` in method `putStringSet`
-MissingNullability: androidx.preference.PreferenceDialogFragment#onBindDialogView(android.view.View) parameter #0:
-    Missing nullability on parameter `view` in method `onBindDialogView`
-MissingNullability: androidx.preference.PreferenceDialogFragment#onClick(android.content.DialogInterface, int) parameter #0:
-    Missing nullability on parameter `dialog` in method `onClick`
 MissingNullability: androidx.preference.PreferenceDialogFragment#onCreate(android.os.Bundle) parameter #0:
     Missing nullability on parameter `savedInstanceState` in method `onCreate`
 MissingNullability: androidx.preference.PreferenceDialogFragment#onCreateDialog(android.os.Bundle) parameter #0:
     Missing nullability on parameter `savedInstanceState` in method `onCreateDialog`
-MissingNullability: androidx.preference.PreferenceDialogFragment#onCreateDialogView(android.content.Context) parameter #0:
-    Missing nullability on parameter `context` in method `onCreateDialogView`
 MissingNullability: androidx.preference.PreferenceDialogFragment#onDismiss(android.content.DialogInterface) parameter #0:
     Missing nullability on parameter `dialog` in method `onDismiss`
-MissingNullability: androidx.preference.PreferenceDialogFragment#onPrepareDialogBuilder(android.app.AlertDialog.Builder) parameter #0:
-    Missing nullability on parameter `builder` in method `onPrepareDialogBuilder`
 MissingNullability: androidx.preference.PreferenceDialogFragmentCompat#getPreference():
     Missing nullability on method `getPreference` return
 MissingNullability: androidx.preference.PreferenceDialogFragmentCompat#onBindDialogView(android.view.View) parameter #0:
@@ -483,22 +465,8 @@
     Missing nullability on parameter `context` in method `onCreateDialogView`
 MissingNullability: androidx.preference.PreferenceDialogFragmentCompat#onPrepareDialogBuilder(androidx.appcompat.app.AlertDialog.Builder) parameter #0:
     Missing nullability on parameter `builder` in method `onPrepareDialogBuilder`
-MissingNullability: androidx.preference.PreferenceFragment#findPreference(CharSequence) parameter #0:
-    Missing nullability on parameter `key` in method `findPreference`
 MissingNullability: androidx.preference.PreferenceFragment#onCreate(android.os.Bundle) parameter #0:
     Missing nullability on parameter `savedInstanceState` in method `onCreate`
-MissingNullability: androidx.preference.PreferenceFragment#onCreateAdapter(androidx.preference.PreferenceScreen) parameter #0:
-    Missing nullability on parameter `preferenceScreen` in method `onCreateAdapter`
-MissingNullability: androidx.preference.PreferenceFragment#onCreatePreferences(android.os.Bundle, String) parameter #0:
-    Missing nullability on parameter `savedInstanceState` in method `onCreatePreferences`
-MissingNullability: androidx.preference.PreferenceFragment#onCreatePreferences(android.os.Bundle, String) parameter #1:
-    Missing nullability on parameter `rootKey` in method `onCreatePreferences`
-MissingNullability: androidx.preference.PreferenceFragment#onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) parameter #0:
-    Missing nullability on parameter `inflater` in method `onCreateRecyclerView`
-MissingNullability: androidx.preference.PreferenceFragment#onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) parameter #1:
-    Missing nullability on parameter `parent` in method `onCreateRecyclerView`
-MissingNullability: androidx.preference.PreferenceFragment#onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) parameter #2:
-    Missing nullability on parameter `savedInstanceState` in method `onCreateRecyclerView`
 MissingNullability: androidx.preference.PreferenceFragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle):
     Missing nullability on method `onCreateView` return
 MissingNullability: androidx.preference.PreferenceFragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) parameter #0:
@@ -507,26 +475,12 @@
     Missing nullability on parameter `container` in method `onCreateView`
 MissingNullability: androidx.preference.PreferenceFragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) parameter #2:
     Missing nullability on parameter `savedInstanceState` in method `onCreateView`
-MissingNullability: androidx.preference.PreferenceFragment#onDisplayPreferenceDialog(androidx.preference.Preference) parameter #0:
-    Missing nullability on parameter `preference` in method `onDisplayPreferenceDialog`
-MissingNullability: androidx.preference.PreferenceFragment#onNavigateToScreen(androidx.preference.PreferenceScreen) parameter #0:
-    Missing nullability on parameter `preferenceScreen` in method `onNavigateToScreen`
-MissingNullability: androidx.preference.PreferenceFragment#onPreferenceTreeClick(androidx.preference.Preference) parameter #0:
-    Missing nullability on parameter `preference` in method `onPreferenceTreeClick`
 MissingNullability: androidx.preference.PreferenceFragment#onSaveInstanceState(android.os.Bundle) parameter #0:
     Missing nullability on parameter `outState` in method `onSaveInstanceState`
 MissingNullability: androidx.preference.PreferenceFragment#onViewCreated(android.view.View, android.os.Bundle) parameter #0:
     Missing nullability on parameter `view` in method `onViewCreated`
 MissingNullability: androidx.preference.PreferenceFragment#onViewCreated(android.view.View, android.os.Bundle) parameter #1:
     Missing nullability on parameter `savedInstanceState` in method `onViewCreated`
-MissingNullability: androidx.preference.PreferenceFragment#scrollToPreference(String) parameter #0:
-    Missing nullability on parameter `key` in method `scrollToPreference`
-MissingNullability: androidx.preference.PreferenceFragment#scrollToPreference(androidx.preference.Preference) parameter #0:
-    Missing nullability on parameter `preference` in method `scrollToPreference`
-MissingNullability: androidx.preference.PreferenceFragment#setDivider(android.graphics.drawable.Drawable) parameter #0:
-    Missing nullability on parameter `divider` in method `setDivider`
-MissingNullability: androidx.preference.PreferenceFragment#setPreferenceScreen(androidx.preference.PreferenceScreen) parameter #0:
-    Missing nullability on parameter `preferenceScreen` in method `setPreferenceScreen`
 MissingNullability: androidx.preference.PreferenceFragment.OnPreferenceDisplayDialogCallback#onPreferenceDisplayDialog(androidx.preference.PreferenceFragment, androidx.preference.Preference) parameter #1:
     Missing nullability on parameter `pref` in method `onPreferenceDisplayDialog`
 MissingNullability: androidx.preference.PreferenceFragment.OnPreferenceStartFragmentCallback#onPreferenceStartFragment(androidx.preference.PreferenceFragment, androidx.preference.Preference) parameter #0:
@@ -803,6 +757,10 @@
     Bare field mChecked must be marked final, or moved behind accessors if mutable
 
 
+NullableCollection: androidx.preference.PreferenceDataStore#getStringSet(String, java.util.Set<java.lang.String>):
+    Return type of method androidx.preference.PreferenceDataStore.getStringSet(String,java.util.Set<java.lang.String>) is a nullable collection (`java.util.Set`); must be non-null
+
+
 ParcelConstructor: androidx.preference.Preference.BaseSavedState#BaseSavedState(android.os.Parcel):
     Parcelable inflation is exposed through CREATOR, not raw constructors, in androidx.preference.Preference.BaseSavedState
 
diff --git a/recyclerview/recyclerview/api/api_lint.ignore b/recyclerview/recyclerview/api/api_lint.ignore
index 648e471..61d7551 100644
--- a/recyclerview/recyclerview/api/api_lint.ignore
+++ b/recyclerview/recyclerview/api/api_lint.ignore
@@ -395,8 +395,6 @@
     Missing nullability on method `findViewByPosition` return
 MissingNullability: androidx.recyclerview.widget.LinearLayoutManager#generateDefaultLayoutParams():
     Missing nullability on method `generateDefaultLayoutParams` return
-MissingNullability: androidx.recyclerview.widget.LinearLayoutManager#getExtraLayoutSpace(androidx.recyclerview.widget.RecyclerView.State) parameter #0:
-    Missing nullability on parameter `state` in method `getExtraLayoutSpace`
 MissingNullability: androidx.recyclerview.widget.LinearLayoutManager#onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.Recycler) parameter #0:
     Missing nullability on parameter `view` in method `onDetachedFromWindow`
 MissingNullability: androidx.recyclerview.widget.LinearLayoutManager#onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.Recycler) parameter #1:
@@ -577,8 +575,6 @@
     Missing nullability on parameter `rect` in method `requestChildRectangleOnScreen`
 MissingNullability: androidx.recyclerview.widget.RecyclerView#sendAccessibilityEventUnchecked(android.view.accessibility.AccessibilityEvent) parameter #0:
     Missing nullability on parameter `event` in method `sendAccessibilityEventUnchecked`
-MissingNullability: androidx.recyclerview.widget.RecyclerView#setLayoutTransition(android.animation.LayoutTransition) parameter #0:
-    Missing nullability on parameter `transition` in method `setLayoutTransition`
 MissingNullability: androidx.recyclerview.widget.RecyclerView.LayoutManager#addDisappearingView(android.view.View) parameter #0:
     Missing nullability on parameter `child` in method `addDisappearingView`
 MissingNullability: androidx.recyclerview.widget.RecyclerView.LayoutManager#addDisappearingView(android.view.View, int) parameter #0:
@@ -619,8 +615,6 @@
     Missing nullability on method `getProperties` return
 MissingNullability: androidx.recyclerview.widget.RecyclerView.LayoutManager#onAttachedToWindow(androidx.recyclerview.widget.RecyclerView) parameter #0:
     Missing nullability on parameter `view` in method `onAttachedToWindow`
-MissingNullability: androidx.recyclerview.widget.RecyclerView.LayoutManager#onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView) parameter #0:
-    Missing nullability on parameter `view` in method `onDetachedFromWindow`
 MissingNullability: androidx.recyclerview.widget.RecyclerView.LayoutManager#onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.Recycler) parameter #0:
     Missing nullability on parameter `view` in method `onDetachedFromWindow`
 MissingNullability: androidx.recyclerview.widget.RecyclerView.LayoutManager#onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.Recycler) parameter #1:
diff --git a/room/runtime/api/api_lint.ignore b/room/runtime/api/api_lint.ignore
index 54fc7a2..1937946 100644
--- a/room/runtime/api/api_lint.ignore
+++ b/room/runtime/api/api_lint.ignore
@@ -61,6 +61,12 @@
     Missing nullability on parameter `startVersions` in method `fallbackToDestructiveMigrationFrom`
 
 
+NullableCollection: androidx.room.DatabaseConfiguration#callbacks:
+    Type of field androidx.room.DatabaseConfiguration.callbacks is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.room.RoomDatabase.MigrationContainer#findMigrationPath(int, int):
+    Return type of method androidx.room.RoomDatabase.MigrationContainer.findMigrationPath(int,int) is a nullable collection (`java.util.List`); must be non-null
+
+
 RegistrationName: androidx.room.RoomDatabase.Builder#addCallback(androidx.room.RoomDatabase.Callback):
     Callback methods should be named register/unregister; was addCallback
 
diff --git a/room/runtime/api/current.ignore b/room/runtime/api/current.ignore
deleted file mode 100644
index 4c380f6..0000000
--- a/room/runtime/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedDeprecatedField: androidx.room.RoomDatabase#mCallbacks:
-    Removed deprecated field androidx.room.RoomDatabase.mCallbacks
diff --git a/room/runtime/api/restricted_current.ignore b/room/runtime/api/restricted_current.ignore
deleted file mode 100644
index 696fe9a..0000000
--- a/room/runtime/api/restricted_current.ignore
+++ /dev/null
@@ -1,53 +0,0 @@
-// Baseline format: 1.0
-AddedFinal: androidx.room.util.FtsTableInfo:
-    Class androidx.room.util.FtsTableInfo added 'final' qualifier
-AddedFinal: androidx.room.util.FtsTableInfo#FtsTableInfo(String, java.util.Set<java.lang.String>, String):
-    Constructor androidx.room.util.FtsTableInfo has added 'final' qualifier
-AddedFinal: androidx.room.util.FtsTableInfo#FtsTableInfo(String, java.util.Set<java.lang.String>, java.util.Set<java.lang.String>):
-    Constructor androidx.room.util.FtsTableInfo has added 'final' qualifier
-AddedFinal: androidx.room.util.TableInfo:
-    Class androidx.room.util.TableInfo added 'final' qualifier
-AddedFinal: androidx.room.util.TableInfo#TableInfo(String, java.util.Map<java.lang.String,androidx.room.util.TableInfo.Column>, java.util.Set<androidx.room.util.TableInfo.ForeignKey>):
-    Constructor androidx.room.util.TableInfo has added 'final' qualifier
-AddedFinal: androidx.room.util.TableInfo#TableInfo(String, java.util.Map<java.lang.String,androidx.room.util.TableInfo.Column>, java.util.Set<androidx.room.util.TableInfo.ForeignKey>, java.util.Set<androidx.room.util.TableInfo.Index>):
-    Constructor androidx.room.util.TableInfo has added 'final' qualifier
-AddedFinal: androidx.room.util.TableInfo.Column:
-    Class androidx.room.util.TableInfo.Column added 'final' qualifier
-AddedFinal: androidx.room.util.TableInfo.Column#Column(String, String, boolean, int):
-    Constructor androidx.room.util.TableInfo.Column has added 'final' qualifier
-AddedFinal: androidx.room.util.TableInfo.Column#Column(String, String, boolean, int, String, int):
-    Constructor androidx.room.util.TableInfo.Column has added 'final' qualifier
-AddedFinal: androidx.room.util.TableInfo.Column#isPrimaryKey():
-    Method androidx.room.util.TableInfo.Column.isPrimaryKey has added 'final' qualifier
-AddedFinal: androidx.room.util.TableInfo.ForeignKey:
-    Class androidx.room.util.TableInfo.ForeignKey added 'final' qualifier
-AddedFinal: androidx.room.util.TableInfo.ForeignKey#ForeignKey(String, String, String, java.util.List<java.lang.String>, java.util.List<java.lang.String>):
-    Constructor androidx.room.util.TableInfo.ForeignKey has added 'final' qualifier
-AddedFinal: androidx.room.util.TableInfo.Index:
-    Class androidx.room.util.TableInfo.Index added 'final' qualifier
-AddedFinal: androidx.room.util.TableInfo.Index#Index(String, boolean, java.util.List<java.lang.String>):
-    Constructor androidx.room.util.TableInfo.Index has added 'final' qualifier
-AddedFinal: androidx.room.util.ViewInfo:
-    Class androidx.room.util.ViewInfo added 'final' qualifier
-AddedFinal: androidx.room.util.ViewInfo#ViewInfo(String, String):
-    Constructor androidx.room.util.ViewInfo has added 'final' qualifier
-
-
-ChangedType: androidx.room.InvalidationTracker#createLiveData(String[], boolean, java.util.concurrent.Callable<T>):
-    Method androidx.room.InvalidationTracker.createLiveData has changed return type from LiveData<T> to androidx.lifecycle.LiveData<T>
-ChangedType: androidx.room.InvalidationTracker#createLiveData(String[], java.util.concurrent.Callable<T>):
-    Method androidx.room.InvalidationTracker.createLiveData has changed return type from LiveData<T> to androidx.lifecycle.LiveData<T>
-
-
-InvalidNullConversion: androidx.room.InvalidationTracker#createLiveData(String[], boolean, java.util.concurrent.Callable<T>):
-    Attempted to remove @NonNull annotation from method androidx.room.InvalidationTracker.createLiveData(String[],boolean,java.util.concurrent.Callable<T>)
-InvalidNullConversion: androidx.room.InvalidationTracker#createLiveData(String[], java.util.concurrent.Callable<T>):
-    Attempted to remove @NonNull annotation from method androidx.room.InvalidationTracker.createLiveData(String[],java.util.concurrent.Callable<T>)
-
-
-RemovedMethod: androidx.room.paging.LimitOffsetDataSource#isInvalid():
-    Removed method androidx.room.paging.LimitOffsetDataSource.isInvalid()
-RemovedMethod: androidx.room.paging.LimitOffsetDataSource#loadInitial(LoadInitialParams, LoadInitialCallback<T>):
-    Removed method androidx.room.paging.LimitOffsetDataSource.loadInitial(LoadInitialParams,LoadInitialCallback<T>)
-RemovedMethod: androidx.room.paging.LimitOffsetDataSource#loadRange(LoadRangeParams, LoadRangeCallback<T>):
-    Removed method androidx.room.paging.LimitOffsetDataSource.loadRange(LoadRangeParams,LoadRangeCallback<T>)
diff --git a/savedstate/savedstate/api/api_lint.ignore b/savedstate/savedstate/api/api_lint.ignore
new file mode 100644
index 0000000..e15ce38
--- /dev/null
+++ b/savedstate/savedstate/api/api_lint.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+NullableCollection: androidx.savedstate.SavedStateRegistry#consumeRestoredStateForKey(String):
+    Return type of method androidx.savedstate.SavedStateRegistry.consumeRestoredStateForKey(String) is a nullable collection (`android.os.Bundle`); must be non-null
diff --git a/security/crypto/api/api_lint.ignore b/security/crypto/api/api_lint.ignore
index 5a464fd..dd57353 100644
--- a/security/crypto/api/api_lint.ignore
+++ b/security/crypto/api/api_lint.ignore
@@ -1,10 +1,4 @@
 // Baseline format: 1.0
-ContextFirst: androidx.security.crypto.EncryptedFile.Builder#Builder(java.io.File, android.content.Context, String, androidx.security.crypto.EncryptedFile.FileEncryptionScheme) parameter #1:
-    Context is distinct, so it must be the first argument (method `Builder`)
-ContextFirst: androidx.security.crypto.EncryptedSharedPreferences#create(String, String, android.content.Context, androidx.security.crypto.EncryptedSharedPreferences.PrefKeyEncryptionScheme, androidx.security.crypto.EncryptedSharedPreferences.PrefValueEncryptionScheme) parameter #2:
-    Context is distinct, so it must be the first argument (method `create`)
-
-
 ExecutorRegistration: androidx.security.crypto.EncryptedSharedPreferences#registerOnSharedPreferenceChangeListener(android.content.SharedPreferences.OnSharedPreferenceChangeListener):
     Registration methods should have overload that accepts delivery Executor: `registerOnSharedPreferenceChangeListener`
 
diff --git a/security/identity-credential/api/api_lint.ignore b/security/identity-credential/api/api_lint.ignore
index 603b290..eb7c43a 100644
--- a/security/identity-credential/api/api_lint.ignore
+++ b/security/identity-credential/api/api_lint.ignore
@@ -7,3 +7,9 @@
     androidx.security.identity.AccessControlProfile does not declare a `getUserAuthenticationTimeout()` method matching method androidx.security.identity.AccessControlProfile.Builder.setUserAuthenticationTimeout(long)
 MissingGetterMatchingBuilder: androidx.security.identity.PersonalizationData.Builder#addAccessControlProfile(androidx.security.identity.AccessControlProfile):
     androidx.security.identity.PersonalizationData does not declare a `getAccessControlProfiles()` method matching method androidx.security.identity.PersonalizationData.Builder.addAccessControlProfile(androidx.security.identity.AccessControlProfile)
+
+
+NullableCollection: androidx.security.identity.ResultData#getEntryNames(String):
+    Return type of method androidx.security.identity.ResultData.getEntryNames(String) is a nullable collection (`java.util.Collection`); must be non-null
+NullableCollection: androidx.security.identity.ResultData#getRetrievedEntryNames(String):
+    Return type of method androidx.security.identity.ResultData.getRetrievedEntryNames(String) is a nullable collection (`java.util.Collection`); must be non-null
diff --git a/slices/view/api/api_lint.ignore b/slices/view/api/api_lint.ignore
index d346108..78fbd80 100644
--- a/slices/view/api/api_lint.ignore
+++ b/slices/view/api/api_lint.ignore
@@ -83,5 +83,13 @@
     Bare field state must be marked final, or moved behind accessors if mutable
 
 
+NullableCollection: androidx.slice.SliceMetadata#getSliceActions():
+    Return type of method androidx.slice.SliceMetadata.getSliceActions() is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.slice.SliceMetadata#getSliceKeywords():
+    Return type of method androidx.slice.SliceMetadata.getSliceKeywords() is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.slice.widget.SliceView#getSliceActions():
+    Return type of method androidx.slice.widget.SliceView.getSliceActions() is a nullable collection (`java.util.List`); must be non-null
+
+
 PublicTypedef: androidx.slice.widget.SliceLiveData.OnErrorListener.ErrorType:
     Don't expose @IntDef: ErrorType must be hidden.
diff --git a/slidingpanelayout/slidingpanelayout/api/api_lint.ignore b/slidingpanelayout/slidingpanelayout/api/api_lint.ignore
index 0300f24..3106edf 100644
--- a/slidingpanelayout/slidingpanelayout/api/api_lint.ignore
+++ b/slidingpanelayout/slidingpanelayout/api/api_lint.ignore
@@ -35,8 +35,6 @@
     Missing nullability on parameter `child` in method `requestChildFocus`
 MissingNullability: androidx.slidingpanelayout.widget.SlidingPaneLayout#requestChildFocus(android.view.View, android.view.View) parameter #1:
     Missing nullability on parameter `focused` in method `requestChildFocus`
-MissingNullability: androidx.slidingpanelayout.widget.SlidingPaneLayout#setShadowDrawable(android.graphics.drawable.Drawable) parameter #0:
-    Missing nullability on parameter `d` in method `setShadowDrawable`
 MissingNullability: androidx.slidingpanelayout.widget.SlidingPaneLayout.SimplePanelSlideListener#onPanelClosed(android.view.View) parameter #0:
     Missing nullability on parameter `panel` in method `onPanelClosed`
 MissingNullability: androidx.slidingpanelayout.widget.SlidingPaneLayout.SimplePanelSlideListener#onPanelOpened(android.view.View) parameter #0:
diff --git a/swiperefreshlayout/swiperefreshlayout/api/api_lint.ignore b/swiperefreshlayout/swiperefreshlayout/api/api_lint.ignore
index 2b4e6f4..10315de 100644
--- a/swiperefreshlayout/swiperefreshlayout/api/api_lint.ignore
+++ b/swiperefreshlayout/swiperefreshlayout/api/api_lint.ignore
@@ -73,8 +73,6 @@
     Missing nullability on parameter `target` in method `onStopNestedScroll`
 MissingNullability: androidx.swiperefreshlayout.widget.SwipeRefreshLayout#onTouchEvent(android.view.MotionEvent) parameter #0:
     Missing nullability on parameter `ev` in method `onTouchEvent`
-MissingNullability: androidx.swiperefreshlayout.widget.SwipeRefreshLayout#setColorScheme(int...) parameter #0:
-    Missing nullability on parameter `colors` in method `setColorScheme`
 MissingNullability: androidx.swiperefreshlayout.widget.SwipeRefreshLayout#setColorSchemeColors(int...) parameter #0:
     Missing nullability on parameter `colors` in method `setColorSchemeColors`
 MissingNullability: androidx.swiperefreshlayout.widget.SwipeRefreshLayout#setColorSchemeResources(int...) parameter #0:
diff --git a/transition/transition/api/api_lint.ignore b/transition/transition/api/api_lint.ignore
index ec4a1ff..ef415f7 100644
--- a/transition/transition/api/api_lint.ignore
+++ b/transition/transition/api/api_lint.ignore
@@ -169,3 +169,11 @@
     Provide an explicit copy constructor instead of implementing `clone()`
 NoClone: androidx.transition.TransitionSet#clone():
     Provide an explicit copy constructor instead of implementing `clone()`
+
+
+NullableCollection: androidx.transition.Transition#getTargetNames():
+    Return type of method androidx.transition.Transition.getTargetNames() is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.transition.Transition#getTargetTypes():
+    Return type of method androidx.transition.Transition.getTargetTypes() is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.transition.Transition#getTransitionProperties():
+    Return type of method androidx.transition.Transition.getTransitionProperties() is a nullable collection (`java.lang.String[]`); must be non-null
diff --git a/versionedparcelable/versionedparcelable/api/api_lint.ignore b/versionedparcelable/versionedparcelable/api/api_lint.ignore
index f66b0cc..f0bcdee 100644
--- a/versionedparcelable/versionedparcelable/api/api_lint.ignore
+++ b/versionedparcelable/versionedparcelable/api/api_lint.ignore
@@ -3,3 +3,7 @@
     Missing nullability on parameter `bundle` in method `getVersionedParcelableList`
 MissingNullability: androidx.versionedparcelable.ParcelUtils#getVersionedParcelableList(android.os.Bundle, String) parameter #1:
     Missing nullability on parameter `key` in method `getVersionedParcelableList`
+
+
+NullableCollection: androidx.versionedparcelable.ParcelUtils#getVersionedParcelableList(android.os.Bundle, String):
+    Return type of method androidx.versionedparcelable.ParcelUtils.getVersionedParcelableList(android.os.Bundle,String) is a nullable collection (`java.util.List`); must be non-null
diff --git a/viewpager/viewpager/api/api_lint.ignore b/viewpager/viewpager/api/api_lint.ignore
index 357127c..365dc29 100644
--- a/viewpager/viewpager/api/api_lint.ignore
+++ b/viewpager/viewpager/api/api_lint.ignore
@@ -61,8 +61,6 @@
     Missing nullability on parameter `ev` in method `onTouchEvent`
 MissingNullability: androidx.viewpager.widget.ViewPager#removeView(android.view.View) parameter #0:
     Missing nullability on parameter `view` in method `removeView`
-MissingNullability: androidx.viewpager.widget.ViewPager#setOnPageChangeListener(androidx.viewpager.widget.ViewPager.OnPageChangeListener) parameter #0:
-    Missing nullability on parameter `listener` in method `setOnPageChangeListener`
 MissingNullability: androidx.viewpager.widget.ViewPager#verifyDrawable(android.graphics.drawable.Drawable) parameter #0:
     Missing nullability on parameter `who` in method `verifyDrawable`
 MissingNullability: androidx.viewpager.widget.ViewPager.LayoutParams#LayoutParams(android.content.Context, android.util.AttributeSet) parameter #0:
diff --git a/wear/wear-input/api/api_lint.ignore b/wear/wear-input/api/api_lint.ignore
new file mode 100644
index 0000000..df1cbe7
--- /dev/null
+++ b/wear/wear-input/api/api_lint.ignore
@@ -0,0 +1,9 @@
+// Baseline format: 1.0
+NullableCollection: androidx.wear.input.RemoteInputIntentHelper#getRemoteInputsExtra(android.content.Intent):
+    Return type of method androidx.wear.input.RemoteInputIntentHelper.getRemoteInputsExtra(android.content.Intent) is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.wear.input.RemoteInputIntentHelper#getSmartReplyContextExtra(android.content.Intent):
+    Return type of method androidx.wear.input.RemoteInputIntentHelper.getSmartReplyContextExtra(android.content.Intent) is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.wear.input.RemoteInputIntentHelper.Companion#getRemoteInputsExtra(android.content.Intent):
+    Return type of method androidx.wear.input.RemoteInputIntentHelper.Companion.getRemoteInputsExtra(android.content.Intent) is a nullable collection (`java.util.List`); must be non-null
+NullableCollection: androidx.wear.input.RemoteInputIntentHelper.Companion#getSmartReplyContextExtra(android.content.Intent):
+    Return type of method androidx.wear.input.RemoteInputIntentHelper.Companion.getSmartReplyContextExtra(android.content.Intent) is a nullable collection (`java.util.List`); must be non-null
diff --git a/wear/wear-phone-interactions/api/api_lint.ignore b/wear/wear-phone-interactions/api/api_lint.ignore
new file mode 100644
index 0000000..30e9a82
--- /dev/null
+++ b/wear/wear-phone-interactions/api/api_lint.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+NullableCollection: androidx.wear.phone.interactions.notifications.BridgingConfig#getExcludedTags():
+    Return type of method androidx.wear.phone.interactions.notifications.BridgingConfig.getExcludedTags() is a nullable collection (`java.util.Set`); must be non-null
diff --git a/wear/wear-watchface-data/api/restricted_current.txt b/wear/wear-watchface-data/api/restricted_current.txt
index 5b1d928..d8b53aa 100644
--- a/wear/wear-watchface-data/api/restricted_current.txt
+++ b/wear/wear-watchface-data/api/restricted_current.txt
@@ -63,7 +63,7 @@
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class WatchFaceStyle implements android.os.Parcelable {
-    ctor public WatchFaceStyle(android.content.ComponentName component, int viewProtectionMode, int statusBarGravity, @ColorInt int accentColor, boolean showUnreadCountIndicator, boolean hideNotificationIndicator, boolean acceptsTapEvents, android.os.Bundle? compatBundle);
+    ctor public WatchFaceStyle(android.content.ComponentName component, int viewProtectionMode, int statusBarGravity, @ColorInt int accentColor, boolean showUnreadCountIndicator, boolean hideNotificationIndicator, boolean acceptsTapEvents, optional android.os.Bundle? compatBundle);
     method public int describeContents();
     method public final int getAccentColor();
     method public final boolean getAcceptsTapEvents();
diff --git a/wear/wear-watchface-editor/api/api_lint.ignore b/wear/wear-watchface-editor/api/api_lint.ignore
new file mode 100644
index 0000000..4be7757
--- /dev/null
+++ b/wear/wear-watchface-editor/api/api_lint.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+NullableCollection: androidx.wear.watchface.editor.EditorRequest#getInitialUserStyle():
+    Return type of method androidx.wear.watchface.editor.EditorRequest.getInitialUserStyle() is a nullable collection (`java.util.Map`); must be non-null
diff --git a/wear/wear-watchface-style/api/current.txt b/wear/wear-watchface-style/api/current.txt
index 02d740c..93e065c 100644
--- a/wear/wear-watchface-style/api/current.txt
+++ b/wear/wear-watchface-style/api/current.txt
@@ -74,12 +74,12 @@
   }
 
   public static final class UserStyleSetting.ComplicationsUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
-    ctor public UserStyleSetting.ComplicationsUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers, androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption defaultOption);
+    ctor public UserStyleSetting.ComplicationsUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption defaultOption);
     ctor public UserStyleSetting.ComplicationsUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers);
   }
 
   public static final class UserStyleSetting.ComplicationsUserStyleSetting.ComplicationOverlay {
-    ctor public UserStyleSetting.ComplicationsUserStyleSetting.ComplicationOverlay(int complicationId, Boolean? enabled, androidx.wear.complications.ComplicationBounds? complicationBounds);
+    ctor public UserStyleSetting.ComplicationsUserStyleSetting.ComplicationOverlay(int complicationId, optional Boolean? enabled, optional androidx.wear.complications.ComplicationBounds? complicationBounds);
     method public androidx.wear.complications.ComplicationBounds? getComplicationBounds();
     method public int getComplicationId();
     method public Boolean? isEnabled();
@@ -129,7 +129,7 @@
   }
 
   public static class UserStyleSetting.ListUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
-    ctor public UserStyleSetting.ListUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers, androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption);
+    ctor public UserStyleSetting.ListUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption);
     ctor public UserStyleSetting.ListUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers);
   }
 
diff --git a/wear/wear-watchface-style/api/public_plus_experimental_current.txt b/wear/wear-watchface-style/api/public_plus_experimental_current.txt
index f77fe24..f92f80a 100644
--- a/wear/wear-watchface-style/api/public_plus_experimental_current.txt
+++ b/wear/wear-watchface-style/api/public_plus_experimental_current.txt
@@ -76,13 +76,13 @@
   }
 
   public static final class UserStyleSetting.ComplicationsUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
-    ctor public UserStyleSetting.ComplicationsUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers, androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption defaultOption);
+    ctor public UserStyleSetting.ComplicationsUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption defaultOption);
     ctor public UserStyleSetting.ComplicationsUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.wear.watchface.style.data.ComplicationsUserStyleSettingWireFormat toWireFormat();
   }
 
   public static final class UserStyleSetting.ComplicationsUserStyleSetting.ComplicationOverlay {
-    ctor public UserStyleSetting.ComplicationsUserStyleSetting.ComplicationOverlay(int complicationId, Boolean? enabled, androidx.wear.complications.ComplicationBounds? complicationBounds);
+    ctor public UserStyleSetting.ComplicationsUserStyleSetting.ComplicationOverlay(int complicationId, optional Boolean? enabled, optional androidx.wear.complications.ComplicationBounds? complicationBounds);
     method public androidx.wear.complications.ComplicationBounds? getComplicationBounds();
     method public int getComplicationId();
     method public Boolean? isEnabled();
@@ -137,7 +137,7 @@
   }
 
   public static class UserStyleSetting.ListUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
-    ctor public UserStyleSetting.ListUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers, androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption);
+    ctor public UserStyleSetting.ListUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption);
     ctor public UserStyleSetting.ListUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.wear.watchface.style.data.ListUserStyleSettingWireFormat toWireFormat();
   }
diff --git a/wear/wear-watchface-style/api/restricted_current.txt b/wear/wear-watchface-style/api/restricted_current.txt
index ed6d59c6..a9db649 100644
--- a/wear/wear-watchface-style/api/restricted_current.txt
+++ b/wear/wear-watchface-style/api/restricted_current.txt
@@ -82,13 +82,13 @@
   }
 
   public static final class UserStyleSetting.ComplicationsUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
-    ctor public UserStyleSetting.ComplicationsUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers, androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption defaultOption);
+    ctor public UserStyleSetting.ComplicationsUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers, optional androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption defaultOption);
     ctor public UserStyleSetting.ComplicationsUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ComplicationsUserStyleSetting.ComplicationsOption> complicationConfig, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.wear.watchface.style.data.ComplicationsUserStyleSettingWireFormat toWireFormat();
   }
 
   public static final class UserStyleSetting.ComplicationsUserStyleSetting.ComplicationOverlay {
-    ctor public UserStyleSetting.ComplicationsUserStyleSetting.ComplicationOverlay(int complicationId, Boolean? enabled, androidx.wear.complications.ComplicationBounds? complicationBounds);
+    ctor public UserStyleSetting.ComplicationsUserStyleSetting.ComplicationOverlay(int complicationId, optional Boolean? enabled, optional androidx.wear.complications.ComplicationBounds? complicationBounds);
     method public androidx.wear.complications.ComplicationBounds? getComplicationBounds();
     method public int getComplicationId();
     method public Boolean? isEnabled();
@@ -143,7 +143,7 @@
   }
 
   public static class UserStyleSetting.ListUserStyleSetting extends androidx.wear.watchface.style.UserStyleSetting {
-    ctor public UserStyleSetting.ListUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers, androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption);
+    ctor public UserStyleSetting.ListUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers, optional androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption defaultOption);
     ctor public UserStyleSetting.ListUserStyleSetting(String id, CharSequence displayName, CharSequence description, android.graphics.drawable.Icon? icon, java.util.List<androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption> options, java.util.Collection<? extends androidx.wear.watchface.style.Layer> affectsLayers);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.wear.watchface.style.data.ListUserStyleSettingWireFormat toWireFormat();
   }
diff --git a/wear/wear-watchface/api/api_lint.ignore b/wear/wear-watchface/api/api_lint.ignore
index b3ca439..877fea33 100644
--- a/wear/wear-watchface/api/api_lint.ignore
+++ b/wear/wear-watchface/api/api_lint.ignore
@@ -5,3 +5,7 @@
     Symmetric method for `isHighlighted` must be named `setHighlighted`; was `setIsHighlighted`
 GetterSetterNames: androidx.wear.watchface.ObservableWatchData#setValue(T):
     Symmetric method for `hasValue` must be named `setHasValue`; was `setValue`
+
+
+NullableCollection: androidx.wear.watchface.Complication#getComplicationConfigExtras():
+    Return type of method androidx.wear.watchface.Complication.getComplicationConfigExtras() is a nullable collection (`android.os.Bundle`); must be non-null
diff --git a/wear/wear-watchface/api/current.txt b/wear/wear-watchface/api/current.txt
index 18a58f9..1e2fc7c 100644
--- a/wear/wear-watchface/api/current.txt
+++ b/wear/wear-watchface/api/current.txt
@@ -191,8 +191,8 @@
   }
 
   public abstract static class Renderer.GlesRenderer extends androidx.wear.watchface.Renderer {
-    ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis, int[] eglConfigAttribList, int[] eglSurfaceAttribList);
-    ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis, int[] eglConfigAttribList);
+    ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList);
+    ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList);
     ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis);
     method @UiThread public void onGlContextCreated();
     method @UiThread public void onGlSurfaceCreated(int width, int height);
@@ -203,7 +203,7 @@
   }
 
   public final class WatchFace {
-    ctor public WatchFace(int watchFaceType, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.Renderer renderer, androidx.wear.watchface.ComplicationsManager complicationsManager);
+    ctor public WatchFace(int watchFaceType, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.Renderer renderer, optional androidx.wear.watchface.ComplicationsManager complicationsManager);
     ctor public WatchFace(int watchFaceType, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.Renderer renderer);
     method public androidx.wear.watchface.WatchFace.LegacyWatchFaceOverlayStyle getLegacyWatchFaceStyle();
     method public Long? getOverridePreviewReferenceTimeMillis();
@@ -223,7 +223,7 @@
   }
 
   public static final class WatchFace.LegacyWatchFaceOverlayStyle {
-    ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted, @ColorInt int accentColor);
+    ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted, optional @ColorInt int accentColor);
     ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted);
     method public int getAccentColor();
     method public int getStatusBarGravity();
diff --git a/wear/wear-watchface/api/public_plus_experimental_current.txt b/wear/wear-watchface/api/public_plus_experimental_current.txt
index 18a58f9..1e2fc7c 100644
--- a/wear/wear-watchface/api/public_plus_experimental_current.txt
+++ b/wear/wear-watchface/api/public_plus_experimental_current.txt
@@ -191,8 +191,8 @@
   }
 
   public abstract static class Renderer.GlesRenderer extends androidx.wear.watchface.Renderer {
-    ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis, int[] eglConfigAttribList, int[] eglSurfaceAttribList);
-    ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis, int[] eglConfigAttribList);
+    ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList);
+    ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList);
     ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis);
     method @UiThread public void onGlContextCreated();
     method @UiThread public void onGlSurfaceCreated(int width, int height);
@@ -203,7 +203,7 @@
   }
 
   public final class WatchFace {
-    ctor public WatchFace(int watchFaceType, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.Renderer renderer, androidx.wear.watchface.ComplicationsManager complicationsManager);
+    ctor public WatchFace(int watchFaceType, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.Renderer renderer, optional androidx.wear.watchface.ComplicationsManager complicationsManager);
     ctor public WatchFace(int watchFaceType, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.Renderer renderer);
     method public androidx.wear.watchface.WatchFace.LegacyWatchFaceOverlayStyle getLegacyWatchFaceStyle();
     method public Long? getOverridePreviewReferenceTimeMillis();
@@ -223,7 +223,7 @@
   }
 
   public static final class WatchFace.LegacyWatchFaceOverlayStyle {
-    ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted, @ColorInt int accentColor);
+    ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted, optional @ColorInt int accentColor);
     ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted);
     method public int getAccentColor();
     method public int getStatusBarGravity();
diff --git a/wear/wear-watchface/api/restricted_current.txt b/wear/wear-watchface/api/restricted_current.txt
index 4678239..fc31dfe 100644
--- a/wear/wear-watchface/api/restricted_current.txt
+++ b/wear/wear-watchface/api/restricted_current.txt
@@ -221,8 +221,8 @@
   }
 
   public abstract static class Renderer.GlesRenderer extends androidx.wear.watchface.Renderer {
-    ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis, int[] eglConfigAttribList, int[] eglSurfaceAttribList);
-    ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis, int[] eglConfigAttribList);
+    ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList, optional int[] eglSurfaceAttribList);
+    ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis, optional int[] eglConfigAttribList);
     ctor public Renderer.GlesRenderer(android.view.SurfaceHolder surfaceHolder, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.WatchState watchState, @IntRange(from=0, to=10000) long interactiveDrawModeUpdateDelayMillis);
     method @UiThread public void onGlContextCreated();
     method @UiThread public void onGlSurfaceCreated(int width, int height);
@@ -233,7 +233,7 @@
   }
 
   public final class WatchFace {
-    ctor public WatchFace(int watchFaceType, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.Renderer renderer, androidx.wear.watchface.ComplicationsManager complicationsManager);
+    ctor public WatchFace(int watchFaceType, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.Renderer renderer, optional androidx.wear.watchface.ComplicationsManager complicationsManager);
     ctor public WatchFace(int watchFaceType, androidx.wear.watchface.style.UserStyleRepository userStyleRepository, androidx.wear.watchface.Renderer renderer);
     method public androidx.wear.watchface.WatchFace.LegacyWatchFaceOverlayStyle getLegacyWatchFaceStyle();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @UiThread public static kotlinx.coroutines.CompletableDeferred<androidx.wear.watchface.WatchFace.EditorDelegate> getOrCreateEditorDelegate(android.content.ComponentName componentName);
@@ -274,7 +274,7 @@
   }
 
   public static final class WatchFace.LegacyWatchFaceOverlayStyle {
-    ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted, @ColorInt int accentColor);
+    ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted, optional @ColorInt int accentColor);
     ctor public WatchFace.LegacyWatchFaceOverlayStyle(int viewProtectionMode, int statusBarGravity, boolean tapEventsAccepted);
     method public int getAccentColor();
     method public int getStatusBarGravity();
diff --git a/webkit/webkit/api/api_lint.ignore b/webkit/webkit/api/api_lint.ignore
index cc8d166..635a984 100644
--- a/webkit/webkit/api/api_lint.ignore
+++ b/webkit/webkit/api/api_lint.ignore
@@ -43,6 +43,10 @@
     androidx.webkit.WebViewAssetLoader does not declare a `isHttpAllowed()` method matching method androidx.webkit.WebViewAssetLoader.Builder.setHttpAllowed(boolean)
 
 
+NullableCollection: androidx.webkit.WebMessageCompat#getPorts():
+    Return type of method androidx.webkit.WebMessageCompat.getPorts() is a nullable collection (`androidx.webkit.WebMessagePortCompat[]`); must be non-null
+
+
 StaticFinalBuilder: androidx.webkit.TracingConfig.Builder:
     Builder must be final: androidx.webkit.TracingConfig.Builder
 
diff --git a/window/window-sidecar/api/api_lint.ignore b/window/window-sidecar/api/api_lint.ignore
index c08dec3..296bff6 100644
--- a/window/window-sidecar/api/api_lint.ignore
+++ b/window/window-sidecar/api/api_lint.ignore
@@ -7,3 +7,7 @@
     Bare field posture must be marked final, or moved behind accessors if mutable
 MutableBareField: androidx.window.sidecar.SidecarWindowLayoutInfo#displayFeatures:
     Bare field displayFeatures must be marked final, or moved behind accessors if mutable
+
+
+NullableCollection: androidx.window.sidecar.SidecarWindowLayoutInfo#displayFeatures:
+    Type of field androidx.window.sidecar.SidecarWindowLayoutInfo.displayFeatures is a nullable collection (`java.util.List`); must be non-null
diff --git a/work/workmanager-testing/api/current.ignore b/work/workmanager-testing/api/current.ignore
deleted file mode 100644
index 14a1ccc..0000000
--- a/work/workmanager-testing/api/current.ignore
+++ /dev/null
@@ -1,23 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#from(android.content.Context, androidx.work.WorkRequest):
-    Method androidx.work.testing.TestListenableWorkerBuilder.from has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<? extends androidx.work.ListenableWorker>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setForegroundUpdater(androidx.work.ForegroundUpdater):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setForegroundUpdater has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setId(java.util.UUID):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setId has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setInputData(androidx.work.Data):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setInputData has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setNetwork(android.net.Network):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setNetwork has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setProgressUpdater(androidx.work.ProgressUpdater):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setProgressUpdater has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setRunAttemptCount(int):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setRunAttemptCount has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setTags(java.util.List<java.lang.String>):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setTags has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setTriggeredContentAuthorities(java.util.List<java.lang.String>):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setTriggeredContentAuthorities has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setTriggeredContentUris(java.util.List<android.net.Uri>):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setTriggeredContentUris has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setWorkerFactory(androidx.work.WorkerFactory):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setWorkerFactory has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
diff --git a/work/workmanager-testing/api/restricted_current.ignore b/work/workmanager-testing/api/restricted_current.ignore
deleted file mode 100644
index 14a1ccc..0000000
--- a/work/workmanager-testing/api/restricted_current.ignore
+++ /dev/null
@@ -1,23 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#from(android.content.Context, androidx.work.WorkRequest):
-    Method androidx.work.testing.TestListenableWorkerBuilder.from has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<? extends androidx.work.ListenableWorker>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setForegroundUpdater(androidx.work.ForegroundUpdater):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setForegroundUpdater has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setId(java.util.UUID):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setId has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setInputData(androidx.work.Data):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setInputData has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setNetwork(android.net.Network):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setNetwork has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setProgressUpdater(androidx.work.ProgressUpdater):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setProgressUpdater has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setRunAttemptCount(int):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setRunAttemptCount has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setTags(java.util.List<java.lang.String>):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setTags has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setTriggeredContentAuthorities(java.util.List<java.lang.String>):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setTriggeredContentAuthorities has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setTriggeredContentUris(java.util.List<android.net.Uri>):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setTriggeredContentUris has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
-ChangedType: androidx.work.testing.TestListenableWorkerBuilder#setWorkerFactory(androidx.work.WorkerFactory):
-    Method androidx.work.testing.TestListenableWorkerBuilder.setWorkerFactory has changed return type from androidx.work.testing.TestListenableWorkerBuilder to androidx.work.testing.TestListenableWorkerBuilder<W>
diff --git a/work/workmanager/api/api_lint.ignore b/work/workmanager/api/api_lint.ignore
index 9622774..a1d408b 100644
--- a/work/workmanager/api/api_lint.ignore
+++ b/work/workmanager/api/api_lint.ignore
@@ -99,5 +99,9 @@
     Should avoid odd sized primitives; use `int` instead of `byte` in parameter value in androidx.work.Data.Builder.putByte(String key, byte value)
 
 
+NullableCollection: androidx.work.Data#getStringArray(String):
+    Return type of method androidx.work.Data.getStringArray(String) is a nullable collection (`java.lang.String[]`); must be non-null
+
+
 StaticFinalBuilder: androidx.work.WorkRequest.Builder:
     Builder must be final: androidx.work.WorkRequest.Builder
