Use correct function to find header for impl in IDE

Also do not call isHeader/isImpl because the returned declarations are
guaranteed to be isHeader in findCompatibleHeaderForImpl and isImpl in
findCompatibleImplForHeader
This commit is contained in:
Alexander Udalov
2017-04-18 18:51:51 +03:00
parent af4f96fb52
commit a2e050a3b9
4 changed files with 14 additions and 7 deletions
@@ -159,6 +159,9 @@ class HeaderImplDeclarationChecker(val moduleToCheck: ModuleDescriptor? = null)
fun MemberDescriptor.findCompatibleImplForHeader(): List<MemberDescriptor> =
findImplForHeader(this, false)?.get(Compatible).orEmpty()
fun MemberDescriptor.findCompatibleHeaderForImpl(): List<MemberDescriptor> =
findHeaderForImpl(this)?.get(Compatible).orEmpty()
private fun CallableMemberDescriptor.findNamesakesFromTheSameModule(): Collection<CallableMemberDescriptor> {
val packageFqName = (containingDeclaration as? PackageFragmentDescriptor)?.fqName ?: return emptyList()
val myModule = moduleToCheck ?: module
@@ -17,7 +17,9 @@
package org.jetbrains.kotlin.idea.highlighter.markers
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.descriptors.*
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.idea.caches.resolve.findModuleDescriptor
@@ -49,8 +51,8 @@ private enum class SourceKind { NONE, PRODUCTION, TEST }
fun ModuleDescriptor.hasDeclarationOf(descriptor: MemberDescriptor) = declarationOf(descriptor) != null
private fun ModuleDescriptor.declarationOf(descriptor: MemberDescriptor): DeclarationDescriptor? =
with (HeaderImplDeclarationChecker(this)) {
descriptor.findCompatibleImplForHeader().firstOrNull { it.isHeader }
with(HeaderImplDeclarationChecker(this)) {
descriptor.findCompatibleHeaderForImpl().firstOrNull()
}
fun getHeaderDeclarationTooltip(declaration: KtDeclaration): String? {
@@ -18,7 +18,9 @@ package org.jetbrains.kotlin.idea.highlighter.markers
import com.intellij.codeInsight.daemon.impl.PsiElementListNavigator
import com.intellij.ide.util.DefaultPsiElementCellRenderer
import org.jetbrains.kotlin.descriptors.*
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.findModuleDescriptor
import org.jetbrains.kotlin.idea.core.toDescriptor
import org.jetbrains.kotlin.psi.KtDeclaration
@@ -32,8 +34,8 @@ fun ModuleDescriptor.hasImplementationsOf(descriptor: MemberDescriptor) =
implementationsOf(descriptor).isNotEmpty()
private fun ModuleDescriptor.implementationsOf(descriptor: MemberDescriptor): List<DeclarationDescriptor> =
with (HeaderImplDeclarationChecker(this)) {
descriptor.findCompatibleImplForHeader().filter { it.isImpl }
with(HeaderImplDeclarationChecker(this)) {
descriptor.findCompatibleImplForHeader()
}
fun getPlatformImplementationTooltip(declaration: KtDeclaration): String? {
@@ -1,5 +1,5 @@
impl class <lineMarker>Header</lineMarker> {
impl fun foo() = 42
impl fun <lineMarker>foo</lineMarker>() = 42
}
impl fun <lineMarker>foo</lineMarker>(arg: Int) = arg.toString()