MPP: Support multiple 'expectedBy' dependencies for single module

#KT-22865 Fixed
This commit is contained in:
Alexey Sedunov
2018-02-20 19:26:24 +03:00
parent e3a69d118f
commit d9aa1796cd
22 changed files with 197 additions and 108 deletions
@@ -117,24 +117,22 @@ private fun ideaModelDependencies(module: Module, forProduction: Boolean): List<
return result.toList()
}
fun Module.findImplementedModuleName(modelsProvider: IdeModifiableModelsProvider): String? {
fun Module.findImplementedModuleNames(modelsProvider: IdeModifiableModelsProvider): List<String> {
val facetModel = modelsProvider.getModifiableFacetModel(this)
val facet = facetModel.findFacet(
KotlinFacetType.TYPE_ID,
FacetTypeRegistry.getInstance().findFacetType(ID)!!.defaultFacetName
)
return facet?.configuration?.settings?.implementedModuleName
return facet?.configuration?.settings?.implementedModuleNames ?: emptyList()
}
fun Module.findImplementedModule(modelsProvider: IdeModifiableModelsProvider): Module? {
val implementedModuleName = findImplementedModuleName(modelsProvider)
return implementedModuleName?.let { modelsProvider.findIdeModule(it) }
}
fun Module.findImplementedModules(modelsProvider: IdeModifiableModelsProvider) =
findImplementedModuleNames(modelsProvider).mapNotNull { modelsProvider.findIdeModule(it) }
interface ModuleSourceInfo : IdeaModuleInfo, TrackableModuleInfo {
val module: Module
override val expectedBy: ModuleSourceInfo?
override val expectedBy: List<ModuleSourceInfo>
override val displayedName get() = module.name
@@ -149,11 +147,11 @@ interface ModuleSourceInfo : IdeaModuleInfo, TrackableModuleInfo {
}
sealed class ModuleSourceInfoWithExpectedBy(private val forProduction: Boolean) : ModuleSourceInfo {
override val expectedBy: ModuleSourceInfo?
override val expectedBy: List<ModuleSourceInfo>
get() {
val modelsProvider = IdeModifiableModelsProviderImpl(module.project)
val expectedByModule = module.findImplementedModule(modelsProvider)
return if (forProduction) expectedByModule?.productionSourceInfo() else expectedByModule?.testSourceInfo()
val expectedByModules = module.findImplementedModules(modelsProvider)
return expectedByModules.mapNotNull { if (forProduction) it.productionSourceInfo() else it.testSourceInfo() }
}
override fun dependencies(): List<IdeaModuleInfo> = module.cached(createCachedValueProvider {