highlight usages for parameter doesn't look at base declarations

#KT-10204 Fixed
This commit is contained in:
Dmitry Jemerov
2016-02-03 16:56:09 +01:00
parent 37976e516c
commit bcc3102e05
4 changed files with 25 additions and 2 deletions
@@ -31,6 +31,7 @@ import com.intellij.usageView.UsageInfo
import com.intellij.util.*
import org.jetbrains.kotlin.asJava.toLightMethods
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.ParameterDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.findUsages.KotlinCallableFindUsagesOptions
import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory
@@ -164,8 +165,12 @@ abstract class KotlinFindMemberUsagesHandler<T : KtNamedDeclaration>
override fun findReferencesToHighlight(target: PsiElement, searchScope: SearchScope): Collection<PsiReference> {
val callableDescriptor = (target as? KtCallableDeclaration)?.resolveToDescriptorIfAny() as? CallableDescriptor
val baseDescriptors = callableDescriptor?.findOriginalTopMostOverriddenDescriptors() ?: emptyList<CallableDescriptor>()
val baseDeclarations = baseDescriptors.map { it.source.getPsi() }.filter { it != null && it != target }
val descriptorsToHighlight = if (callableDescriptor is ParameterDescriptor)
listOf(callableDescriptor)
else
callableDescriptor?.findOriginalTopMostOverriddenDescriptors() ?: emptyList<CallableDescriptor>()
val baseDeclarations = descriptorsToHighlight.map { it.source.getPsi() }.filter { it != null && it != target }
return if (baseDeclarations.isNotEmpty()) {
baseDeclarations.flatMap {
@@ -0,0 +1,11 @@
// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtParameter
// HIGHLIGHTING
interface A {
fun test(foo: Int)
}
class B(): A {
override fun test(foo<caret>: Int) {
println(foo) // not highlighted `foo`
}
}
@@ -0,0 +1 @@
Value read (9: 17) println(foo) // not highlighted `foo`
@@ -803,6 +803,12 @@ public class FindUsagesTestGenerated extends AbstractFindUsagesTest {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findParameterUsages/kotlinFunctionParameterUsages.0.kt");
doTest(fileName);
}
@TestMetadata("kotlinHighlightParameterUsages.0.kt")
public void testKotlinHighlightParameterUsages() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findParameterUsages/kotlinHighlightParameterUsages.0.kt");
doTest(fileName);
}
}
@TestMetadata("idea/testData/findUsages/kotlin/findPrimaryConstructorUsages")