mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Uast: removing deprecated UCallExpressionEx usages
GitOrigin-RevId: b350a2a0be59f19e52f7c78e38583a7ddaf729e5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
68b91cc1bd
commit
2ea59b6b6d
@@ -77,7 +77,7 @@ private val constructorOrMethodCall = setOf(UastCallKind.CONSTRUCTOR_CALL, UastC
|
||||
private fun isCallExpressionParameter(argumentExpression: UExpression,
|
||||
parameterIndex: Int,
|
||||
callPattern: ElementPattern<UCallExpression>): 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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -111,7 +111,6 @@ class JavaUastApiTest : AbstractJavaUastTest() {
|
||||
doTest("Simple/CallExpression.java") { _, file ->
|
||||
fun assertArguments(argumentsInPositionalOrder: List<String?>?, refText: String) =
|
||||
file.findElementByTextFromPsi<UCallExpression>(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 {
|
||||
|
||||
Reference in New Issue
Block a user