Uast: add "strict" parameter to getParentOfType()
This commit is contained in:
@@ -162,18 +162,18 @@ fun UCallExpression.getQualifiedCallElement(): UExpression {
|
|||||||
|
|
||||||
inline fun <reified T: UElement> UElement.getParentOfType(): T? = getParentOfType(T::class.java)
|
inline fun <reified T: UElement> UElement.getParentOfType(): T? = getParentOfType(T::class.java)
|
||||||
|
|
||||||
fun <T: UElement> UElement.getParentOfType(clazz: Class<T>): T? {
|
@JvmOverloads
|
||||||
tailrec fun findParent(element: UElement): UElement? {
|
fun <T: UElement> UElement.getParentOfType(clazz: Class<T>, strict: Boolean = true): T? {
|
||||||
val parent = element.parent
|
tailrec fun findParent(element: UElement?): UElement? {
|
||||||
return when {
|
return when {
|
||||||
parent == null -> null
|
element == null -> null
|
||||||
clazz.isInstance(parent) -> parent
|
clazz.isInstance(element) -> element
|
||||||
else -> findParent(parent)
|
else -> findParent(element.parent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
return findParent(this) as T
|
return findParent(if (!strict) this else parent) as? T
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T> UClass.findStaticMemberOfType(name: String, type: Class<out T>): T? {
|
fun <T> UClass.findStaticMemberOfType(name: String, type: Class<out T>): T? {
|
||||||
|
|||||||
Reference in New Issue
Block a user