Kapt: Add ability to get constant value from KtLightAnnotation
(cherry picked from commit 7180961)
This commit is contained in:
committed by
Yan Zhulanow
parent
0181dd000d
commit
884e653490
@@ -24,11 +24,13 @@ import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
|||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||||
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument
|
import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument
|
import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.VarargValueArgument
|
import org.jetbrains.kotlin.resolve.calls.model.VarargValueArgument
|
||||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||||
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
|
|
||||||
class KtLightAnnotation(
|
class KtLightAnnotation(
|
||||||
override val clsDelegate: PsiAnnotation,
|
override val clsDelegate: PsiAnnotation,
|
||||||
@@ -70,6 +72,13 @@ class KtLightAnnotation(
|
|||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getConstantValue(): Any? {
|
||||||
|
val expression = originalExpression as? KtExpression ?: return null
|
||||||
|
val annotationEntry = this@KtLightAnnotation.kotlinOrigin
|
||||||
|
val context = LightClassGenerationSupport.getInstance(project).analyze(annotationEntry)
|
||||||
|
return context[BindingContext.COMPILE_TIME_VALUE, expression]?.getValue(TypeUtils.NO_EXPECTED_TYPE)
|
||||||
|
}
|
||||||
|
|
||||||
private fun unwrapArray(arguments: List<ValueArgument>): PsiElement? {
|
private fun unwrapArray(arguments: List<ValueArgument>): PsiElement? {
|
||||||
val arrayInitializer = parent as? LightArrayInitializerValue ?: return null
|
val arrayInitializer = parent as? LightArrayInitializerValue ?: return null
|
||||||
|
|||||||
Reference in New Issue
Block a user