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 af72eee2a01..c9fee2e6159 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 @@ -47,7 +47,7 @@ class InvokeOperatorReferenceSearcher( val uMethod = uastContext.convertOpt(targetDeclaration, null) val uastParameters = uMethod?.uastParameters - val isStableNumberOfArguments = uastParameters != null && uastParameters.none { it.uastInitializer != null } + val isStableNumberOfArguments = uastParameters != null && uastParameters.none { it.uastInitializer != null || it.isVarArgs } callArgumentsSize = if (isStableNumberOfArguments) { val numberOfArguments = uastParameters!!.size when { diff --git a/idea/testData/findUsages/kotlin/conventions/invokeWithVarArg.0.kt b/idea/testData/findUsages/kotlin/conventions/invokeWithVarArg.0.kt new file mode 100644 index 00000000000..79702835485 --- /dev/null +++ b/idea/testData/findUsages/kotlin/conventions/invokeWithVarArg.0.kt @@ -0,0 +1,15 @@ +// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtNamedFunction +// OPTIONS: usages +package pack + +class P { + operator fun invoke(vararg i: Int) = 1 +} + +fun f(p: P) { + p() + p(1, 2) + p(1) + p.invoke() + p.invoke(1, 2, 3) +} \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/conventions/invokeWithVarArg.log b/idea/testData/findUsages/kotlin/conventions/invokeWithVarArg.log new file mode 100644 index 00000000000..5a414cc1ddc --- /dev/null +++ b/idea/testData/findUsages/kotlin/conventions/invokeWithVarArg.log @@ -0,0 +1,7 @@ +Resolved p() +Resolved p(1) +Resolved p(1, 2) +Searched references to pack.P +Searched references to parameter p of pack.f(p: P) in non-Java files +Used plain search of pack.P.invoke(vararg i: Int) in LocalSearchScope: + CLASS:P \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/conventions/invokeWithVarArg.results.txt b/idea/testData/findUsages/kotlin/conventions/invokeWithVarArg.results.txt new file mode 100644 index 00000000000..6e8a9a4235d --- /dev/null +++ b/idea/testData/findUsages/kotlin/conventions/invokeWithVarArg.results.txt @@ -0,0 +1,5 @@ +Function call 13 p.invoke() +Function call 14 p.invoke(1, 2, 3) +Implicit 'invoke' 10 p() +Implicit 'invoke' 11 p(1, 2) +Implicit 'invoke' 12 p(1) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java b/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java index 8a0b2fec71a..d8cf05f6594 100644 --- a/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java @@ -139,6 +139,12 @@ public class FindUsagesTestGenerated extends AbstractFindUsagesTest { doTest(fileName); } + @TestMetadata("invokeWithVarArg.0.kt") + public void testInvokeWithVarArg() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/conventions/invokeWithVarArg.0.kt"); + doTest(fileName); + } + @TestMetadata("plus.0.kt") public void testPlus() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/conventions/plus.0.kt");