[Gradle][KPM] Implement FragmentGranularMetadataResolverFactory
The logic is intended to be reused in ide import related logic
This commit is contained in:
committed by
Space
parent
ea698838dd
commit
00ed41a81e
+18
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 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.mpp.pm20
|
||||||
|
|
||||||
|
internal class FragmentGranularMetadataResolverFactory {
|
||||||
|
private val resolvers = mutableMapOf<KotlinGradleFragment, FragmentGranularMetadataResolver>()
|
||||||
|
|
||||||
|
fun getOrCreate(fragment: KotlinGradleFragment): FragmentGranularMetadataResolver = resolvers.getOrPut(fragment) {
|
||||||
|
FragmentGranularMetadataResolver(fragment, lazy {
|
||||||
|
fragment.refinesClosure.minus(fragment).map { refinesFragment ->
|
||||||
|
getOrCreate(refinesFragment)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
-9
@@ -113,15 +113,10 @@ private fun configureMetadataCompilationsAndCreateRegistry(
|
|||||||
metadataCompilationRegistry: MetadataCompilationRegistry
|
metadataCompilationRegistry: MetadataCompilationRegistry
|
||||||
) {
|
) {
|
||||||
val project = module.project
|
val project = module.project
|
||||||
val metadataResolutionByFragment = mutableMapOf<KotlinGradleFragment, FragmentGranularMetadataResolver>()
|
val metadataResolverFactory = FragmentGranularMetadataResolverFactory()
|
||||||
module.fragments.all { fragment ->
|
module.fragments.all { fragment ->
|
||||||
val transformation = FragmentGranularMetadataResolver(fragment, lazy {
|
val metadataResolver = metadataResolverFactory.getOrCreate(fragment)
|
||||||
fragment.refinesClosure.minus(fragment).map {
|
createExtractMetadataTask(project, fragment, metadataResolver)
|
||||||
metadataResolutionByFragment.getValue(it)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
metadataResolutionByFragment[fragment] = transformation
|
|
||||||
createExtractMetadataTask(project, fragment, transformation)
|
|
||||||
}
|
}
|
||||||
val compileAllTask = project.registerTask<DefaultTask>(lowerCamelCaseName(module.moduleClassifier, "metadataClasses"))
|
val compileAllTask = project.registerTask<DefaultTask>(lowerCamelCaseName(module.moduleClassifier, "metadataClasses"))
|
||||||
module.fragments.all { fragment ->
|
module.fragments.all { fragment ->
|
||||||
@@ -285,4 +280,4 @@ private fun disableMetadataCompilationIfNotYetSupported(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun transformFragmentMetadataTaskName(fragment: KotlinModuleFragment) =
|
private fun transformFragmentMetadataTaskName(fragment: KotlinModuleFragment) =
|
||||||
lowerCamelCaseName("resolve", fragment.disambiguateName("Metadata"))
|
lowerCamelCaseName("resolve", fragment.disambiguateName("Metadata"))
|
||||||
|
|||||||
Reference in New Issue
Block a user