mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Uast: a few util methods added
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user