diff --git a/idea/idea-analysis/idea-analysis.iml b/idea/idea-analysis/idea-analysis.iml
index 3523fabbbf3..e624de9592d 100644
--- a/idea/idea-analysis/idea-analysis.iml
+++ b/idea/idea-analysis/idea-analysis.iml
@@ -35,5 +35,6 @@
+
\ No newline at end of file
diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/operators/InvokeOperatorReferenceSearcher.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/operators/InvokeOperatorReferenceSearcher.kt
index 3f49603a055..6c1dac649e2 100644
--- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/operators/InvokeOperatorReferenceSearcher.kt
+++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/operators/InvokeOperatorReferenceSearcher.kt
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.idea.search.usagesSearch.operators
+import com.intellij.openapi.components.ServiceManager
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiReference
import com.intellij.psi.search.SearchRequestCollector
@@ -27,6 +28,7 @@ import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
+import org.jetbrains.uast.*
class InvokeOperatorReferenceSearcher(
targetFunction: PsiElement,
@@ -35,6 +37,15 @@ class InvokeOperatorReferenceSearcher(
optimizer: SearchRequestCollector,
options: KotlinReferencesSearchOptions
) : OperatorReferenceSearcher(targetFunction, searchScope, consumer, optimizer, options, wordsToSearch = emptyList()) {
+ private val callArgumentsSize: Int?
+
+ init {
+ val uastContext = ServiceManager.getService(targetFunction.project, UastContext::class.java)
+ val uMethod = uastContext.convertOpt(targetDeclaration, null)
+ val uastParameters = uMethod?.uastParameters
+
+ callArgumentsSize = if (uastParameters != null && uastParameters.none { it.uastInitializer != null }) uastParameters.size else null
+ }
override fun processPossibleReceiverExpression(expression: KtExpression) {
val callExpression = expression.parent as? KtCallExpression ?: return
@@ -44,6 +55,12 @@ class InvokeOperatorReferenceSearcher(
override fun isReferenceToCheck(ref: PsiReference) = ref is KtInvokeFunctionReference
override fun extractReference(element: KtElement): PsiReference? {
- return (element as? KtCallExpression)?.references?.firstIsInstance()
+ val callExpression = element as? KtCallExpression ?: return null
+
+ if (callArgumentsSize != null && callArgumentsSize != callExpression.valueArguments.size) {
+ return null
+ }
+
+ return callExpression.references.firstIsInstance()
}
}
\ No newline at end of file
diff --git a/idea/testData/findUsages/kotlin/conventions/invoke.0.kt b/idea/testData/findUsages/kotlin/conventions/invoke.0.kt
index fee1763a7b9..8988752c597 100644
--- a/idea/testData/findUsages/kotlin/conventions/invoke.0.kt
+++ b/idea/testData/findUsages/kotlin/conventions/invoke.0.kt
@@ -26,4 +26,8 @@ class C(): B(12) {
fun cTest(c: C) {
c(5)
+
+ some(12, "Irrelevant usage")
}
+
+fun some(i: Int, s: String) {}
diff --git a/idea/testData/findUsages/kotlin/conventions/invoke.log b/idea/testData/findUsages/kotlin/conventions/invoke.log
index 8ea9945459f..a3daec3c81d 100644
--- a/idea/testData/findUsages/kotlin/conventions/invoke.log
+++ b/idea/testData/findUsages/kotlin/conventions/invoke.log
@@ -1,8 +1,6 @@
Checked type of pack.f()
Checked type of v
Resolved c(5)
-Resolved f()
-Resolved f()
Resolved f()(2)
Resolved listOf(Obj)[0](1)
Resolved v(1)