diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt index 204b32fed2e80249521ca5c53ee99fcc9cc91f1d..392872e9ce3d72d85c14800510d31345c66fa5ea 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt @@ -163,6 +163,10 @@ fun doConvertParent(element: UElement, parent: PsiElement?): UElement? { return result.initializingClass } + if (result is UCallExpression && result.uastParent is UEnumConstant) { + return result.uastParent + } + if (result is USwitchClauseExpressionWithBody && !isInConditionBranch(element, result)) { return result.body } diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt.172 b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt.172 index 07ea8c94168202b51a11113f0f0ad79d843ac7fe..3a251d0b00d98b1a88fb4a90a7357ea01bbc3ca3 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt.172 +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt.172 @@ -133,6 +133,10 @@ fun doConvertParent(element: UElement, parent: PsiElement?): UElement? { return result.initializingClass } + if (result is UCallExpression && result.uastParent is UEnumConstant) { + return result.uastParent + } + if (result is USwitchClauseExpressionWithBody && !isInConditionBranch(element, result)) { return result.body } 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 a3131087db0802307860e6dee873053a97f32903..fae24c8c8d202aeecc5e68fa765448113013952d 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 @@ -430,11 +430,13 @@ class KotlinUEnumConstant( override val valueArgumentCount: Int get() = psi.argumentList?.expressions?.size ?: 0 - override val valueArguments by lz { - psi.argumentList?.expressions?.map { - getLanguagePlugin().convertElement(it, this) as? UExpression ?: UastEmptyExpression - } ?: emptyList() - } + override val valueArguments by lz(fun(): List { + val ktEnumEntry = sourcePsi as? KtEnumEntry ?: return emptyList() + val ktSuperTypeCallEntry = ktEnumEntry.initializerList?.initializers?.firstOrNull() as? KtSuperTypeCallEntry ?: return emptyList() + return ktSuperTypeCallEntry.valueArguments.map { + it.getArgumentExpression()?.let { getLanguagePlugin().convertElement(it, this) } as? UExpression ?: UastEmptyExpression(this) + } + }) override val returnType: PsiType? get() = uastParent?.getAsJavaPsiElement(PsiClass::class.java)?.let { PsiTypesUtil.getClassType(it) } diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.172 b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.172 index 74f39e9ba9dc826434ba2f8f62305f56b7979c30..196eb2a12ea9e7086e13d3972e84e64d7eaa046a 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.172 +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.172 @@ -19,17 +19,13 @@ package org.jetbrains.uast.kotlin import com.intellij.psi.* import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.elements.KtLightElement -import org.jetbrains.kotlin.psi.KtNamedDeclaration -import org.jetbrains.kotlin.psi.KtParameter -import org.jetbrains.kotlin.psi.KtProperty -import org.jetbrains.kotlin.psi.KtVariableDeclaration +import org.jetbrains.kotlin.psi.* import org.jetbrains.uast.* import org.jetbrains.uast.internal.acceptList import org.jetbrains.uast.java.JavaAbstractUExpression import org.jetbrains.uast.java.JavaUAnnotation import org.jetbrains.uast.java.annotations import org.jetbrains.uast.kotlin.declarations.UastLightIdentifier -import org.jetbrains.uast.kotlin.internal.KotlinUElementWithComments import org.jetbrains.uast.kotlin.psi.UastKotlinPsiParameter import org.jetbrains.uast.kotlin.psi.UastKotlinPsiVariable import org.jetbrains.uast.visitor.UastVisitor @@ -256,11 +252,13 @@ open class KotlinUEnumConstant( override val valueArgumentCount: Int get() = psi.argumentList?.expressions?.size ?: 0 - override val valueArguments by lz { - psi.argumentList?.expressions?.map { - getLanguagePlugin().convertElement(it, this) as? UExpression ?: UastEmptyExpression - } ?: emptyList() + override val valueArguments by lz(fun(): List { + val ktEnumEntry = (psi as? KtLightElement<*, *>)?.kotlinOrigin as? KtEnumEntry ?: return emptyList() + val ktSuperTypeCallEntry = ktEnumEntry.initializerList?.initializers?.firstOrNull() as? KtSuperTypeCallEntry ?: return emptyList() + return ktSuperTypeCallEntry.valueArguments.map { + it.getArgumentExpression()?.let { getLanguagePlugin().convertElement(it, this) } as? UExpression ?: UastEmptyExpression } + }) override val returnType: PsiType? get() = psi.type diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.173 b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.173 index cecd4033cae4a0b203471e515d995d423a22b128..27e55774249cf9b320266cf89bfadcd769da31d6 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.173 +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUVariable.kt.173 @@ -411,11 +411,13 @@ class KotlinUEnumConstant( override val valueArgumentCount: Int get() = psi.argumentList?.expressions?.size ?: 0 - override val valueArguments by lz { - psi.argumentList?.expressions?.map { - getLanguagePlugin().convertElement(it, this) as? UExpression ?: UastEmptyExpression - } ?: emptyList() + override val valueArguments by lz(fun(): List { + val ktEnumEntry = sourcePsi as? KtEnumEntry ?: return emptyList() + val ktSuperTypeCallEntry = ktEnumEntry.initializerList?.initializers?.firstOrNull() as? KtSuperTypeCallEntry ?: return emptyList() + return ktSuperTypeCallEntry.valueArguments.map { + it.getArgumentExpression()?.let { getLanguagePlugin().convertElement(it, this) } as? UExpression ?: UastEmptyExpression } + }) override val returnType: PsiType? get() = uastParent?.getAsJavaPsiElement(PsiClass::class.java)?.let { PsiTypesUtil.getClassType(it) } diff --git a/plugins/uast-kotlin/testData/EnumValueMembers.log.txt b/plugins/uast-kotlin/testData/EnumValueMembers.log.txt index 3111002c5841b7c525cad489d838ebfa15202c69..ed0ac92f3241016908624cd41ab16da2faa844db 100644 --- a/plugins/uast-kotlin/testData/EnumValueMembers.log.txt +++ b/plugins/uast-kotlin/testData/EnumValueMembers.log.txt @@ -3,6 +3,7 @@ UFile (package = ) UEnumConstant (name = SHEET) UAnnotation (fqName = null) USimpleNameReferenceExpression (identifier = Style) + ULiteralExpression (value = "foo") UClass (name = null) UAnnotationMethod (name = getExitAnimation) UBlockExpression diff --git a/plugins/uast-kotlin/testData/EnumValueMembers.log.txt.172 b/plugins/uast-kotlin/testData/EnumValueMembers.log.txt.172 index 4a55c203622670d21ac28ca7259989757eb55b94..abd6fbd0e5803b23347bf48697554f296c0fd9d9 100644 --- a/plugins/uast-kotlin/testData/EnumValueMembers.log.txt.172 +++ b/plugins/uast-kotlin/testData/EnumValueMembers.log.txt.172 @@ -2,6 +2,7 @@ UFile (package = ) UClass (name = Style) UEnumConstant (name = SHEET) USimpleNameReferenceExpression (identifier = Style) + ULiteralExpression (value = "foo") UClass (name = null) UAnnotationMethod (name = getExitAnimation) UBlockExpression diff --git a/plugins/uast-kotlin/testData/EnumValueMembers.render.txt b/plugins/uast-kotlin/testData/EnumValueMembers.render.txt index 9c034b5632aca0e4cbb83d40a5dfa073fe3b860a..372d180d62f9c3d9536b9a6975101515410c63e3 100644 --- a/plugins/uast-kotlin/testData/EnumValueMembers.render.txt +++ b/plugins/uast-kotlin/testData/EnumValueMembers.render.txt @@ -1,5 +1,5 @@ public enum Style { - @null SHEET { + @null SHEET("foo") { public fun getExitAnimation() : java.lang.String { return "bar" } diff --git a/plugins/uast-kotlin/testData/EnumValueMembers.render.txt.172 b/plugins/uast-kotlin/testData/EnumValueMembers.render.txt.172 index a4325db460b147dd7304979fe3bee3d5aab5c8fa..2bcf8c64976e4518c785931f0874bfe586b7d1ba 100644 --- a/plugins/uast-kotlin/testData/EnumValueMembers.render.txt.172 +++ b/plugins/uast-kotlin/testData/EnumValueMembers.render.txt.172 @@ -1,6 +1,8 @@ public enum Style { - SHEET { - public fun getExitAnimation() : java.lang.String = "bar" + SHEET("foo") { + public fun getExitAnimation() : java.lang.String { + return "bar" + } fun SHEET() = UastEmptyExpression } private final var value: java.lang.String