From 55f14ba8c0d35019b7881994e7d343f8f951d7f8 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gerasimov Date: Wed, 9 Nov 2016 13:14:10 +0300 Subject: [PATCH] Fixed method parameter default value processing in uast --- .../uast/kotlin/declarations/KotlinUMethod.kt | 21 ++++++++++++++++--- .../kotlin/declarations/KotlinUVariable.kt | 10 ++++++++- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUMethod.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUMethod.kt index 23365309f66..8b954ec8da9 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUMethod.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUMethod.kt @@ -16,6 +16,8 @@ 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.KtLightMethod 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.KtParameter 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.unwrap open class KotlinUMethod( psi: KtLightMethod, - containingElement: UElement? -) : JavaUMethod(psi, containingElement) { + override val containingElement: UElement? +) : UMethod, JavaUElementWithComments, PsiMethod by psi { override val psi: KtLightMethod = unwrap(psi) 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 { val bodyExpression = (kotlinOrigin as? KtFunction)?.bodyExpression ?: return@lz null getLanguagePlugin().convertElement(bodyExpression, this) as? UExpression diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt index f2c6fc2d03f..24066575bb8 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt @@ -18,6 +18,7 @@ package org.jetbrains.uast.kotlin import com.intellij.psi.* import org.jetbrains.kotlin.asJava.elements.KtLightElement +import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtVariableDeclaration import org.jetbrains.uast.* import org.jetbrains.uast.expressions.UReferenceExpression @@ -37,7 +38,14 @@ abstract class AbstractKotlinUVariable : AbstractJavaUVariable() { val initializerExpression = when (psi) { is UastKotlinPsiVariable -> psi.ktInitializer 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 } ?: return null return getLanguagePlugin().convertElement(initializerExpression, this) as? UExpression ?: UastEmptyExpression