diff --git a/plugins/uast-common/src/org/jetbrains/uast/UastUtils.kt b/plugins/uast-common/src/org/jetbrains/uast/UastUtils.kt index 74eaa1d3f9e..ea4be15cd60 100644 --- a/plugins/uast-common/src/org/jetbrains/uast/UastUtils.kt +++ b/plugins/uast-common/src/org/jetbrains/uast/UastUtils.kt @@ -162,18 +162,18 @@ fun UCallExpression.getQualifiedCallElement(): UExpression { inline fun UElement.getParentOfType(): T? = getParentOfType(T::class.java) -fun UElement.getParentOfType(clazz: Class): T? { - tailrec fun findParent(element: UElement): UElement? { - val parent = element.parent +@JvmOverloads +fun UElement.getParentOfType(clazz: Class, strict: Boolean = true): T? { + tailrec fun findParent(element: UElement?): UElement? { return when { - parent == null -> null - clazz.isInstance(parent) -> parent - else -> findParent(parent) + element == null -> null + clazz.isInstance(element) -> element + else -> findParent(element.parent) } } @Suppress("UNCHECKED_CAST") - return findParent(this) as T + return findParent(if (!strict) this else parent) as? T } fun UClass.findStaticMemberOfType(name: String, type: Class): T? {