Uast: exposing enum constants literal values (#KT-23456)
This commit is contained in:
@@ -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) }
|
||||
|
||||
+7
-9
@@ -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
|
||||
|
||||
+6
-4
@@ -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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
public enum Style {
|
||||
@null SHEET {
|
||||
@null SHEET("foo") {
|
||||
public fun getExitAnimation() : java.lang.String {
|
||||
return "bar"
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user