MPP: Support multiple 'expectedBy' dependencies for single module
#KT-22865 Fixed
This commit is contained in:
@@ -123,11 +123,8 @@ val mavenLibraryIdToPlatform: Map<String, TargetPlatformKind<*>> by lazy {
|
||||
.toMap()
|
||||
}
|
||||
|
||||
internal fun Module.findImplementingModules(modelsProvider: IdeModifiableModelsProvider): List<Module> {
|
||||
return modelsProvider.modules.filter { module ->
|
||||
module.findImplementedModuleName(modelsProvider) == name
|
||||
}
|
||||
}
|
||||
internal fun Module.findImplementingModules(modelsProvider: IdeModifiableModelsProvider) =
|
||||
modelsProvider.modules.filter { name in it.findImplementedModuleNames(modelsProvider) }
|
||||
|
||||
val Module.implementingModules: List<Module>
|
||||
get() = cached(CachedValueProvider {
|
||||
@@ -167,12 +164,11 @@ val ModuleDescriptor.implementingDescriptors: List<ModuleDescriptor>
|
||||
})
|
||||
}
|
||||
|
||||
val ModuleDescriptor.implementedDescriptor: ModuleDescriptor?
|
||||
val ModuleDescriptor.implementedDescriptors: List<ModuleDescriptor>
|
||||
get() {
|
||||
val moduleSourceInfo = getCapability(ModuleInfo.Capability) as? ModuleSourceInfo ?: return null
|
||||
val moduleSourceInfo = getCapability(ModuleInfo.Capability) as? ModuleSourceInfo ?: return emptyList()
|
||||
|
||||
val implementedModuleInfo = moduleSourceInfo.expectedBy
|
||||
return implementedModuleInfo?.let {
|
||||
return moduleSourceInfo.expectedBy.mapNotNull {
|
||||
KotlinCacheService.getInstance(moduleSourceInfo.module.project)
|
||||
.getResolutionFacadeByModuleInfo(it, it.platform)?.moduleDescriptor
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
||||
import org.jetbrains.kotlin.idea.facet.implementedDescriptor
|
||||
import org.jetbrains.kotlin.idea.facet.implementedDescriptors
|
||||
import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
@@ -44,8 +44,8 @@ fun getExpectedDeclarationTooltip(declaration: KtDeclaration?): String? {
|
||||
val descriptor = declaration?.toDescriptor() as? MemberDescriptor ?: return null
|
||||
val platformModuleDescriptor = declaration.containingKtFile.findModuleDescriptor()
|
||||
|
||||
val commonModuleDescriptor = platformModuleDescriptor.implementedDescriptor ?: return null
|
||||
if (!commonModuleDescriptor.hasDeclarationOf(descriptor)) return null
|
||||
val commonModuleDescriptors = platformModuleDescriptor.implementedDescriptors ?: return null
|
||||
if (!commonModuleDescriptors.any { it.hasDeclarationOf(descriptor) }) return null
|
||||
|
||||
return "Has declaration in common module"
|
||||
}
|
||||
@@ -54,7 +54,10 @@ fun navigateToExpectedDeclaration(declaration: KtDeclaration?) {
|
||||
declaration?.expectedDeclarationIfAny()?.navigate(false)
|
||||
}
|
||||
|
||||
internal fun MemberDescriptor.expectedDescriptor() = module.implementedDescriptor?.declarationOf(this)
|
||||
internal fun MemberDescriptor.expectedDescriptors() = module.implementedDescriptors.mapNotNull { it.declarationOf(this) }
|
||||
|
||||
// TODO: Sort out the cases with multiple expected descriptors
|
||||
internal fun MemberDescriptor.expectedDescriptor() = expectedDescriptors().firstOrNull()
|
||||
|
||||
internal fun KtDeclaration.expectedDeclarationIfAny(): KtDeclaration? {
|
||||
val expectedDescriptor = (toDescriptor() as? MemberDescriptor)?.expectedDescriptor() ?: return null
|
||||
|
||||
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.idea.caches.lightClasses.KtFakeLightMethod
|
||||
import org.jetbrains.kotlin.idea.core.isInheritable
|
||||
import org.jetbrains.kotlin.idea.core.isOverridable
|
||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
||||
import org.jetbrains.kotlin.idea.facet.implementedDescriptor
|
||||
import org.jetbrains.kotlin.idea.facet.implementedDescriptors
|
||||
import org.jetbrains.kotlin.idea.facet.implementingDescriptors
|
||||
import org.jetbrains.kotlin.idea.search.declarationsSearch.toPossiblyFakeLightMethods
|
||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||
@@ -379,8 +379,7 @@ private fun collectExpectedMarkers(declaration: KtNamedDeclaration,
|
||||
|
||||
val descriptor = declaration.toDescriptor() as? MemberDescriptor ?: return
|
||||
val platformModuleDescriptor = declaration.containingKtFile.findModuleDescriptor()
|
||||
val commonModuleDescriptor = platformModuleDescriptor.implementedDescriptor ?: return
|
||||
if (!commonModuleDescriptor.hasDeclarationOf(descriptor)) return
|
||||
if (!platformModuleDescriptor.implementedDescriptors.any { it.hasDeclarationOf(descriptor) }) return
|
||||
|
||||
val anchor = declaration.expectOrActualAnchor
|
||||
|
||||
|
||||
Reference in New Issue
Block a user