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