Fixed method parameter default value processing in uast
This commit is contained in:
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.uast.kotlin.declarations
|
package org.jetbrains.uast.kotlin.declarations
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiMethod
|
||||||
|
import com.intellij.psi.PsiNameIdentifierOwner
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethodImpl
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethodImpl
|
||||||
@@ -24,17 +26,30 @@ import org.jetbrains.kotlin.psi.KtCallableDeclaration
|
|||||||
import org.jetbrains.kotlin.psi.KtFunction
|
import org.jetbrains.kotlin.psi.KtFunction
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
import org.jetbrains.kotlin.psi.KtParameter
|
||||||
import org.jetbrains.uast.*
|
import org.jetbrains.uast.*
|
||||||
import org.jetbrains.uast.java.JavaUMethod
|
import org.jetbrains.uast.java.JavaUAnnotation
|
||||||
|
import org.jetbrains.uast.java.annotations
|
||||||
|
import org.jetbrains.uast.java.internal.JavaUElementWithComments
|
||||||
|
import org.jetbrains.uast.kotlin.KotlinUParameter
|
||||||
import org.jetbrains.uast.kotlin.lz
|
import org.jetbrains.uast.kotlin.lz
|
||||||
import org.jetbrains.uast.kotlin.unwrap
|
import org.jetbrains.uast.kotlin.unwrap
|
||||||
|
|
||||||
open class KotlinUMethod(
|
open class KotlinUMethod(
|
||||||
psi: KtLightMethod,
|
psi: KtLightMethod,
|
||||||
containingElement: UElement?
|
override val containingElement: UElement?
|
||||||
) : JavaUMethod(psi, containingElement) {
|
) : UMethod, JavaUElementWithComments, PsiMethod by psi {
|
||||||
override val psi: KtLightMethod = unwrap<UMethod, KtLightMethod>(psi)
|
override val psi: KtLightMethod = unwrap<UMethod, KtLightMethod>(psi)
|
||||||
private val kotlinOrigin = (psi.originalElement as KtLightElement<*, *>).kotlinOrigin
|
private val kotlinOrigin = (psi.originalElement as KtLightElement<*, *>).kotlinOrigin
|
||||||
|
|
||||||
|
override val annotations by lz { psi.annotations.map { JavaUAnnotation(it, this) } }
|
||||||
|
|
||||||
|
override val uastParameters by lz {
|
||||||
|
psi.parameterList.parameters.map { KotlinUParameter(it, this) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override val uastAnchor: UElement
|
||||||
|
get() = UIdentifier((psi.originalElement as? PsiNameIdentifierOwner)?.nameIdentifier ?: psi.nameIdentifier, this)
|
||||||
|
|
||||||
|
|
||||||
override val uastBody by lz {
|
override val uastBody by lz {
|
||||||
val bodyExpression = (kotlinOrigin as? KtFunction)?.bodyExpression ?: return@lz null
|
val bodyExpression = (kotlinOrigin as? KtFunction)?.bodyExpression ?: return@lz null
|
||||||
getLanguagePlugin().convertElement(bodyExpression, this) as? UExpression
|
getLanguagePlugin().convertElement(bodyExpression, this) as? UExpression
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package org.jetbrains.uast.kotlin
|
|||||||
|
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||||
|
import org.jetbrains.kotlin.psi.KtParameter
|
||||||
import org.jetbrains.kotlin.psi.KtVariableDeclaration
|
import org.jetbrains.kotlin.psi.KtVariableDeclaration
|
||||||
import org.jetbrains.uast.*
|
import org.jetbrains.uast.*
|
||||||
import org.jetbrains.uast.expressions.UReferenceExpression
|
import org.jetbrains.uast.expressions.UReferenceExpression
|
||||||
@@ -37,7 +38,14 @@ abstract class AbstractKotlinUVariable : AbstractJavaUVariable() {
|
|||||||
val initializerExpression = when (psi) {
|
val initializerExpression = when (psi) {
|
||||||
is UastKotlinPsiVariable -> psi.ktInitializer
|
is UastKotlinPsiVariable -> psi.ktInitializer
|
||||||
is UastKotlinPsiParameter -> psi.ktDefaultValue
|
is UastKotlinPsiParameter -> psi.ktDefaultValue
|
||||||
is KtLightElement<*, *> -> (psi.kotlinOrigin as? KtVariableDeclaration)?.initializer
|
is KtLightElement<*, *> -> {
|
||||||
|
val origin = psi.kotlinOrigin
|
||||||
|
when (origin) {
|
||||||
|
is KtVariableDeclaration -> origin.initializer
|
||||||
|
is KtParameter -> origin.defaultValue
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
else -> null
|
else -> null
|
||||||
} ?: return null
|
} ?: return null
|
||||||
return getLanguagePlugin().convertElement(initializerExpression, this) as? UExpression ?: UastEmptyExpression
|
return getLanguagePlugin().convertElement(initializerExpression, this) as? UExpression ?: UastEmptyExpression
|
||||||
|
|||||||
Reference in New Issue
Block a user