Uast: a few util methods added

This commit is contained in:
Nicolay Mitropolsky
2018-08-06 15:01:30 +03:00
parent 49fe41d4cb
commit a162c714c2
2 changed files with 9 additions and 2 deletions
@@ -105,6 +105,11 @@ private class UastPatternAdapter(
override fun getCondition(): ElementPatternCondition<PsiElement> = condition
}
fun ElementPattern<out UElement>.asPsiPattern(vararg supportedUElementTypes: Class<out UElement>): ElementPattern<PsiElement> = UastPatternAdapter(
this::accepts,
if (supportedUElementTypes.isNotEmpty()) supportedUElementTypes.toList() else listOf(UElement::class.java)
)
private class UastReferenceProviderAdapter(val provider: UastReferenceProvider) : PsiReferenceProvider() {
override fun getReferencesByElement(element: PsiElement, context: ProcessingContext): Array<PsiReference> {
val uElement = getOrCreateCachedElement(element, context, provider.supportedUElementTypes) ?: return PsiReference.EMPTY_ARRAY
@@ -105,10 +105,12 @@ fun UElement.getContainingVariable(): PsiVariable? = getContainingUVariable()?.p
replaceWith = ReplaceWith("PsiTreeUtil.getParentOfType(this, PsiClass::class.java)"))
fun PsiElement?.getContainingClass(): PsiClass? = this?.let { PsiTreeUtil.getParentOfType(it, PsiClass::class.java) }
fun PsiElement?.findContainingUClass(): UClass? {
fun PsiElement?.findContainingUClass(): UClass? = findContaining(UClass::class.java)
fun <T : UElement> PsiElement?.findContaining(clazz: Class<T>): T? {
var element = this
while (element != null && element !is PsiFileSystemItem) {
element.toUElementOfType<UClass>()?.let { return it }
element.toUElement(clazz)?.let { return it }
element = element.parent
}
return null