Align source sets in lifecycle-viewmodel with JetBrains fork

- Move shared code into `nonJvmMain` (a common source set for native and web targets)
- Use expect/actual for `qualifiedName`
- Remove `macEnabled`/`linuxEnabled` conditions as it's enabled by default now

Bug: 214568825
Test: N/A
Change-Id: I3623f265fed7bd2db3c934a48c7dbbc865d94f22
diff --git a/lifecycle/lifecycle-viewmodel/build.gradle b/lifecycle/lifecycle-viewmodel/build.gradle
index 0eb1a77..7a72a8e 100644
--- a/lifecycle/lifecycle-viewmodel/build.gradle
+++ b/lifecycle/lifecycle-viewmodel/build.gradle
@@ -22,19 +22,17 @@
  * modifying its settings.
  */
 
-import androidx.build.KmpPlatformsKt
 import androidx.build.PlatformIdentifier
 import androidx.build.Publish
 import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode
+import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
+import org.jetbrains.kotlin.konan.target.Family
 
 plugins {
     id("AndroidXPlugin")
     id("com.android.library")
 }
 
-def macEnabled = KmpPlatformsKt.enableMac(project)
-def linuxEnabled = KmpPlatformsKt.enableLinux(project)
-
 androidXMultiplatform {
     android()
     desktop()
@@ -100,45 +98,24 @@
             }
         }
 
-        desktopMain {
-            dependsOn(jvmMain)
-        }
-
-        if (macEnabled || linuxEnabled) {
-            nativeMain {
-                dependsOn(commonMain)
-            }
-
-            nativeTest {
-                dependsOn(commonTest)
-            }
-        }
-        if (macEnabled) {
-            darwinMain {
-                dependsOn(nativeMain)
-            }
-        }
-        if (linuxEnabled) {
-            linuxMain {
-                dependsOn(nativeMain)
-            }
-        }
+        desktopMain.dependsOn(jvmMain)
+        nonJvmMain.dependsOn(commonMain)
+        nativeMain.dependsOn(nonJvmMain)
+        darwinMain.dependsOn(nativeMain)
+        linuxMain.dependsOn(nativeMain)
 
         targets.all { target ->
-            if (target.platformType == org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.native) {
+            if (target.platformType == KotlinPlatformType.native) {
                 target.compilations["main"].defaultSourceSet {
                     def konanTargetFamily = target.konanTarget.family
-                    if (konanTargetFamily == org.jetbrains.kotlin.konan.target.Family.OSX || konanTargetFamily == org.jetbrains.kotlin.konan.target.Family.IOS) {
+                    if (konanTargetFamily == Family.OSX || konanTargetFamily == Family.IOS) {
                         dependsOn(darwinMain)
-                    } else if (konanTargetFamily == org.jetbrains.kotlin.konan.target.Family.LINUX) {
+                    } else if (konanTargetFamily == Family.LINUX) {
                         dependsOn(linuxMain)
                     } else {
                         throw new GradleException("unknown native target ${target}")
                     }
                 }
-                target.compilations["test"].defaultSourceSet {
-                    dependsOn(nativeTest)
-                }
             }
         }
     }
diff --git a/lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/viewmodel/internal/ViewModelProviders.kt b/lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/viewmodel/internal/ViewModelProviders.kt
index 03de848..97d382e 100644
--- a/lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/viewmodel/internal/ViewModelProviders.kt
+++ b/lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/viewmodel/internal/ViewModelProviders.kt
@@ -39,7 +39,7 @@
         "androidx.lifecycle.ViewModelProvider.DefaultKey"
 
     internal fun <T : ViewModel> getDefaultKey(modelClass: KClass<T>): String {
-        val canonicalName = requireNotNull(modelClass.qualifiedName) {
+        val canonicalName = requireNotNull(modelClass.canonicalName) {
             "Local and anonymous classes can not be ViewModels"
         }
         return "$VIEW_MODEL_PROVIDER_DEFAULT_KEY:$canonicalName"
@@ -86,7 +86,13 @@
             ?.initializer
             ?.invoke(extras) as VM?
         return requireNotNull(viewModel) {
-            "No initializer set for given class ${modelClass.qualifiedName}"
+            "No initializer set for given class ${modelClass.canonicalName}"
         }
     }
 }
+
+/**
+ * Multiplatform replacement for [KClass.qualifiedName] reflection API.
+ * It's required because it's not supported for all platforms.
+ */
+internal expect val <T : Any> KClass<T>.canonicalName: String?
diff --git a/lifecycle/lifecycle-viewmodel/src/darwinMain/kotlin/androidx/lifecycle/viewmodel/internal/Lock.native.darwin.kt b/lifecycle/lifecycle-viewmodel/src/darwinMain/kotlin/androidx/lifecycle/viewmodel/internal/Lock.darwin.kt
similarity index 100%
rename from lifecycle/lifecycle-viewmodel/src/darwinMain/kotlin/androidx/lifecycle/viewmodel/internal/Lock.native.darwin.kt
rename to lifecycle/lifecycle-viewmodel/src/darwinMain/kotlin/androidx/lifecycle/viewmodel/internal/Lock.darwin.kt
diff --git a/lifecycle/lifecycle-viewmodel/src/jvmMain/kotlin/androidx/lifecycle/viewmodel/internal/ViewModelProviders.jvm.kt b/lifecycle/lifecycle-viewmodel/src/jvmMain/kotlin/androidx/lifecycle/viewmodel/internal/ViewModelProviders.jvm.kt
new file mode 100644
index 0000000..cb5ddbc
--- /dev/null
+++ b/lifecycle/lifecycle-viewmodel/src/jvmMain/kotlin/androidx/lifecycle/viewmodel/internal/ViewModelProviders.jvm.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.lifecycle.viewmodel.internal
+
+import kotlin.reflect.KClass
+
+internal actual val <T : Any> KClass<T>.canonicalName: String?
+    get() = qualifiedName
diff --git a/lifecycle/lifecycle-viewmodel/src/linuxMain/kotlin/androidx/lifecycle/viewmodel/internal/Lock.native.linux.kt b/lifecycle/lifecycle-viewmodel/src/linuxMain/kotlin/androidx/lifecycle/viewmodel/internal/Lock.linux.kt
similarity index 100%
rename from lifecycle/lifecycle-viewmodel/src/linuxMain/kotlin/androidx/lifecycle/viewmodel/internal/Lock.native.linux.kt
rename to lifecycle/lifecycle-viewmodel/src/linuxMain/kotlin/androidx/lifecycle/viewmodel/internal/Lock.linux.kt
diff --git a/lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/viewmodel/internal/ViewModelProviders.native.kt b/lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/viewmodel/internal/ViewModelProviders.native.kt
new file mode 100644
index 0000000..cb5ddbc
--- /dev/null
+++ b/lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/viewmodel/internal/ViewModelProviders.native.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.lifecycle.viewmodel.internal
+
+import kotlin.reflect.KClass
+
+internal actual val <T : Any> KClass<T>.canonicalName: String?
+    get() = qualifiedName
diff --git a/lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/ViewModel.native.kt b/lifecycle/lifecycle-viewmodel/src/nonJvmMain/kotlin/androidx/lifecycle/ViewModel.nonJvm.kt
similarity index 100%
rename from lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/ViewModel.native.kt
rename to lifecycle/lifecycle-viewmodel/src/nonJvmMain/kotlin/androidx/lifecycle/ViewModel.nonJvm.kt
diff --git a/lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/ViewModelProvider.native.kt b/lifecycle/lifecycle-viewmodel/src/nonJvmMain/kotlin/androidx/lifecycle/ViewModelProvider.nonJvm.kt
similarity index 100%
rename from lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/ViewModelProvider.native.kt
rename to lifecycle/lifecycle-viewmodel/src/nonJvmMain/kotlin/androidx/lifecycle/ViewModelProvider.nonJvm.kt
diff --git a/lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/viewmodel/InitializerViewModelFactory.native.kt b/lifecycle/lifecycle-viewmodel/src/nonJvmMain/kotlin/androidx/lifecycle/viewmodel/InitializerViewModelFactory.nonJvm.kt
similarity index 100%
rename from lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/viewmodel/InitializerViewModelFactory.native.kt
rename to lifecycle/lifecycle-viewmodel/src/nonJvmMain/kotlin/androidx/lifecycle/viewmodel/InitializerViewModelFactory.nonJvm.kt
diff --git a/lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/viewmodel/internal/DefaultViewModelProviderFactory.native.kt b/lifecycle/lifecycle-viewmodel/src/nonJvmMain/kotlin/androidx/lifecycle/viewmodel/internal/DefaultViewModelProviderFactory.nonJvm.kt
similarity index 100%
rename from lifecycle/lifecycle-viewmodel/src/nativeMain/kotlin/androidx/lifecycle/viewmodel/internal/DefaultViewModelProviderFactory.native.kt
rename to lifecycle/lifecycle-viewmodel/src/nonJvmMain/kotlin/androidx/lifecycle/viewmodel/internal/DefaultViewModelProviderFactory.nonJvm.kt