Fix search usages for invoke() extension operator (KT-18269)

#KT-18269 Fixed
This commit is contained in:
Nikolay Krasko
2017-06-14 16:54:41 +03:00
parent 46512f34e4
commit 018d4653e8
5 changed files with 37 additions and 2 deletions
@@ -27,8 +27,11 @@ import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOpt
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
import org.jetbrains.uast.*
import org.jetbrains.uast.UMethod
import org.jetbrains.uast.UastContext
import org.jetbrains.uast.convertOpt
class InvokeOperatorReferenceSearcher(
targetFunction: PsiElement,
@@ -44,7 +47,14 @@ class InvokeOperatorReferenceSearcher(
val uMethod = uastContext.convertOpt<UMethod>(targetDeclaration, null)
val uastParameters = uMethod?.uastParameters
callArgumentsSize = if (uastParameters != null && uastParameters.none { it.uastInitializer != null }) uastParameters.size else null
val isStableNumberOfArguments = uastParameters != null && uastParameters.none { it.uastInitializer != null }
callArgumentsSize = if (isStableNumberOfArguments) {
val numberOfArguments = uastParameters!!.size
when {
targetFunction.isExtensionDeclaration() -> numberOfArguments - 1
else -> numberOfArguments
}
} else null
}
override fun processPossibleReceiverExpression(expression: KtExpression) {