MI-187 Also allow foreign DerivedModuleInfos, if their original module is known to the ResolverForProject
This commit is contained in:
committed by
teamcityserver
parent
5f6be619c0
commit
3fe388bd17
@@ -89,7 +89,8 @@ abstract class AbstractResolverForProject<M : ModuleInfo>(
|
||||
override val name: String
|
||||
get() = "Resolver for '$debugName'"
|
||||
|
||||
private fun isCorrectModuleInfo(moduleInfo: M) = moduleInfo in allModules
|
||||
private fun isCorrectModuleInfo(moduleInfo: M): Boolean =
|
||||
((moduleInfo as? DerivedModuleInfo)?.originalModule ?: moduleInfo) in allModules
|
||||
|
||||
final override fun resolverForModuleDescriptor(descriptor: ModuleDescriptor): ResolverForModule {
|
||||
val moduleResolver = resolverForModuleDescriptorImpl(descriptor)
|
||||
@@ -164,8 +165,10 @@ abstract class AbstractResolverForProject<M : ModuleInfo>(
|
||||
}
|
||||
|
||||
private fun doGetDescriptorForModule(module: M): ModuleDescriptorImpl {
|
||||
val moduleFromThisResolver = moduleInfoToResolvableInfo[module]
|
||||
?: return delegateResolver.descriptorForModule(module) as ModuleDescriptorImpl
|
||||
val moduleFromThisResolver =
|
||||
module.takeIf { it is DerivedModuleInfo && it.originalModule in moduleInfoToResolvableInfo }
|
||||
?: moduleInfoToResolvableInfo[module]
|
||||
?: return delegateResolver.descriptorForModule(module) as ModuleDescriptorImpl
|
||||
|
||||
return projectContext.storageManager.compute {
|
||||
var moduleData = descriptorByModule.getOrPut(moduleFromThisResolver) {
|
||||
|
||||
@@ -96,6 +96,16 @@ interface CombinedModuleInfo : ModuleInfo {
|
||||
val platformModule: ModuleInfo
|
||||
}
|
||||
|
||||
/**
|
||||
* Special-purpose module info that allows implementors to provide different behavior compared to the [originalModule]'s.
|
||||
* E.g. may be used to resolve common code as if it were target-specific, or to change the dependencies visible to the code.
|
||||
*
|
||||
* Resolvers should accept a derived module info, iff the [originalModule] is accepted.
|
||||
*/
|
||||
interface DerivedModuleInfo : ModuleInfo {
|
||||
val originalModule: ModuleInfo
|
||||
}
|
||||
|
||||
fun ModuleInfo.flatten(): List<ModuleInfo> = when (this) {
|
||||
is CombinedModuleInfo -> listOf(this) + containedModules
|
||||
else -> listOf(this)
|
||||
|
||||
Reference in New Issue
Block a user