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 afee7a813ad..333434c139d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinOverridingMethodReferenceSearcher.kt +++ b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinOverridingMethodReferenceSearcher.kt @@ -22,6 +22,8 @@ import com.intellij.psi.impl.search.MethodUsagesSearcher import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.UsageSearchContext import com.intellij.psi.search.searches.MethodReferencesSearch +import com.intellij.psi.util.MethodSignatureUtil +import com.intellij.psi.util.TypeConversionUtil import com.intellij.util.Processor import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.idea.references.KtSimpleNameReference @@ -85,7 +87,19 @@ class KotlinOverridingMethodReferenceSearcher : MethodUsagesSearcher() { if (refElement !is KtCallableDeclaration) { if (isWrongAccessorReference()) return true - return super.processInexactReference(ref, refElement, method, consumer) + if (refElement !is PsiMethod) return true + + val refMethodClass = refElement.containingClass ?: return true + val substitutor = TypeConversionUtil.getClassSubstitutor(myContainingClass, refMethodClass, PsiSubstitutor.EMPTY) + if (substitutor != null) { + val superSignature = method.getSignature(substitutor) + val refSignature = refElement.getSignature(PsiSubstitutor.EMPTY) + + if (MethodSignatureUtil.isSubsignature(superSignature, refSignature)) { + return super.processInexactReference(ref, refElement, method, consumer) + } + } + return true } var lightMethods = refElement.toLightMethods() diff --git a/idea/testData/findUsages/java/findJavaMethodUsages/MismatchedAccessor.0.java b/idea/testData/findUsages/java/findJavaMethodUsages/MismatchedAccessor.0.java new file mode 100644 index 00000000000..8865f514a02 --- /dev/null +++ b/idea/testData/findUsages/java/findJavaMethodUsages/MismatchedAccessor.0.java @@ -0,0 +1,11 @@ +// PSI_ELEMENT: com.intellij.psi.PsiMethod +// OPTIONS: usages +public class Bar { + public String getValue() { + return "value"; + } + + public String getValue(String param) { + return "value " + param; + } +} \ No newline at end of file diff --git a/idea/testData/findUsages/java/findJavaMethodUsages/MismatchedAccessor.1.kt b/idea/testData/findUsages/java/findJavaMethodUsages/MismatchedAccessor.1.kt new file mode 100644 index 00000000000..6434555d0fd --- /dev/null +++ b/idea/testData/findUsages/java/findJavaMethodUsages/MismatchedAccessor.1.kt @@ -0,0 +1,4 @@ +fun main(args: Array) { + println(Bar().value) + +} \ No newline at end of file diff --git a/idea/testData/findUsages/java/findJavaMethodUsages/MismatchedAccessor.results.txt b/idea/testData/findUsages/java/findJavaMethodUsages/MismatchedAccessor.results.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java b/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java index c1ed8dfb048..427e3709698 100644 --- a/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java @@ -1609,6 +1609,12 @@ public class FindUsagesTestGenerated extends AbstractFindUsagesTest { doTest(fileName); } + @TestMetadata("MismatchedAccessor.0.java") + public void testMismatchedAccessor() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/java/findJavaMethodUsages/MismatchedAccessor.0.java"); + doTest(fileName); + } + @TestMetadata("OverriddenMethodSyntheticAccessor.0.java") public void testOverriddenMethodSyntheticAccessor() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/java/findJavaMethodUsages/OverriddenMethodSyntheticAccessor.0.java");