Rewrite ViewModelProvider to kotlin

Test: Existing tests pass
Relnote: """*Source-breaking change* ViewModelProvider was written to Kotlin.
    `ViewModelProvider.Factory.create` method doesn't allow nullable
    generics anymore.
    """
Change-Id: I9b9f6617dc9377bc99a954eb096194b1240c98fe
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/interoperability/InteropArchitecture.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/interoperability/InteropArchitecture.kt
index 566c2ab..67043c8 100644
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/interoperability/InteropArchitecture.kt
+++ b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/interoperability/InteropArchitecture.kt
@@ -96,7 +96,7 @@
 
     class GreetingViewModelFactory(private val userId: String) : ViewModelProvider.Factory {
         @Suppress("UNCHECKED_CAST")
-        override fun <T : ViewModel?> create(modelClass: Class<T>): T {
+        override fun <T : ViewModel> create(modelClass: Class<T>): T {
             return GreetingViewModel(userId) as T
         }
     }
@@ -211,7 +211,7 @@
 }
 private class GreetingViewModelFactory(private val userId: String) : ViewModelProvider.Factory {
     @Suppress("UNCHECKED_CAST")
-    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
+    override fun <T : ViewModel> create(modelClass: Class<T>): T {
         return GreetingViewModel(userId) as T
     }
 }
diff --git a/fragment/fragment-testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioViewModelTest.kt b/fragment/fragment-testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioViewModelTest.kt
index 12e0b2f..d88bcba 100644
--- a/fragment/fragment-testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioViewModelTest.kt
+++ b/fragment/fragment-testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioViewModelTest.kt
@@ -44,7 +44,7 @@
         `when`(mockViewModel.getUserName()).thenReturn(fakeUserName)
         val viewModelFactory = object : ViewModelProvider.NewInstanceFactory() {
             @Suppress("UNCHECKED_CAST")
-            override fun <T : ViewModel?> create(modelClass: Class<T>): T {
+            override fun <T : ViewModel> create(modelClass: Class<T>): T {
                 return when (modelClass) {
                     InjectedViewModel::class.java -> mockViewModel as T
                     else -> super.create(modelClass)
diff --git a/fragment/fragment-testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.kt b/fragment/fragment-testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.kt
index 8e799df..265acc6 100644
--- a/fragment/fragment-testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.kt
+++ b/fragment/fragment-testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.kt
@@ -293,7 +293,7 @@
             internal val FACTORY: ViewModelProvider.Factory =
                 object : ViewModelProvider.Factory {
                     @Suppress("UNCHECKED_CAST")
-                    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
+                    override fun <T : ViewModel> create(modelClass: Class<T>): T {
                         val viewModel =
                             FragmentFactoryHolderViewModel()
                         return viewModel as T
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleOwnerTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleOwnerTest.kt
index 67ae872..875b198 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleOwnerTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleOwnerTest.kt
@@ -96,7 +96,7 @@
 
     class FakeViewModelProviderFactory : ViewModelProvider.Factory {
         private var createCalled: Boolean = false
-        override fun <T : ViewModel?> create(modelClass: Class<T>): T {
+        override fun <T : ViewModel> create(modelClass: Class<T>): T {
             require(modelClass == TestViewModel::class.java)
             createCalled = true
             @Suppress("UNCHECKED_CAST")
diff --git a/lifecycle/lifecycle-extensions/src/androidTest/java/androidx/lifecycle/ViewModelProvidersFragmentTest.kt b/lifecycle/lifecycle-extensions/src/androidTest/java/androidx/lifecycle/ViewModelProvidersFragmentTest.kt
index 9cfd0c9..71f909d 100644
--- a/lifecycle/lifecycle-extensions/src/androidTest/java/androidx/lifecycle/ViewModelProvidersFragmentTest.kt
+++ b/lifecycle/lifecycle-extensions/src/androidTest/java/androidx/lifecycle/ViewModelProvidersFragmentTest.kt
@@ -84,7 +84,7 @@
     class CountingFactory : ViewModelProvider.NewInstanceFactory() {
         var count = 0
 
-        override fun <T : ViewModel?> create(modelClass: Class<T>): T {
+        override fun <T : ViewModel> create(modelClass: Class<T>): T {
             count++
             return super.create(modelClass)
         }
diff --git a/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelTest.kt b/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelTest.kt
index e4a868d..5836e95 100644
--- a/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelTest.kt
+++ b/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelTest.kt
@@ -202,7 +202,7 @@
 
 private class FakeViewModelProviderFactory : ViewModelProvider.Factory {
     var createCalled = false
-    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
+    override fun <T : ViewModel> create(modelClass: Class<T>): T {
         require(modelClass == TestViewModel::class.java)
         createCalled = true
         @Suppress("UNCHECKED_CAST")
diff --git a/lifecycle/lifecycle-viewmodel-ktx/src/main/java/androidx/lifecycle/ViewModelProvider.kt b/lifecycle/lifecycle-viewmodel-ktx/src/main/java/androidx/lifecycle/ViewModelProviderExtensions.kt
similarity index 97%
rename from lifecycle/lifecycle-viewmodel-ktx/src/main/java/androidx/lifecycle/ViewModelProvider.kt
rename to lifecycle/lifecycle-viewmodel-ktx/src/main/java/androidx/lifecycle/ViewModelProviderExtensions.kt
index 444831b..e87e103 100644
--- a/lifecycle/lifecycle-viewmodel-ktx/src/main/java/androidx/lifecycle/ViewModelProvider.kt
+++ b/lifecycle/lifecycle-viewmodel-ktx/src/main/java/androidx/lifecycle/ViewModelProviderExtensions.kt
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+@file:JvmName("ViewModelProviderKt")
 package androidx.lifecycle
 
 import androidx.annotation.MainThread
@@ -60,4 +61,4 @@
         }
 
     override fun isInitialized(): Boolean = cached != null
-}
\ No newline at end of file
+}
diff --git a/lifecycle/lifecycle-viewmodel-ktx/src/test/java/androidx/lifecycle/ViewModelLazyTest.kt b/lifecycle/lifecycle-viewmodel-ktx/src/test/java/androidx/lifecycle/ViewModelLazyTest.kt
index 44d4d0b..9a9b016 100644
--- a/lifecycle/lifecycle-viewmodel-ktx/src/test/java/androidx/lifecycle/ViewModelLazyTest.kt
+++ b/lifecycle/lifecycle-viewmodel-ktx/src/test/java/androidx/lifecycle/ViewModelLazyTest.kt
@@ -37,6 +37,7 @@
 
     @Suppress("UNCHECKED_CAST")
     class TestFactory : ViewModelProvider.Factory {
-        override fun <T : ViewModel?> create(modelClass: Class<T>): T = TestVM("spb") as T
+
+        override fun <T : ViewModel> create(modelClass: Class<T>): T = TestVM("spb") as T
     }
 }
\ No newline at end of file
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/api/restricted_current.ignore b/lifecycle/lifecycle-viewmodel-savedstate/api/restricted_current.ignore
new file mode 100644
index 0000000..f85d9e1
--- /dev/null
+++ b/lifecycle/lifecycle-viewmodel-savedstate/api/restricted_current.ignore
@@ -0,0 +1,9 @@
+// Baseline format: 1.0
+RemovedInterface: androidx.lifecycle.AbstractSavedStateViewModelFactory:
+    Class androidx.lifecycle.AbstractSavedStateViewModelFactory no longer implements androidx.lifecycle.ViewModelProvider.Factory
+RemovedInterface: androidx.lifecycle.SavedStateViewModelFactory:
+    Class androidx.lifecycle.SavedStateViewModelFactory no longer implements androidx.lifecycle.ViewModelProvider.Factory
+
+
+RemovedMethod: androidx.lifecycle.SavedStateViewModelFactory#create(Class<T>):
+    Removed method androidx.lifecycle.SavedStateViewModelFactory.create(Class<T>)
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/api/restricted_current.txt b/lifecycle/lifecycle-viewmodel-savedstate/api/restricted_current.txt
index 0d02bcb..669dd6e 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/api/restricted_current.txt
+++ b/lifecycle/lifecycle-viewmodel-savedstate/api/restricted_current.txt
@@ -1,7 +1,7 @@
 // Signature format: 4.0
 package androidx.lifecycle {
 
-  public abstract class AbstractSavedStateViewModelFactory implements androidx.lifecycle.ViewModelProvider.Factory {
+  public abstract class AbstractSavedStateViewModelFactory extends androidx.lifecycle.ViewModelProvider.KeyedFactory {
     ctor public AbstractSavedStateViewModelFactory(androidx.savedstate.SavedStateRegistryOwner, android.os.Bundle?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final <T extends androidx.lifecycle.ViewModel> T create(String, Class<T!>);
     method public final <T extends androidx.lifecycle.ViewModel> T create(Class<T!>);
@@ -22,11 +22,10 @@
     method @MainThread public void setSavedStateProvider(String, androidx.savedstate.SavedStateRegistry.SavedStateProvider);
   }
 
-  public final class SavedStateViewModelFactory implements androidx.lifecycle.ViewModelProvider.Factory {
+  public final class SavedStateViewModelFactory extends androidx.lifecycle.ViewModelProvider.KeyedFactory {
     ctor public SavedStateViewModelFactory(android.app.Application?, androidx.savedstate.SavedStateRegistryOwner);
     ctor public SavedStateViewModelFactory(android.app.Application?, androidx.savedstate.SavedStateRegistryOwner, android.os.Bundle?);
     method public <T extends androidx.lifecycle.ViewModel> T create(String, Class<T!>);
-    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T!>);
   }
 
 }
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/SavedStateFactoryTest.kt b/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/SavedStateFactoryTest.kt
index 8d91832..ee5f16f 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/SavedStateFactoryTest.kt
+++ b/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/SavedStateFactoryTest.kt
@@ -82,7 +82,7 @@
         val savedStateVMFactory = object : AbstractSavedStateViewModelFactory(
             activity, null
         ) {
-            override fun <T : ViewModel?> create(
+            override fun <T : ViewModel> create(
                 key: String,
                 modelClass: Class<T>,
                 handle: SavedStateHandle
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/ViewModelsWithStateTest.kt b/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/ViewModelsWithStateTest.kt
index a05ae3d..bb6605f 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/ViewModelsWithStateTest.kt
+++ b/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/ViewModelsWithStateTest.kt
@@ -153,7 +153,7 @@
             SavedStateViewModelFactory(activity.application, savedStateOwner) as Factory
         } else {
             object : AbstractSavedStateViewModelFactory(savedStateOwner, null) {
-                override fun <T : ViewModel?> create(
+                override fun <T : ViewModel> create(
                     key: String,
                     modelClass: Class<T>,
                     handle: SavedStateHandle
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateViewModelFactory.java b/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateViewModelFactory.java
index 4eccdc3..d1438f9 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateViewModelFactory.java
+++ b/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateViewModelFactory.java
@@ -98,8 +98,12 @@
     protected abstract <T extends ViewModel> T create(@NonNull String key,
             @NonNull Class<T> modelClass, @NonNull SavedStateHandle handle);
 
+    /**
+     * @hide
+     */
     @Override
-    void onRequery(@NonNull ViewModel viewModel) {
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public void onRequery(@NonNull ViewModel viewModel) {
         attachHandleIfNeeded(viewModel, mSavedStateRegistry, mLifecycle);
     }
 }
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateViewModelFactory.java b/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateViewModelFactory.java
index 37fd9e9..7dc7b0d 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateViewModelFactory.java
+++ b/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateViewModelFactory.java
@@ -25,6 +25,7 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
 import androidx.savedstate.SavedStateRegistry;
 import androidx.savedstate.SavedStateRegistryOwner;
 
@@ -162,8 +163,12 @@
         return null;
     }
 
+    /**
+     * @hide
+     */
     @Override
-    void onRequery(@NonNull ViewModel viewModel) {
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public void onRequery(@NonNull ViewModel viewModel) {
         attachHandleIfNeeded(viewModel, mSavedStateRegistry, mLifecycle);
     }
 }
diff --git a/lifecycle/lifecycle-viewmodel/api/api_lint.ignore b/lifecycle/lifecycle-viewmodel/api/api_lint.ignore
index 8582fa1..8b1db86c 100644
--- a/lifecycle/lifecycle-viewmodel/api/api_lint.ignore
+++ b/lifecycle/lifecycle-viewmodel/api/api_lint.ignore
@@ -1,9 +1,9 @@
 // Baseline format: 1.0
-KotlinOperator: androidx.lifecycle.ViewModelProvider#get(Class<T>):
-    Method can be invoked with an indexing operator from Kotlin: `get` (this is usually desirable; just make sure it makes sense for this type of object)
-KotlinOperator: androidx.lifecycle.ViewModelProvider#get(String, Class<T>):
-    Method can be invoked with an indexing operator from Kotlin: `get` (this is usually desirable; just make sure it makes sense for this type of object)
+MissingJvmstatic: androidx.lifecycle.ViewModelProvider.NewInstanceFactory#instance:
+    Companion object constants like instance should be using @JvmField, not @JvmStatic; see https://developer.android.com/kotlin/interop#companion_constants
 
 
 SingletonConstructor: androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory#AndroidViewModelFactory(android.app.Application):
     Singleton classes should use `getInstance()` methods: `AndroidViewModelFactory`
+SingletonConstructor: androidx.lifecycle.ViewModelProvider.NewInstanceFactory#NewInstanceFactory():
+    Singleton classes should use `getInstance()` methods: `NewInstanceFactory`
diff --git a/lifecycle/lifecycle-viewmodel/api/current.txt b/lifecycle/lifecycle-viewmodel/api/current.txt
index 1a5b37e..2668991 100644
--- a/lifecycle/lifecycle-viewmodel/api/current.txt
+++ b/lifecycle/lifecycle-viewmodel/api/current.txt
@@ -16,25 +16,34 @@
   }
 
   public class ViewModelProvider {
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner);
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner, androidx.lifecycle.ViewModelProvider.Factory);
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore, androidx.lifecycle.ViewModelProvider.Factory);
-    method @MainThread public <T extends androidx.lifecycle.ViewModel> T get(Class<T!>);
-    method @MainThread public <T extends androidx.lifecycle.ViewModel> T get(String, Class<T!>);
+    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore store, androidx.lifecycle.ViewModelProvider.Factory factory);
+    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner owner);
+    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner owner, androidx.lifecycle.ViewModelProvider.Factory factory);
+    method @MainThread public operator <T extends androidx.lifecycle.ViewModel> T get(Class<T> modelClass);
+    method @MainThread public operator <T extends androidx.lifecycle.ViewModel> T get(String key, Class<T> modelClass);
   }
 
   public static class ViewModelProvider.AndroidViewModelFactory extends androidx.lifecycle.ViewModelProvider.NewInstanceFactory {
-    ctor public ViewModelProvider.AndroidViewModelFactory(android.app.Application);
-    method public static androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory getInstance(android.app.Application);
+    ctor public ViewModelProvider.AndroidViewModelFactory(android.app.Application application);
+    method public static final androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory getInstance(android.app.Application application);
+    field public static final androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion Companion;
+  }
+
+  public static final class ViewModelProvider.AndroidViewModelFactory.Companion {
+    method public androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory getInstance(android.app.Application application);
   }
 
   public static interface ViewModelProvider.Factory {
-    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T!>);
+    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T> modelClass);
   }
 
   public static class ViewModelProvider.NewInstanceFactory implements androidx.lifecycle.ViewModelProvider.Factory {
     ctor public ViewModelProvider.NewInstanceFactory();
-    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T!>);
+    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T> modelClass);
+    field public static final androidx.lifecycle.ViewModelProvider.NewInstanceFactory.Companion Companion;
+  }
+
+  public static final class ViewModelProvider.NewInstanceFactory.Companion {
   }
 
   public class ViewModelStore {
diff --git a/lifecycle/lifecycle-viewmodel/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-viewmodel/api/public_plus_experimental_current.txt
index 1a5b37e..2668991 100644
--- a/lifecycle/lifecycle-viewmodel/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-viewmodel/api/public_plus_experimental_current.txt
@@ -16,25 +16,34 @@
   }
 
   public class ViewModelProvider {
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner);
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner, androidx.lifecycle.ViewModelProvider.Factory);
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore, androidx.lifecycle.ViewModelProvider.Factory);
-    method @MainThread public <T extends androidx.lifecycle.ViewModel> T get(Class<T!>);
-    method @MainThread public <T extends androidx.lifecycle.ViewModel> T get(String, Class<T!>);
+    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore store, androidx.lifecycle.ViewModelProvider.Factory factory);
+    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner owner);
+    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner owner, androidx.lifecycle.ViewModelProvider.Factory factory);
+    method @MainThread public operator <T extends androidx.lifecycle.ViewModel> T get(Class<T> modelClass);
+    method @MainThread public operator <T extends androidx.lifecycle.ViewModel> T get(String key, Class<T> modelClass);
   }
 
   public static class ViewModelProvider.AndroidViewModelFactory extends androidx.lifecycle.ViewModelProvider.NewInstanceFactory {
-    ctor public ViewModelProvider.AndroidViewModelFactory(android.app.Application);
-    method public static androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory getInstance(android.app.Application);
+    ctor public ViewModelProvider.AndroidViewModelFactory(android.app.Application application);
+    method public static final androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory getInstance(android.app.Application application);
+    field public static final androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion Companion;
+  }
+
+  public static final class ViewModelProvider.AndroidViewModelFactory.Companion {
+    method public androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory getInstance(android.app.Application application);
   }
 
   public static interface ViewModelProvider.Factory {
-    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T!>);
+    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T> modelClass);
   }
 
   public static class ViewModelProvider.NewInstanceFactory implements androidx.lifecycle.ViewModelProvider.Factory {
     ctor public ViewModelProvider.NewInstanceFactory();
-    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T!>);
+    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T> modelClass);
+    field public static final androidx.lifecycle.ViewModelProvider.NewInstanceFactory.Companion Companion;
+  }
+
+  public static final class ViewModelProvider.NewInstanceFactory.Companion {
   }
 
   public class ViewModelStore {
diff --git a/lifecycle/lifecycle-viewmodel/api/restricted_current.txt b/lifecycle/lifecycle-viewmodel/api/restricted_current.txt
index 1a5b37e..27904ad 100644
--- a/lifecycle/lifecycle-viewmodel/api/restricted_current.txt
+++ b/lifecycle/lifecycle-viewmodel/api/restricted_current.txt
@@ -16,25 +16,46 @@
   }
 
   public class ViewModelProvider {
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner);
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner, androidx.lifecycle.ViewModelProvider.Factory);
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore, androidx.lifecycle.ViewModelProvider.Factory);
-    method @MainThread public <T extends androidx.lifecycle.ViewModel> T get(Class<T!>);
-    method @MainThread public <T extends androidx.lifecycle.ViewModel> T get(String, Class<T!>);
+    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore store, androidx.lifecycle.ViewModelProvider.Factory factory);
+    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner owner);
+    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner owner, androidx.lifecycle.ViewModelProvider.Factory factory);
+    method @MainThread public operator <T extends androidx.lifecycle.ViewModel> T get(Class<T> modelClass);
+    method @MainThread public operator <T extends androidx.lifecycle.ViewModel> T get(String key, Class<T> modelClass);
   }
 
   public static class ViewModelProvider.AndroidViewModelFactory extends androidx.lifecycle.ViewModelProvider.NewInstanceFactory {
-    ctor public ViewModelProvider.AndroidViewModelFactory(android.app.Application);
-    method public static androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory getInstance(android.app.Application);
+    ctor public ViewModelProvider.AndroidViewModelFactory(android.app.Application application);
+    method public static final androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory getInstance(android.app.Application application);
+    field public static final androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion Companion;
+  }
+
+  public static final class ViewModelProvider.AndroidViewModelFactory.Companion {
+    method public androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory getInstance(android.app.Application application);
   }
 
   public static interface ViewModelProvider.Factory {
-    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T!>);
+    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T> modelClass);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract static class ViewModelProvider.KeyedFactory extends androidx.lifecycle.ViewModelProvider.OnRequeryFactory implements androidx.lifecycle.ViewModelProvider.Factory {
+    method public abstract <T extends androidx.lifecycle.ViewModel> T create(String key, Class<T> modelClass);
+    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T> modelClass);
   }
 
   public static class ViewModelProvider.NewInstanceFactory implements androidx.lifecycle.ViewModelProvider.Factory {
     ctor public ViewModelProvider.NewInstanceFactory();
-    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T!>);
+    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T> modelClass);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.lifecycle.ViewModelProvider.NewInstanceFactory getInstance();
+    field public static final androidx.lifecycle.ViewModelProvider.NewInstanceFactory.Companion Companion;
+  }
+
+  public static final class ViewModelProvider.NewInstanceFactory.Companion {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.lifecycle.ViewModelProvider.NewInstanceFactory getInstance();
+    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final androidx.lifecycle.ViewModelProvider.NewInstanceFactory instance;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static class ViewModelProvider.OnRequeryFactory {
+    method public void onRequery(androidx.lifecycle.ViewModel viewModel);
   }
 
   public class ViewModelStore {
diff --git a/lifecycle/lifecycle-viewmodel/build.gradle b/lifecycle/lifecycle-viewmodel/build.gradle
index 50abd68..ca85890 100644
--- a/lifecycle/lifecycle-viewmodel/build.gradle
+++ b/lifecycle/lifecycle-viewmodel/build.gradle
@@ -32,7 +32,7 @@
 
 dependencies {
     api("androidx.annotation:annotation:1.1.0")
-
+    api(libs.kotlinStdlib)
     testImplementation(libs.junit)
     testImplementation(libs.mockitoCore)
 
diff --git a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/HasDefaultViewModelProviderFactory.java b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/HasDefaultViewModelProviderFactory.java
index 1db6658..dea6695 100644
--- a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/HasDefaultViewModelProviderFactory.java
+++ b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/HasDefaultViewModelProviderFactory.java
@@ -20,14 +20,14 @@
 
 /**
  * Interface that marks a {@link ViewModelStoreOwner} as having a default
- * {@link ViewModelProvider.Factory} for use with
- * {@link ViewModelProvider#ViewModelProvider(ViewModelStoreOwner)}.
+ * {@link androidx.lifecycle.ViewModelProvider.Factory} for use with
+ * {@link androidx.lifecycle.ViewModelProvider#ViewModelProvider(ViewModelStoreOwner)}.
  */
 public interface HasDefaultViewModelProviderFactory {
     /**
-     * Returns the default {@link ViewModelProvider.Factory} that should be
+     * Returns the default {@link androidx.lifecycle.ViewModelProvider.Factory} that should be
      * used when no custom {@code Factory} is provided to the
-     * {@link ViewModelProvider} constructors.
+     * {@link androidx.lifecycle.ViewModelProvider} constructors.
      *
      * @return a {@code ViewModelProvider.Factory}
      */
diff --git a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
index cb24a1a..9911c2a 100644
--- a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
+++ b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
@@ -13,269 +13,253 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package androidx.lifecycle
 
-package androidx.lifecycle;
-
-import android.app.Application;
-
-import androidx.annotation.MainThread;
-import androidx.annotation.NonNull;
-
-import java.lang.reflect.InvocationTargetException;
+import android.app.Application
+import androidx.annotation.MainThread
+import androidx.annotation.RestrictTo
+import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.DEFAULT_KEY
+import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.defaultFactory
+import java.lang.IllegalArgumentException
+import java.lang.RuntimeException
+import java.lang.UnsupportedOperationException
+import java.lang.reflect.InvocationTargetException
 
 /**
- * An utility class that provides {@code ViewModels} for a scope.
- * <p>
- * Default {@code ViewModelProvider} for an {@code Activity} or a {@code Fragment} can be obtained
- * by passing it to {@link ViewModelProvider#ViewModelProvider(ViewModelStoreOwner)}.
+ * An utility class that provides `ViewModels` for a scope.
+ *
+ * Default `ViewModelProvider` for an `Activity` or a `Fragment` can be obtained
+ * by passing it to the constructor: `ViewModelProvider(myFragment)`
+ *
+ * @param store  `ViewModelStore` where ViewModels will be stored.
+ * @param factory factory a `Factory` which will be used to instantiate
+ * new `ViewModels`
  */
-@SuppressWarnings("WeakerAccess")
-public class ViewModelProvider {
-
-    private static final String DEFAULT_KEY =
-            "androidx.lifecycle.ViewModelProvider.DefaultKey";
-
+public open class ViewModelProvider(
+    private val store: ViewModelStore,
+    private val factory: Factory
+) {
     /**
-     * Implementations of {@code Factory} interface are responsible to instantiate ViewModels.
+     * Implementations of `Factory` interface are responsible to instantiate ViewModels.
      */
     public interface Factory {
         /**
-         * Creates a new instance of the given {@code Class}.
-         * <p>
+         * Creates a new instance of the given `Class`.
          *
-         * @param modelClass a {@code Class} whose instance is requested
-         * @param <T>        The type parameter for the ViewModel.
+         * @param modelClass a `Class` whose instance is requested
          * @return a newly created ViewModel
          */
-        @NonNull
-        <T extends ViewModel> T create(@NonNull Class<T> modelClass);
-    }
-
-    static class OnRequeryFactory {
-        void onRequery(@NonNull ViewModel viewModel) {
-        }
+        public fun <T : ViewModel> create(modelClass: Class<T>): T
     }
 
     /**
-     * Implementations of {@code Factory} interface are responsible to instantiate ViewModels.
-     * <p>
-     * This is more advanced version of {@link Factory} that receives a key specified for requested
-     * {@link ViewModel}.
+     * @suppress
      */
-    abstract static class KeyedFactory extends OnRequeryFactory implements Factory {
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public open class OnRequeryFactory {
+        public open fun onRequery(viewModel: ViewModel) {}
+    }
+
+    /**
+     * Implementations of `Factory` interface are responsible to instantiate ViewModels.
+     *
+     *
+     * This is more advanced version of [Factory] that receives a key specified for requested
+     * [ViewModel].
+     *
+     * @suppress
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public abstract class KeyedFactory : OnRequeryFactory(), Factory {
         /**
-         * Creates a new instance of the given {@code Class}.
+         * Creates a new instance of the given `Class`.
          *
          * @param key a key associated with the requested ViewModel
-         * @param modelClass a {@code Class} whose instance is requested
-         * @param <T>        The type parameter for the ViewModel.
+         * @param modelClass a `Class` whose instance is requested
          * @return a newly created ViewModel
          */
-        @NonNull
-        public abstract <T extends ViewModel> T create(@NonNull String key,
-                @NonNull Class<T> modelClass);
+        public abstract fun <T : ViewModel> create(
+            key: String,
+            modelClass: Class<T>
+        ): T
 
-        @NonNull
-        @Override
-        public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
-            throw new UnsupportedOperationException("create(String, Class<?>) must be called on "
-                    + "implementaions of KeyedFactory");
+        override fun <T : ViewModel> create(modelClass: Class<T>): T {
+            throw UnsupportedOperationException(
+                "create(String, Class<?>) must be called on implementations of KeyedFactory"
+            )
         }
     }
 
-    private final Factory mFactory;
-    private final ViewModelStore mViewModelStore;
-
     /**
-     * Creates {@code ViewModelProvider}. This will create {@code ViewModels}
-     * and retain them in a store of the given {@code ViewModelStoreOwner}.
-     * <p>
+     * Creates `ViewModelProvider`. This will create `ViewModels`
+     * and retain them in a store of the given `ViewModelStoreOwner`.
+     *
+     *
      * This method will use the
-     * {@link HasDefaultViewModelProviderFactory#getDefaultViewModelProviderFactory() default factory}
-     * if the owner implements {@link HasDefaultViewModelProviderFactory}. Otherwise, a
-     * {@link NewInstanceFactory} will be used.
+     * [default factory][HasDefaultViewModelProviderFactory.getDefaultViewModelProviderFactory]
+     * if the owner implements [HasDefaultViewModelProviderFactory]. Otherwise, a
+     * [NewInstanceFactory] will be used.
      */
-    public ViewModelProvider(@NonNull ViewModelStoreOwner owner) {
-        this(owner.getViewModelStore(), owner instanceof HasDefaultViewModelProviderFactory
-                ? ((HasDefaultViewModelProviderFactory) owner).getDefaultViewModelProviderFactory()
-                : NewInstanceFactory.getInstance());
-    }
+    public constructor(
+        owner: ViewModelStoreOwner
+    ) : this(owner.viewModelStore, defaultFactory(owner))
 
     /**
-     * Creates {@code ViewModelProvider}, which will create {@code ViewModels} via the given
-     * {@code Factory} and retain them in a store of the given {@code ViewModelStoreOwner}.
+     * Creates `ViewModelProvider`, which will create `ViewModels` via the given
+     * `Factory` and retain them in a store of the given `ViewModelStoreOwner`.
      *
-     * @param owner   a {@code ViewModelStoreOwner} whose {@link ViewModelStore} will be used to
-     *                retain {@code ViewModels}
-     * @param factory a {@code Factory} which will be used to instantiate
-     *                new {@code ViewModels}
+     * @param owner   a `ViewModelStoreOwner` whose [ViewModelStore] will be used to
+     * retain `ViewModels`
+     * @param factory a `Factory` which will be used to instantiate
+     * new `ViewModels`
      */
-    public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull Factory factory) {
-        this(owner.getViewModelStore(), factory);
-    }
-
-    /**
-     * Creates {@code ViewModelProvider}, which will create {@code ViewModels} via the given
-     * {@code Factory} and retain them in the given {@code store}.
-     *
-     * @param store   {@code ViewModelStore} where ViewModels will be stored.
-     * @param factory factory a {@code Factory} which will be used to instantiate
-     *                new {@code ViewModels}
-     */
-    public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) {
-        mFactory = factory;
-        mViewModelStore = store;
-    }
+    public constructor(owner: ViewModelStoreOwner, factory: Factory) : this(
+        owner.viewModelStore,
+        factory
+    )
 
     /**
      * Returns an existing ViewModel or creates a new one in the scope (usually, a fragment or
-     * an activity), associated with this {@code ViewModelProvider}.
-     * <p>
+     * an activity), associated with this `ViewModelProvider`.
+     *
+     *
      * The created ViewModel is associated with the given scope and will be retained
      * as long as the scope is alive (e.g. if it is an activity, until it is
      * finished or process is killed).
      *
      * @param modelClass The class of the ViewModel to create an instance of it if it is not
-     *                   present.
-     * @param <T>        The type parameter for the ViewModel.
-     * @return A ViewModel that is an instance of the given type {@code T}.
+     * present.
+     * @return A ViewModel that is an instance of the given type `T`.
+     * @throws IllegalArgumentException if the given [modelClass] is local or anonymous class.
      */
-    @NonNull
     @MainThread
-    public <T extends ViewModel> T get(@NonNull Class<T> modelClass) {
-        String canonicalName = modelClass.getCanonicalName();
-        if (canonicalName == null) {
-            throw new IllegalArgumentException("Local and anonymous classes can not be ViewModels");
-        }
-        return get(DEFAULT_KEY + ":" + canonicalName, modelClass);
+    public open operator fun <T : ViewModel> get(modelClass: Class<T>): T {
+        val canonicalName = modelClass.canonicalName
+            ?: throw IllegalArgumentException("Local and anonymous classes can not be ViewModels")
+        return get("$DEFAULT_KEY:$canonicalName", modelClass)
     }
 
     /**
      * Returns an existing ViewModel or creates a new one in the scope (usually, a fragment or
-     * an activity), associated with this {@code ViewModelProvider}.
-     * <p>
+     * an activity), associated with this `ViewModelProvider`.
+     *
      * The created ViewModel is associated with the given scope and will be retained
      * as long as the scope is alive (e.g. if it is an activity, until it is
      * finished or process is killed).
      *
      * @param key        The key to use to identify the ViewModel.
      * @param modelClass The class of the ViewModel to create an instance of it if it is not
-     *                   present.
-     * @param <T>        The type parameter for the ViewModel.
-     * @return A ViewModel that is an instance of the given type {@code T}.
+     * present.
+     * @return A ViewModel that is an instance of the given type `T`.
      */
-    @SuppressWarnings("unchecked")
-    @NonNull
+    @Suppress("UNCHECKED_CAST")
     @MainThread
-    public <T extends ViewModel> T get(@NonNull String key, @NonNull Class<T> modelClass) {
-        ViewModel viewModel = mViewModelStore.get(key);
-
+    public open operator fun <T : ViewModel> get(key: String, modelClass: Class<T>): T {
+        var viewModel = store[key]
         if (modelClass.isInstance(viewModel)) {
-            if (mFactory instanceof OnRequeryFactory) {
-                ((OnRequeryFactory) mFactory).onRequery(viewModel);
-            }
-            return (T) viewModel;
+            (factory as? OnRequeryFactory)?.onRequery(viewModel)
+            return viewModel as T
         } else {
-            //noinspection StatementWithEmptyBody
+            @Suppress("ControlFlowWithEmptyBody")
             if (viewModel != null) {
                 // TODO: log a warning.
             }
         }
-        if (mFactory instanceof KeyedFactory) {
-            viewModel = ((KeyedFactory) mFactory).create(key, modelClass);
+        viewModel = if (factory is KeyedFactory) {
+            factory.create(key, modelClass)
         } else {
-            viewModel = mFactory.create(modelClass);
+            factory.create(modelClass)
         }
-        mViewModelStore.put(key, viewModel);
-        return (T) viewModel;
+        store.put(key, viewModel)
+        return viewModel
     }
 
     /**
      * Simple factory, which calls empty constructor on the give class.
      */
-    public static class NewInstanceFactory implements Factory {
-
-        private static NewInstanceFactory sInstance;
-
-        /**
-         * Retrieve a singleton instance of NewInstanceFactory.
-         *
-         * @return A valid {@link NewInstanceFactory}
-         */
-        @NonNull
-        static NewInstanceFactory getInstance() {
-            if (sInstance == null) {
-                sInstance = new NewInstanceFactory();
+    // actually there is getInstance()
+    @Suppress("SingletonConstructor")
+    public open class NewInstanceFactory : Factory {
+        @Suppress("DocumentExceptions")
+        override fun <T : ViewModel> create(modelClass: Class<T>): T {
+            return try {
+                modelClass.newInstance()
+            } catch (e: InstantiationException) {
+                throw RuntimeException("Cannot create an instance of $modelClass", e)
+            } catch (e: IllegalAccessException) {
+                throw RuntimeException("Cannot create an instance of $modelClass", e)
             }
-            return sInstance;
         }
 
-        @SuppressWarnings("ClassNewInstance")
-        @NonNull
-        @Override
-        public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
-            //noinspection TryWithIdenticalCatches
-            try {
-                return modelClass.newInstance();
-            } catch (InstantiationException e) {
-                throw new RuntimeException("Cannot create an instance of " + modelClass, e);
-            } catch (IllegalAccessException e) {
-                throw new RuntimeException("Cannot create an instance of " + modelClass, e);
-            }
+        public companion object {
+            private var sInstance: NewInstanceFactory? = null
+
+            /**
+             * @suppress
+             * Retrieve a singleton instance of NewInstanceFactory.
+             *
+             * @return A valid [NewInstanceFactory]
+             */
+            @JvmStatic
+            public val instance: NewInstanceFactory
+                @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+                get() {
+                    if (sInstance == null) {
+                        sInstance = NewInstanceFactory()
+                    }
+                    return sInstance!!
+                }
         }
     }
 
     /**
-     * {@link Factory} which may create {@link AndroidViewModel} and
-     * {@link ViewModel}, which have an empty constructor.
+     * [Factory] which may create [AndroidViewModel] and
+     * [ViewModel], which have an empty constructor.
+     *
+     * @param application an application to pass in [AndroidViewModel]
      */
-    public static class AndroidViewModelFactory extends ViewModelProvider.NewInstanceFactory {
-
-        private static AndroidViewModelFactory sInstance;
-
-        /**
-         * Retrieve a singleton instance of AndroidViewModelFactory.
-         *
-         * @param application an application to pass in {@link AndroidViewModel}
-         * @return A valid {@link AndroidViewModelFactory}
-         */
-        @NonNull
-        public static AndroidViewModelFactory getInstance(@NonNull Application application) {
-            if (sInstance == null) {
-                sInstance = new AndroidViewModelFactory(application);
-            }
-            return sInstance;
-        }
-
-        private Application mApplication;
-
-        /**
-         * Creates a {@code AndroidViewModelFactory}
-         *
-         * @param application an application to pass in {@link AndroidViewModel}
-         */
-        public AndroidViewModelFactory(@NonNull Application application) {
-            mApplication = application;
-        }
-
-        @NonNull
-        @Override
-        public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
-            if (AndroidViewModel.class.isAssignableFrom(modelClass)) {
-                //noinspection TryWithIdenticalCatches
+    public open class AndroidViewModelFactory(
+        private val application: Application
+    ) : NewInstanceFactory() {
+        @Suppress("DocumentExceptions")
+        override fun <T : ViewModel> create(modelClass: Class<T>): T {
+            return if (AndroidViewModel::class.java.isAssignableFrom(modelClass)) {
                 try {
-                    return modelClass.getConstructor(Application.class).newInstance(mApplication);
-                } catch (NoSuchMethodException e) {
-                    throw new RuntimeException("Cannot create an instance of " + modelClass, e);
-                } catch (IllegalAccessException e) {
-                    throw new RuntimeException("Cannot create an instance of " + modelClass, e);
-                } catch (InstantiationException e) {
-                    throw new RuntimeException("Cannot create an instance of " + modelClass, e);
-                } catch (InvocationTargetException e) {
-                    throw new RuntimeException("Cannot create an instance of " + modelClass, e);
+                    modelClass.getConstructor(Application::class.java).newInstance(application)
+                } catch (e: NoSuchMethodException) {
+                    throw RuntimeException("Cannot create an instance of $modelClass", e)
+                } catch (e: IllegalAccessException) {
+                    throw RuntimeException("Cannot create an instance of $modelClass", e)
+                } catch (e: InstantiationException) {
+                    throw RuntimeException("Cannot create an instance of $modelClass", e)
+                } catch (e: InvocationTargetException) {
+                    throw RuntimeException("Cannot create an instance of $modelClass", e)
                 }
+            } else super.create(modelClass)
+        }
+
+        public companion object {
+            internal fun defaultFactory(owner: ViewModelStoreOwner): Factory =
+                if (owner is HasDefaultViewModelProviderFactory)
+                    owner.defaultViewModelProviderFactory else instance
+
+            internal const val DEFAULT_KEY = "androidx.lifecycle.ViewModelProvider.DefaultKey"
+
+            private var sInstance: AndroidViewModelFactory? = null
+
+            /**
+             * Retrieve a singleton instance of AndroidViewModelFactory.
+             *
+             * @param application an application to pass in [AndroidViewModel]
+             * @return A valid [AndroidViewModelFactory]
+             */
+            @JvmStatic
+            public fun getInstance(application: Application): AndroidViewModelFactory {
+                if (sInstance == null) {
+                    sInstance = AndroidViewModelFactory(application)
+                }
+                return sInstance!!
             }
-            return super.create(modelClass);
         }
     }
 }
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt
index d80e8cb..24097d0 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt
@@ -204,7 +204,7 @@
         defaultArgs: Bundle?
     ) : AbstractSavedStateViewModelFactory(owner, defaultArgs) {
         @Suppress("UNCHECKED_CAST")
-        override fun <T : ViewModel?> create(
+        override fun <T : ViewModel> create(
             key: String,
             modelClass: Class<T>,
             handle: SavedStateHandle
diff --git a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavControllerViewModel.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavControllerViewModel.kt
index 4534b3a..3224871 100644
--- a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavControllerViewModel.kt
+++ b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavControllerViewModel.kt
@@ -67,7 +67,7 @@
     companion object {
         private val FACTORY: ViewModelProvider.Factory = object : ViewModelProvider.Factory {
             @Suppress("UNCHECKED_CAST")
-            override fun <T : ViewModel?> create(modelClass: Class<T>): T {
+            override fun <T : ViewModel> create(modelClass: Class<T>): T {
                 return NavControllerViewModel() as T
             }
         }