KT-4274 #Fixed

This commit is contained in:
Alexey Sedunov
2013-12-16 16:04:57 +04:00
parent 59569f23cf
commit e13abf2444
11 changed files with 130 additions and 3 deletions
@@ -57,6 +57,25 @@ fun PsiElement.getParentByTypeAndPredicate<T: PsiElement>(
return null
}
fun PsiElement.getParentByTypesAndPredicate<T: PsiElement>(
strict : Boolean = false, vararg parentClasses : Class<T>, predicate: (T) -> Boolean
) : T? {
var element = if (strict) getParent() else this
while (element != null) {
[suppress("UNCHECKED_CAST")]
when {
parentClasses.any {parentClass -> parentClass.isInstance(element)} && predicate(element!! as T) ->
return element as T
element is PsiFile ->
return null
else ->
element = element!!.getParent()
}
}
return null
}
fun PsiElement.getParentByType<T: PsiElement>(parentClass : Class<T>, strict : Boolean = false) : T? {
return PsiTreeUtil.getParentOfType(this, parentClass, strict)
}