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
|
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? {
|
|||||||
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(
|
|||||||
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) }
|
||||||
|
|||||||
+7
-9
@@ -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(
|
|||||||
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
|
||||||
|
|||||||
+6
-4
@@ -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 = )
|
|||||||
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 = )
|
|||||||
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
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
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
|
||||||
|
|||||||
Reference in New Issue
Block a user