191: Uast: isJvmElement check added to the newly added conversion methods (EA-125791)

This commit is contained in:
Nicolay Mitropolsky
2019-03-15 21:26:26 +03:00
committed by Nicolay Mitropolsky
parent a07502374e
commit 0d2426b081
@@ -143,6 +143,7 @@ class KotlinUastLanguagePlugin : UastLanguagePlugin {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
fun <T : UElement> convertElement(element: PsiElement, parent: UElement?, expectedTypes: Array<out Class<out T>>): T? { fun <T : UElement> convertElement(element: PsiElement, parent: UElement?, expectedTypes: Array<out Class<out T>>): T? {
if (!element.isJvmElement) return null
val nonEmptyExpectedTypes = expectedTypes.nonEmptyOr(DEFAULT_TYPES_LIST) val nonEmptyExpectedTypes = expectedTypes.nonEmptyOr(DEFAULT_TYPES_LIST)
return (convertDeclaration(element, parent, nonEmptyExpectedTypes) return (convertDeclaration(element, parent, nonEmptyExpectedTypes)
?: KotlinConverter.convertPsiElement(element, parent, nonEmptyExpectedTypes)) as? T ?: KotlinConverter.convertPsiElement(element, parent, nonEmptyExpectedTypes)) as? T
@@ -153,13 +154,15 @@ class KotlinUastLanguagePlugin : UastLanguagePlugin {
} }
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
override fun <T : UElement> convertToAlternatives(element: PsiElement, requiredTypes: Array<out Class<out T>>): Sequence<T> = when { override fun <T : UElement> convertToAlternatives(element: PsiElement, requiredTypes: Array<out Class<out T>>): Sequence<T> =
element is KtFile -> KotlinConverter.convertKtFile(element, null, requiredTypes) as Sequence<T> if (!element.isJvmElement) emptySequence() else when {
(element is KtProperty && !element.isLocal) -> KotlinConverter.convertNonLocalProperty(element, null, requiredTypes) as Sequence<T> element is KtFile -> KotlinConverter.convertKtFile(element, null, requiredTypes) as Sequence<T>
element is KtParameter -> KotlinConverter.convertParameter(element, null, requiredTypes) as Sequence<T> (element is KtProperty && !element.isLocal) ->
element is KtClassOrObject -> KotlinConverter.convertClassOrObject(element, null, requiredTypes) as Sequence<T> KotlinConverter.convertNonLocalProperty(element, null, requiredTypes) as Sequence<T>
else -> sequenceOf(convertElementWithParent(element, requiredTypes.nonEmptyOr(DEFAULT_TYPES_LIST)) as? T).filterNotNull() element is KtParameter -> KotlinConverter.convertParameter(element, null, requiredTypes) as Sequence<T>
} element is KtClassOrObject -> KotlinConverter.convertClassOrObject(element, null, requiredTypes) as Sequence<T>
else -> sequenceOf(convertElementWithParent(element, requiredTypes.nonEmptyOr(DEFAULT_TYPES_LIST)) as? T).filterNotNull()
}
} }
internal inline fun <reified ActualT : UElement> Class<*>?.el(f: () -> UElement?): UElement? { internal inline fun <reified ActualT : UElement> Class<*>?.el(f: () -> UElement?): UElement? {