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

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

上级 12707a64
...@@ -163,6 +163,10 @@ fun doConvertParent(element: UElement, parent: PsiElement?): UElement? { ...@@ -163,6 +163,10 @@ fun doConvertParent(element: UElement, parent: PsiElement?): UElement? {
return result.initializingClass return result.initializingClass
} }
if (result is UCallExpression && result.uastParent is UEnumConstant) {
return result.uastParent
}
if (result is USwitchClauseExpressionWithBody && !isInConditionBranch(element, result)) { if (result is USwitchClauseExpressionWithBody && !isInConditionBranch(element, result)) {
return result.body return result.body
} }
......
...@@ -133,6 +133,10 @@ fun doConvertParent(element: UElement, parent: PsiElement?): UElement? { ...@@ -133,6 +133,10 @@ fun doConvertParent(element: UElement, parent: PsiElement?): UElement? {
return result.initializingClass return result.initializingClass
} }
if (result is UCallExpression && result.uastParent is UEnumConstant) {
return result.uastParent
}
if (result is USwitchClauseExpressionWithBody && !isInConditionBranch(element, result)) { if (result is USwitchClauseExpressionWithBody && !isInConditionBranch(element, result)) {
return result.body return result.body
} }
......
...@@ -430,11 +430,13 @@ class KotlinUEnumConstant( ...@@ -430,11 +430,13 @@ class KotlinUEnumConstant(
override val valueArgumentCount: Int override val valueArgumentCount: Int
get() = psi.argumentList?.expressions?.size ?: 0 get() = psi.argumentList?.expressions?.size ?: 0
override val valueArguments by lz { override val valueArguments by lz(fun(): List<UExpression> {
psi.argumentList?.expressions?.map { val ktEnumEntry = sourcePsi as? KtEnumEntry ?: return emptyList()
getLanguagePlugin().convertElement(it, this) as? UExpression ?: UastEmptyExpression val ktSuperTypeCallEntry = ktEnumEntry.initializerList?.initializers?.firstOrNull() as? KtSuperTypeCallEntry ?: return emptyList()
} ?: emptyList() return ktSuperTypeCallEntry.valueArguments.map {
} it.getArgumentExpression()?.let { getLanguagePlugin().convertElement(it, this) } as? UExpression ?: UastEmptyExpression(this)
}
})
override val returnType: PsiType? override val returnType: PsiType?
get() = uastParent?.getAsJavaPsiElement(PsiClass::class.java)?.let { PsiTypesUtil.getClassType(it) } get() = uastParent?.getAsJavaPsiElement(PsiClass::class.java)?.let { PsiTypesUtil.getClassType(it) }
......
...@@ -19,17 +19,13 @@ package org.jetbrains.uast.kotlin ...@@ -19,17 +19,13 @@ package org.jetbrains.uast.kotlin
import com.intellij.psi.* import com.intellij.psi.*
import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.asJava.elements.KtLightElement
import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.psi.KtVariableDeclaration
import org.jetbrains.uast.* import org.jetbrains.uast.*
import org.jetbrains.uast.internal.acceptList import org.jetbrains.uast.internal.acceptList
import org.jetbrains.uast.java.JavaAbstractUExpression import org.jetbrains.uast.java.JavaAbstractUExpression
import org.jetbrains.uast.java.JavaUAnnotation import org.jetbrains.uast.java.JavaUAnnotation
import org.jetbrains.uast.java.annotations import org.jetbrains.uast.java.annotations
import org.jetbrains.uast.kotlin.declarations.UastLightIdentifier 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.UastKotlinPsiParameter
import org.jetbrains.uast.kotlin.psi.UastKotlinPsiVariable import org.jetbrains.uast.kotlin.psi.UastKotlinPsiVariable
import org.jetbrains.uast.visitor.UastVisitor import org.jetbrains.uast.visitor.UastVisitor
...@@ -256,11 +252,13 @@ open class KotlinUEnumConstant( ...@@ -256,11 +252,13 @@ open class KotlinUEnumConstant(
override val valueArgumentCount: Int override val valueArgumentCount: Int
get() = psi.argumentList?.expressions?.size ?: 0 get() = psi.argumentList?.expressions?.size ?: 0
override val valueArguments by lz { override val valueArguments by lz(fun(): List<UExpression> {
psi.argumentList?.expressions?.map { val ktEnumEntry = (psi as? KtLightElement<*, *>)?.kotlinOrigin as? KtEnumEntry ?: return emptyList()
getLanguagePlugin().convertElement(it, this) as? UExpression ?: UastEmptyExpression val ktSuperTypeCallEntry = ktEnumEntry.initializerList?.initializers?.firstOrNull() as? KtSuperTypeCallEntry ?: return emptyList()
} ?: emptyList() return ktSuperTypeCallEntry.valueArguments.map {
it.getArgumentExpression()?.let { getLanguagePlugin().convertElement(it, this) } as? UExpression ?: UastEmptyExpression
} }
})
override val returnType: PsiType? override val returnType: PsiType?
get() = psi.type get() = psi.type
......
...@@ -411,11 +411,13 @@ class KotlinUEnumConstant( ...@@ -411,11 +411,13 @@ class KotlinUEnumConstant(
override val valueArgumentCount: Int override val valueArgumentCount: Int
get() = psi.argumentList?.expressions?.size ?: 0 get() = psi.argumentList?.expressions?.size ?: 0
override val valueArguments by lz { override val valueArguments by lz(fun(): List<UExpression> {
psi.argumentList?.expressions?.map { val ktEnumEntry = sourcePsi as? KtEnumEntry ?: return emptyList()
getLanguagePlugin().convertElement(it, this) as? UExpression ?: UastEmptyExpression val ktSuperTypeCallEntry = ktEnumEntry.initializerList?.initializers?.firstOrNull() as? KtSuperTypeCallEntry ?: return emptyList()
} ?: emptyList() return ktSuperTypeCallEntry.valueArguments.map {
it.getArgumentExpression()?.let { getLanguagePlugin().convertElement(it, this) } as? UExpression ?: UastEmptyExpression
} }
})
override val returnType: PsiType? override val returnType: PsiType?
get() = uastParent?.getAsJavaPsiElement(PsiClass::class.java)?.let { PsiTypesUtil.getClassType(it) } get() = uastParent?.getAsJavaPsiElement(PsiClass::class.java)?.let { PsiTypesUtil.getClassType(it) }
......
...@@ -3,6 +3,7 @@ UFile (package = ) ...@@ -3,6 +3,7 @@ UFile (package = )
UEnumConstant (name = SHEET) UEnumConstant (name = SHEET)
UAnnotation (fqName = null) UAnnotation (fqName = null)
USimpleNameReferenceExpression (identifier = Style) USimpleNameReferenceExpression (identifier = Style)
ULiteralExpression (value = "foo")
UClass (name = null) UClass (name = null)
UAnnotationMethod (name = getExitAnimation) UAnnotationMethod (name = getExitAnimation)
UBlockExpression UBlockExpression
......
...@@ -2,6 +2,7 @@ UFile (package = ) ...@@ -2,6 +2,7 @@ UFile (package = )
UClass (name = Style) UClass (name = Style)
UEnumConstant (name = SHEET) UEnumConstant (name = SHEET)
USimpleNameReferenceExpression (identifier = Style) USimpleNameReferenceExpression (identifier = Style)
ULiteralExpression (value = "foo")
UClass (name = null) UClass (name = null)
UAnnotationMethod (name = getExitAnimation) UAnnotationMethod (name = getExitAnimation)
UBlockExpression UBlockExpression
......
public enum Style { public enum Style {
@null SHEET { @null SHEET("foo") {
public fun getExitAnimation() : java.lang.String { public fun getExitAnimation() : java.lang.String {
return "bar" return "bar"
} }
......
public enum Style { public enum Style {
SHEET { SHEET("foo") {
public fun getExitAnimation() : java.lang.String = "bar" public fun getExitAnimation() : java.lang.String {
return "bar"
}
fun SHEET() = UastEmptyExpression fun SHEET() = UastEmptyExpression
} }
private final var value: java.lang.String private final var value: java.lang.String
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册