mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
uast method call patterns: check method name matching before resolve
GitOrigin-RevId: 252352158df830d2bb5aa83b401642115fdb6ac3
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6439c9ac37
commit
2a56ad5b11
@@ -8,13 +8,11 @@ package com.intellij.patterns.uast
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.util.Key
|
||||
import com.intellij.openapi.util.RecursionManager
|
||||
import com.intellij.patterns.ElementPattern
|
||||
import com.intellij.patterns.ObjectPattern
|
||||
import com.intellij.patterns.PatternCondition
|
||||
import com.intellij.patterns.PsiJavaPatterns
|
||||
import com.intellij.patterns.*
|
||||
import com.intellij.patterns.StandardPatterns.string
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.util.ProcessingContext
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.uast.*
|
||||
|
||||
@@ -133,11 +131,21 @@ class UCallExpressionPattern : UElementPattern<UCallExpression, UCallExpressionP
|
||||
fun withAnyResolvedMethod(method: ElementPattern<out PsiMethod>): UCallExpressionPattern = withResolvedMethod(method, true)
|
||||
|
||||
fun withResolvedMethod(method: ElementPattern<out PsiMethod>,
|
||||
multiResolve: Boolean): UCallExpressionPattern = filterWithContext { uCallExpression, context ->
|
||||
if (multiResolve && uCallExpression is UMultiResolvable)
|
||||
uCallExpression.multiResolve().any { method.accepts(it.element, context) }
|
||||
else
|
||||
uCallExpression.resolve().let { method.accepts(it, context) }
|
||||
multiResolve: Boolean): UCallExpressionPattern {
|
||||
val nameCondition = ContainerUtil.findInstance(
|
||||
method.condition.conditions,
|
||||
PsiNamePatternCondition::class.java)
|
||||
return filterWithContext { uCallExpression, context ->
|
||||
if (nameCondition != null) {
|
||||
val methodName = uCallExpression.methodName
|
||||
if (methodName != null && !nameCondition.namePattern.accepts(methodName)) return@filterWithContext false
|
||||
}
|
||||
|
||||
if (multiResolve && uCallExpression is UMultiResolvable) {
|
||||
uCallExpression.multiResolve().any { method.accepts(it.element, context) }}
|
||||
else
|
||||
uCallExpression.resolve().let { method.accepts(it, context) }
|
||||
}
|
||||
}
|
||||
|
||||
fun withMethodName(namePattern: ElementPattern<String>): UCallExpressionPattern = filterWithContext { it, context ->
|
||||
|
||||
Reference in New Issue
Block a user