From 5380b63522465fd23024bc85c91da37cdbb7a403 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 14 Jul 2016 14:04:03 +0200 Subject: [PATCH] don't consider calls to methods with the same name as a property to be calls to accessors of that property #KT-12813 Fixed --- .../KotlinOverridingMethodReferenceSearcher.kt | 7 ++++++- .../kotlinPropertySameNameAsMethodUsages.0.kt | 16 ++++++++++++++++ ...linPropertySameNameAsMethodUsages.results.txt | 1 + .../findUsages/FindUsagesTestGenerated.java | 6 ++++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPropertySameNameAsMethodUsages.0.kt create mode 100644 idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPropertySameNameAsMethodUsages.results.txt diff --git a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinOverridingMethodReferenceSearcher.kt b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinOverridingMethodReferenceSearcher.kt index dbe49f297f7..afee7a813ad 100644 --- a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinOverridingMethodReferenceSearcher.kt +++ b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinOverridingMethodReferenceSearcher.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.getPropertyNamesCandidatesByAccessorName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtCallableDeclaration +import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.utils.ifEmpty @@ -50,7 +51,8 @@ class KotlinOverridingMethodReferenceSearcher : MethodUsagesSearcher() { .restrictToKotlinSources() if (searchScope === GlobalSearchScope.EMPTY_SCOPE) return@runReadActionInSmartMode - for (name in getPropertyNamesCandidatesByAccessorName(Name.identifier(method.name))) { + val nameCandidates = getPropertyNamesCandidatesByAccessorName(Name.identifier(method.name)) + for (name in nameCandidates) { p.optimizer.searchWord( name.asString(), searchScope, @@ -93,6 +95,9 @@ class KotlinOverridingMethodReferenceSearcher : MethodUsagesSearcher() { if (isWrongAccessorReference()) return true lightMethods = lightMethods.filter { JvmAbi.isGetterName(it.name) == isGetter } } + if (refElement is KtNamedFunction) { + lightMethods = lightMethods.filter { it.name == method.name } + } return lightMethods.all { super.processInexactReference(ref, it, method, consumer) } } diff --git a/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPropertySameNameAsMethodUsages.0.kt b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPropertySameNameAsMethodUsages.0.kt new file mode 100644 index 00000000000..11fb57b318c --- /dev/null +++ b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPropertySameNameAsMethodUsages.0.kt @@ -0,0 +1,16 @@ +// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtProperty +// OPTIONS: usages +class P + +interface C { + val p: P // set caret at "p" and try find usages + fun p(param: Any) +} + +fun C.usageCorrect() { + println(p) +} + +fun C.usageIncorrect() { + p("ok") +} \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPropertySameNameAsMethodUsages.results.txt b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPropertySameNameAsMethodUsages.results.txt new file mode 100644 index 00000000000..f28e5923bc6 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPropertySameNameAsMethodUsages.results.txt @@ -0,0 +1 @@ +Value read 11 println(p) diff --git a/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java b/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java index e8c57c58477..ad59e5f3e84 100644 --- a/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java @@ -1014,6 +1014,12 @@ public class FindUsagesTestGenerated extends AbstractFindUsagesTest { doTest(fileName); } + @TestMetadata("kotlinPropertySameNameAsMethodUsages.0.kt") + public void testKotlinPropertySameNameAsMethodUsages() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPropertySameNameAsMethodUsages.0.kt"); + doTest(fileName); + } + @TestMetadata("kotlinPropertyUsages.0.kt") public void testKotlinPropertyUsages() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findPropertyUsages/kotlinPropertyUsages.0.kt");