[Gradle] Implement IdeJvmAndAndroidSourceDependencyResolver
KT-55112
This commit is contained in:
committed by
Space Team
parent
38446dc3e8
commit
dcc196db04
+2
-1
@@ -6,12 +6,13 @@
|
||||
package org.jetbrains.kotlin.gradle.idea.tcs
|
||||
|
||||
import org.jetbrains.kotlin.tooling.core.MutableExtras
|
||||
import org.jetbrains.kotlin.tooling.core.mutableExtrasOf
|
||||
import java.io.Serializable
|
||||
|
||||
data class IdeaKotlinSourceDependency(
|
||||
val type: Type,
|
||||
override val coordinates: IdeaKotlinSourceCoordinates,
|
||||
override val extras: MutableExtras
|
||||
override val extras: MutableExtras = mutableExtrasOf()
|
||||
) : IdeaKotlinDependency {
|
||||
enum class Type : Serializable {
|
||||
Regular, Friend, DependsOn;
|
||||
|
||||
+7
@@ -34,6 +34,13 @@ fun IdeMultiplatformImport(extension: KotlinMultiplatformExtension): IdeMultipla
|
||||
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
|
||||
)
|
||||
|
||||
registerDependencyResolver(
|
||||
resolver = IdeJvmAndAndroidSourceDependencyResolver,
|
||||
constraint = IdeMultiplatformImport.SourceSetConstraint.unconstrained,
|
||||
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
|
||||
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
|
||||
)
|
||||
|
||||
registerDependencyResolver(
|
||||
resolver = IdeTransformedMetadataDependencyResolver,
|
||||
constraint = IdeMultiplatformImport.SourceSetConstraint.isMetadata,
|
||||
|
||||
+2
-11
@@ -6,27 +6,18 @@
|
||||
package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
||||
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceCoordinates
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeaKotlinSourceCoordinates
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.project
|
||||
import org.jetbrains.kotlin.tooling.core.mutableExtrasOf
|
||||
|
||||
object IdeFriendSourceDependencyResolver : IdeDependencyResolver {
|
||||
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> {
|
||||
return getVisibleSourceSetsFromAssociateCompilations(sourceSet).map { friendSourceSet ->
|
||||
IdeaKotlinSourceDependency(
|
||||
type = IdeaKotlinSourceDependency.Type.Friend,
|
||||
extras = mutableExtrasOf(),
|
||||
coordinates = IdeaKotlinSourceCoordinates(
|
||||
buildId = friendSourceSet.project.currentBuildId().toString(),
|
||||
projectPath = friendSourceSet.project.path,
|
||||
projectName = friendSourceSet.project.name,
|
||||
sourceSetName = friendSourceSet.name
|
||||
)
|
||||
coordinates = IdeaKotlinSourceCoordinates(friendSourceSet)
|
||||
)
|
||||
}.toSet()
|
||||
}
|
||||
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
||||
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency.Type.Regular
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.IdeaKotlinSourceCoordinates
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.internal
|
||||
|
||||
object IdeJvmAndAndroidSourceDependencyResolver : IdeDependencyResolver {
|
||||
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> {
|
||||
if (!sourceSet.isJvmAndAndroid) return emptySet()
|
||||
if (sourceSet !is DefaultKotlinSourceSet) return emptySet()
|
||||
return sourceSet.dependencyTransformations[API_SCOPE]?.metadataDependencyResolutions?.toList().orEmpty()
|
||||
.plus(sourceSet.dependencyTransformations[IMPLEMENTATION_SCOPE]?.metadataDependencyResolutions?.toList().orEmpty())
|
||||
.plus(sourceSet.dependencyTransformations[COMPILE_ONLY_SCOPE]?.metadataDependencyResolutions?.toList().orEmpty())
|
||||
.filterIsInstance<MetadataDependencyResolution.ChooseVisibleSourceSets>()
|
||||
.flatMap { chooseVisibleSourceSets ->
|
||||
val projectDependency = chooseVisibleSourceSets.projectDependency ?: return@flatMap emptyList<IdeaKotlinDependency>()
|
||||
val kotlin = projectDependency.multiplatformExtensionOrNull ?: return@flatMap emptyList<IdeaKotlinDependency>()
|
||||
kotlin.sourceSets
|
||||
.filter { sourceSet -> sourceSet.isJvmAndAndroid }
|
||||
.map { sourceSet -> IdeaKotlinSourceDependency(type = Regular, coordinates = IdeaKotlinSourceCoordinates(sourceSet)) }
|
||||
}
|
||||
.toSet()
|
||||
}
|
||||
|
||||
private val KotlinSourceSet.isJvmAndAndroid: Boolean
|
||||
get() = internal.compilations.map { it.platformType }.toSet() == setOf(KotlinPlatformType.androidJvm, KotlinPlatformType.jvm)
|
||||
}
|
||||
-2
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope.*
|
||||
import org.jetbrains.kotlin.tooling.core.mutableExtrasOf
|
||||
|
||||
object IdeVisibleMultiplatformSourceDependencyResolver : IdeDependencyResolver {
|
||||
override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> {
|
||||
@@ -34,7 +33,6 @@ object IdeVisibleMultiplatformSourceDependencyResolver : IdeDependencyResolver {
|
||||
return resolution.allVisibleSourceSetNames.map { visibleSourceSetName ->
|
||||
IdeaKotlinSourceDependency(
|
||||
type = IdeaKotlinSourceDependency.Type.Regular,
|
||||
extras = mutableExtrasOf(),
|
||||
coordinates = IdeaKotlinSourceCoordinates(
|
||||
buildId = project.currentBuildId().toString(),
|
||||
projectPath = project.path,
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.plugin.ide
|
||||
|
||||
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceCoordinates
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.project
|
||||
|
||||
internal fun IdeaKotlinSourceCoordinates(sourceSet: KotlinSourceSet): IdeaKotlinSourceCoordinates {
|
||||
return IdeaKotlinSourceCoordinates(
|
||||
buildId = sourceSet.project.currentBuildId().toString(),
|
||||
projectPath = sourceSet.project.path,
|
||||
projectName = sourceSet.project.name,
|
||||
sourceSetName = sourceSet.name
|
||||
)
|
||||
}
|
||||
+9
-10
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.dependsOnDependency
|
||||
import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.friendSourceDependency
|
||||
import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.regularSourceDependency
|
||||
import org.jetbrains.kotlin.gradle.plugin.ide.kotlinIdeMultiplatformImport
|
||||
import kotlin.test.Ignore
|
||||
import kotlin.test.Test
|
||||
|
||||
class IdeResolveSourceDependenciesTest {
|
||||
@@ -97,7 +96,6 @@ class IdeResolveSourceDependenciesTest {
|
||||
)
|
||||
}
|
||||
|
||||
@Ignore("No solution yet")
|
||||
@Test
|
||||
fun `test - multiplatform to multiplatform - sample 1 - jvmAndAndroid`() {
|
||||
assumeAndroidSdkAvailable()
|
||||
@@ -109,18 +107,19 @@ class IdeResolveSourceDependenciesTest {
|
||||
androidLibrary { compileSdk = 33 }
|
||||
|
||||
multiplatformExtension.apply {
|
||||
targetHierarchy.default {
|
||||
common {
|
||||
group("jvmAndAndroid") {
|
||||
jvm()
|
||||
android()
|
||||
}
|
||||
}
|
||||
}
|
||||
targetHierarchy.default()
|
||||
linuxX64()
|
||||
linuxArm64()
|
||||
jvm()
|
||||
android()
|
||||
|
||||
sourceSets.getByName("commonMain").let { commonMain ->
|
||||
sourceSets.create("jvmAndAndroidMain").let { jvmAndAndroidMain ->
|
||||
jvmAndAndroidMain.dependsOn(commonMain)
|
||||
sourceSets.getByName("jvmMain").dependsOn(jvmAndAndroidMain)
|
||||
sourceSets.getByName("androidMain").dependsOn(jvmAndAndroidMain)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user