Consider only source-compatible modules in allImplementingModules use-sites
So #KT-17400 Fixed So #KT-15680 Fixed So #KT-15660 Fixed Likely also #KT-16838 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
956ace3463
commit
0798e43524
@@ -16,14 +16,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.highlighter.markers
|
||||
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.ModuleProductionSourceInfo
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.ModuleTestSourceInfo
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
||||
import org.jetbrains.kotlin.idea.highlighter.sourceKind
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
@@ -39,15 +35,6 @@ fun ModuleDescriptor.commonModuleOrNull(): ModuleDescriptor? {
|
||||
}
|
||||
}
|
||||
|
||||
private val ModuleDescriptor.sourceKind: SourceKind
|
||||
get() = when (getCapability(ModuleInfo.Capability)) {
|
||||
is ModuleProductionSourceInfo -> SourceKind.PRODUCTION
|
||||
is ModuleTestSourceInfo -> SourceKind.TEST
|
||||
else -> SourceKind.NONE
|
||||
}
|
||||
|
||||
private enum class SourceKind { NONE, PRODUCTION, TEST }
|
||||
|
||||
fun ModuleDescriptor.hasDeclarationOf(descriptor: MemberDescriptor) = declarationOf(descriptor) != null
|
||||
|
||||
private fun ModuleDescriptor.declarationOf(descriptor: MemberDescriptor): DeclarationDescriptor? =
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
||||
import org.jetbrains.kotlin.idea.highlighter.allImplementingCompatibleModules
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.MultiTargetPlatform
|
||||
@@ -42,7 +43,7 @@ fun getPlatformImplementationTooltip(declaration: KtDeclaration): String? {
|
||||
val descriptor = declaration.toDescriptor() as? MemberDescriptor ?: return null
|
||||
val commonModuleDescriptor = declaration.containingKtFile.findModuleDescriptor()
|
||||
|
||||
val platformModulesWithImplementation = commonModuleDescriptor.allImplementingModules.filter {
|
||||
val platformModulesWithImplementation = commonModuleDescriptor.allImplementingCompatibleModules.filter {
|
||||
it.hasImplementationsOf(descriptor)
|
||||
}
|
||||
if (platformModulesWithImplementation.isEmpty()) return null
|
||||
@@ -67,7 +68,7 @@ fun navigateToPlatformImplementation(e: MouseEvent?, declaration: KtDeclaration)
|
||||
internal fun KtDeclaration.headerImplementations(): Set<KtDeclaration> {
|
||||
val descriptor = toDescriptor() as? MemberDescriptor ?: return emptySet()
|
||||
val commonModuleDescriptor = containingKtFile.findModuleDescriptor()
|
||||
return commonModuleDescriptor.allImplementingModules.flatMap {
|
||||
return commonModuleDescriptor.allImplementingCompatibleModules.flatMap {
|
||||
it.implementationsOf(descriptor)
|
||||
}.mapNotNullTo(LinkedHashSet()) { DescriptorToSourceUtils.descriptorToDeclaration(it) as? KtDeclaration }
|
||||
}
|
||||
@@ -41,6 +41,7 @@ import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.idea.KotlinIcons
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
||||
import org.jetbrains.kotlin.idea.highlighter.allImplementingCompatibleModules
|
||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
@@ -286,7 +287,7 @@ private fun collectImplementationMarkers(declaration: KtNamedDeclaration,
|
||||
val descriptor = declaration.toDescriptor() as? MemberDescriptor ?: return
|
||||
val commonModuleDescriptor = declaration.containingKtFile.findModuleDescriptor()
|
||||
|
||||
if (commonModuleDescriptor.allImplementingModules.none { it.hasImplementationsOf(descriptor) }) return
|
||||
if (commonModuleDescriptor.allImplementingCompatibleModules.none { it.hasImplementationsOf(descriptor) }) return
|
||||
|
||||
val anchor = declaration.nameIdentifier ?: declaration
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
||||
import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory
|
||||
import org.jetbrains.kotlin.idea.findUsages.handlers.KotlinFindClassUsagesHandler
|
||||
import org.jetbrains.kotlin.idea.highlighter.allImplementingCompatibleModules
|
||||
import org.jetbrains.kotlin.idea.highlighter.markers.hasImplementationsOf
|
||||
import org.jetbrains.kotlin.idea.imports.importableFqName
|
||||
import org.jetbrains.kotlin.idea.references.mainReference
|
||||
@@ -335,7 +336,7 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
|
||||
descriptor as? MemberDescriptor ?: return false
|
||||
val commonModuleDescriptor = declaration.containingKtFile.findModuleDescriptor()
|
||||
|
||||
return commonModuleDescriptor.allImplementingModules.any { it.hasImplementationsOf(descriptor) } ||
|
||||
return commonModuleDescriptor.allImplementingCompatibleModules.any { it.hasImplementationsOf(descriptor) } ||
|
||||
commonModuleDescriptor.hasImplementationsOf(descriptor)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user