diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindMemberUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindMemberUsagesHandler.kt index 650c6c30328..d7d03e41884 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindMemberUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindMemberUsagesHandler.kt @@ -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 override fun findReferencesToHighlight(target: PsiElement, searchScope: SearchScope): Collection { val callableDescriptor = (target as? KtCallableDeclaration)?.resolveToDescriptorIfAny() as? CallableDescriptor - val baseDescriptors = callableDescriptor?.findOriginalTopMostOverriddenDescriptors() ?: emptyList() - val baseDeclarations = baseDescriptors.map { it.source.getPsi() }.filter { it != null && it != target } + val descriptorsToHighlight = if (callableDescriptor is ParameterDescriptor) + listOf(callableDescriptor) + else + callableDescriptor?.findOriginalTopMostOverriddenDescriptors() ?: emptyList() + + val baseDeclarations = descriptorsToHighlight.map { it.source.getPsi() }.filter { it != null && it != target } return if (baseDeclarations.isNotEmpty()) { baseDeclarations.flatMap { diff --git a/idea/testData/findUsages/kotlin/findParameterUsages/kotlinHighlightParameterUsages.0.kt b/idea/testData/findUsages/kotlin/findParameterUsages/kotlinHighlightParameterUsages.0.kt new file mode 100644 index 00000000000..a5d6fc5b34e --- /dev/null +++ b/idea/testData/findUsages/kotlin/findParameterUsages/kotlinHighlightParameterUsages.0.kt @@ -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: Int) { + println(foo) // not highlighted `foo` + } +} diff --git a/idea/testData/findUsages/kotlin/findParameterUsages/kotlinHighlightParameterUsages.results.txt b/idea/testData/findUsages/kotlin/findParameterUsages/kotlinHighlightParameterUsages.results.txt new file mode 100644 index 00000000000..7f451019e42 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findParameterUsages/kotlinHighlightParameterUsages.results.txt @@ -0,0 +1 @@ +Value read (9: 17) println(foo) // not highlighted `foo` diff --git a/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java b/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java index 96fc63d7795..f428e23f6cb 100644 --- a/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java @@ -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")