[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
|
||||
) {
|
||||
val project = module.project
|
||||
val metadataResolutionByFragment = mutableMapOf<KotlinGradleFragment, FragmentGranularMetadataResolver>()
|
||||
val metadataResolverFactory = FragmentGranularMetadataResolverFactory()
|
||||
module.fragments.all { fragment ->
|
||||
val transformation = FragmentGranularMetadataResolver(fragment, lazy {
|
||||
fragment.refinesClosure.minus(fragment).map {
|
||||
metadataResolutionByFragment.getValue(it)
|
||||
}
|
||||
})
|
||||
metadataResolutionByFragment[fragment] = transformation
|
||||
createExtractMetadataTask(project, fragment, transformation)
|
||||
val metadataResolver = metadataResolverFactory.getOrCreate(fragment)
|
||||
createExtractMetadataTask(project, fragment, metadataResolver)
|
||||
}
|
||||
val compileAllTask = project.registerTask<DefaultTask>(lowerCamelCaseName(module.moduleClassifier, "metadataClasses"))
|
||||
module.fragments.all { fragment ->
|
||||
@@ -285,4 +280,4 @@ private fun disableMetadataCompilationIfNotYetSupported(
|
||||
}
|
||||
|
||||
private fun transformFragmentMetadataTaskName(fragment: KotlinModuleFragment) =
|
||||
lowerCamelCaseName("resolve", fragment.disambiguateName("Metadata"))
|
||||
lowerCamelCaseName("resolve", fragment.disambiguateName("Metadata"))
|
||||
|
||||
Reference in New Issue
Block a user