Fix importing transitive dependencies on MPP project
Fix importing dependencies of java projects on MPP projects when external dependency is resolved into file collection dependency
This commit is contained in:
+21
-8
@@ -121,6 +121,20 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun ExternalDependency.getDependencyArtifacts(): Collection<File> =
|
||||||
|
when (this) {
|
||||||
|
is ExternalProjectDependency -> this.projectDependencyArtifacts
|
||||||
|
is FileCollectionDependency -> this.files
|
||||||
|
else -> emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun ExternalDependency.addDependencyArtifactInternal(file: File) {
|
||||||
|
when (this) {
|
||||||
|
is ExternalProjectDependency -> this.projectDependencyArtifacts.add(file)
|
||||||
|
is FileCollectionDependency -> this.files.add(file)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun populateModuleDependencies(gradleModule: IdeaModule, ideModule: DataNode<ModuleData>, ideProject: DataNode<ProjectData>) {
|
override fun populateModuleDependencies(gradleModule: IdeaModule, ideModule: DataNode<ModuleData>, ideProject: DataNode<ProjectData>) {
|
||||||
if (resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) == null) {
|
if (resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) == null) {
|
||||||
// Add mpp-artifacts into map used for dependency substitution
|
// Add mpp-artifacts into map used for dependency substitution
|
||||||
@@ -130,15 +144,14 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
|||||||
// processing case when one artifact could be produced by several (actualized!)source sets
|
// processing case when one artifact could be produced by several (actualized!)source sets
|
||||||
if (mppArtifacts.isNotEmpty() && resolverCtx.isResolveModulePerSourceSet) {
|
if (mppArtifacts.isNotEmpty() && resolverCtx.isResolveModulePerSourceSet) {
|
||||||
val externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject::class.java)
|
val externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject::class.java)
|
||||||
val artifactToDependency = HashMap<String, ExternalProjectDependency>()
|
val artifactToDependency = HashMap<String, ExternalDependency>()
|
||||||
externalProject?.sourceSets?.values?.forEach { sourceSet ->
|
externalProject?.sourceSets?.values?.forEach { sourceSet ->
|
||||||
sourceSet.dependencies.forEach { dependency ->
|
sourceSet.dependencies.forEach { dependency ->
|
||||||
if (dependency is ExternalProjectDependency) {
|
dependency.getDependencyArtifacts().map { toCanonicalPath(it.absolutePath) }
|
||||||
dependency.projectDependencyArtifacts.map { toCanonicalPath(it.absolutePath) }
|
.filter { mppArtifacts.keys.contains(it) }.forEach {
|
||||||
.filter { mppArtifacts.keys.contains(it) }.forEach {
|
artifactToDependency[it] = dependency
|
||||||
artifactToDependency[it] = dependency
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// create 'fake' dependency artifact files and put them into dependency substitution map
|
// create 'fake' dependency artifact files and put them into dependency substitution map
|
||||||
@@ -147,7 +160,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
|||||||
for ((index, module) in v.withIndex()) {
|
for ((index, module) in v.withIndex()) {
|
||||||
val fakeArtifact = "$k-MPP-$index"
|
val fakeArtifact = "$k-MPP-$index"
|
||||||
configArtifacts[fakeArtifact] = module
|
configArtifacts[fakeArtifact] = module
|
||||||
this.projectDependencyArtifacts.add(File(fakeArtifact))
|
this.addDependencyArtifactInternal(File(fakeArtifact))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user