提交 5c8e4958 编写于 作者: N Nicolay Mitropolsky

Uast: exposing enum constants literal values (#KT-23456)

上级 12707a64
......@@ -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
}
......
......@@ -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
}
......
......@@ -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<UExpression> {
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) }
......
......@@ -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<UExpression> {
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
......
......@@ -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<UExpression> {
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) }
......
......@@ -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
......
......@@ -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
......
public enum Style {
@null SHEET {
@null SHEET("foo") {
public fun getExitAnimation() : java.lang.String {
return "bar"
}
......
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册