diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt index 466d5234cf5..6c8ee02ab3b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt @@ -255,7 +255,7 @@ internal class GranularMetadataTransformation( val metadataProvider = when (mppDependencyMetadataExtractor) { is ProjectMppDependencyProjectStructureMetadataExtractor -> ProjectMetadataProvider( - dependencyProject = mppDependencyMetadataExtractor.dependencyProject, + dependencyProject = project.project(mppDependencyMetadataExtractor.projectPath), moduleIdentifier = mppDependencyMetadataExtractor.moduleIdentifier ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/MppDependencyProjectStructureMetadataExtractor.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/MppDependencyProjectStructureMetadataExtractor.kt index d31d30511ce..bc6f5a1974a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/MppDependencyProjectStructureMetadataExtractor.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/MppDependencyProjectStructureMetadataExtractor.kt @@ -27,18 +27,26 @@ sealed class MppDependencyProjectStructureMetadataExtractor { internal class ProjectMppDependencyProjectStructureMetadataExtractor( val moduleIdentifier: KpmModuleIdentifier, - val dependencyProject: Project + val projectPath: String, + private val projectStructureMetadataProvider: () -> KotlinProjectStructureMetadata? ) : MppDependencyProjectStructureMetadataExtractor() { - override fun getProjectStructureMetadata(): KotlinProjectStructureMetadata? { - return when { - dependencyProject.topLevelExtensionOrNull == null -> null - dependencyProject.pm20ExtensionOrNull != null -> buildProjectStructureMetadata( - dependencyProject.pm20Extension.modules.single { it.moduleIdentifier == moduleIdentifier } - ) + constructor( + moduleIdentifier: KpmModuleIdentifier, + dependencyProject: Project + ): this(moduleIdentifier, dependencyProject.path, { dependencyProject.getProjectStructureMetadata(moduleIdentifier) }) - else -> dependencyProject.multiplatformExtensionOrNull?.kotlinProjectStructureMetadata - } + override fun getProjectStructureMetadata(): KotlinProjectStructureMetadata? = projectStructureMetadataProvider() +} + +private fun Project.getProjectStructureMetadata(moduleIdentifier: KpmModuleIdentifier): KotlinProjectStructureMetadata? { + return when { + topLevelExtensionOrNull == null -> null + pm20ExtensionOrNull != null -> buildProjectStructureMetadata( + pm20Extension.modules.single { it.moduleIdentifier == moduleIdentifier } + ) + + else -> multiplatformExtensionOrNull?.kotlinProjectStructureMetadata } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmFragmentGranularMetadataResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmFragmentGranularMetadataResolver.kt index ca5018d37e7..d3ed4637efd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmFragmentGranularMetadataResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmFragmentGranularMetadataResolver.kt @@ -104,7 +104,7 @@ internal class GradleKpmFragmentGranularMetadataResolver( val metadataProvider = when (projectStructureMetadataExtractor) { is ProjectMppDependencyProjectStructureMetadataExtractor -> ProjectMetadataProvider( - dependencyProject = projectStructureMetadataExtractor.dependencyProject, + dependencyProject = project.project(projectStructureMetadataExtractor.projectPath), moduleIdentifier = projectStructureMetadataExtractor.moduleIdentifier )