From 2ea59b6b6d6d7f863e683c8b352dbfe443cf2870 Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Thu, 25 Apr 2019 15:04:20 +0300 Subject: [PATCH] Uast: removing deprecated `UCallExpressionEx` usages GitOrigin-RevId: b350a2a0be59f19e52f7c78e38583a7ddaf729e5 --- .../intellij/patterns/uast/UastPatterns.kt | 2 +- .../src/org/jetbrains/uast/UastUtils.kt | 32 ++++--------------- .../uast/test/java/JavaUastApiTest.kt | 1 - 3 files changed, 8 insertions(+), 27 deletions(-) diff --git a/uast/uast-common/src/com/intellij/patterns/uast/UastPatterns.kt b/uast/uast-common/src/com/intellij/patterns/uast/UastPatterns.kt index 910fbf55dd78..2fb81d39c10e 100644 --- a/uast/uast-common/src/com/intellij/patterns/uast/UastPatterns.kt +++ b/uast/uast-common/src/com/intellij/patterns/uast/UastPatterns.kt @@ -77,7 +77,7 @@ private val constructorOrMethodCall = setOf(UastCallKind.CONSTRUCTOR_CALL, UastC private fun isCallExpressionParameter(argumentExpression: UExpression, parameterIndex: Int, callPattern: ElementPattern): Boolean { - val call = argumentExpression.uastParent.getUCallExpression(searchLimit = 2) as? UCallExpressionEx ?: return false + val call = argumentExpression.uastParent.getUCallExpression(searchLimit = 2) ?: return false if (call.kind !in constructorOrMethodCall) return false return call.getArgumentForParameter(parameterIndex) == unwrapPolyadic(argumentExpression) && callPattern.accepts(call) } diff --git a/uast/uast-common/src/org/jetbrains/uast/UastUtils.kt b/uast/uast-common/src/org/jetbrains/uast/UastUtils.kt index 56d579238365..f1415a26605e 100644 --- a/uast/uast-common/src/org/jetbrains/uast/UastUtils.kt +++ b/uast/uast-common/src/org/jetbrains/uast/UastUtils.kt @@ -206,29 +206,11 @@ fun UCallExpression.getParameterForArgument(arg: UExpression): PsiParameter? { val psiMethod = resolve() ?: return null val parameters = psiMethod.parameterList.parameters - if (this is UCallExpressionEx) - return parameters.withIndex().find { (i, p) -> - val argumentForParameter = getArgumentForParameter(i) ?: return@find false - if (argumentForParameter == arg) return@find true - if (arg is ULambdaExpression && arg.sourcePsi?.parent == argumentForParameter.sourcePsi) return@find true // workaround for KT-25297 - if (p.isVarArgs && argumentForParameter is UExpressionList) return@find argumentForParameter.expressions.contains(arg) - return@find false - }?.value - - // not everyone implements UCallExpressionEx, lets try to guess - val indexInArguments = valueArguments.indexOf(arg) - if (parameters.size == valueArguments.count()) { - return parameters.getOrNull(indexInArguments) - } - // probably it is a kotlin extension method - if (parameters.size - 1 == valueArguments.count()) { - val parameter = parameters.firstOrNull() ?: return null - val receiverType = receiverType ?: return null - if (!parameter.type.isAssignableFrom(receiverType)) return null - if (!parameters.drop(1).zip(valueArguments) - .all { (param, arg) -> arg.getExpressionType()?.let { param.type.isAssignableFrom(it) } == true }) return null - return parameters.getOrNull(indexInArguments + 1) - } - //named parameters are not processed - return null + return parameters.withIndex().find { (i, p) -> + val argumentForParameter = getArgumentForParameter(i) ?: return@find false + if (argumentForParameter == arg) return@find true + if (arg is ULambdaExpression && arg.sourcePsi?.parent == argumentForParameter.sourcePsi) return@find true // workaround for KT-25297 + if (p.isVarArgs && argumentForParameter is UExpressionList) return@find argumentForParameter.expressions.contains(arg) + return@find false + }?.value } diff --git a/uast/uast-tests/test/org/jetbrains/uast/test/java/JavaUastApiTest.kt b/uast/uast-tests/test/org/jetbrains/uast/test/java/JavaUastApiTest.kt index a5a5784d4342..26a9b12c69b9 100644 --- a/uast/uast-tests/test/org/jetbrains/uast/test/java/JavaUastApiTest.kt +++ b/uast/uast-tests/test/org/jetbrains/uast/test/java/JavaUastApiTest.kt @@ -111,7 +111,6 @@ class JavaUastApiTest : AbstractJavaUastTest() { doTest("Simple/CallExpression.java") { _, file -> fun assertArguments(argumentsInPositionalOrder: List?, refText: String) = file.findElementByTextFromPsi(refText).let { call -> - if (call !is UCallExpressionEx) throw AssertionError("${call.javaClass} is not a UCallExpressionEx") Assert.assertEquals( argumentsInPositionalOrder, call.resolve()?.let { psiMethod -> (0 until psiMethod.parameterList.parametersCount).map {