Analysis API: rename KtConstantValue -> KtAnnotationValue as it is annotation specific

This commit is contained in:
Ilya Kirillov
2021-11-23 15:55:23 +01:00
parent 760e35d3b7
commit b1c8a9e886
23 changed files with 108 additions and 132 deletions
@@ -5,6 +5,8 @@
package org.jetbrains.kotlin.analysis.api.fir.components
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationValue
import org.jetbrains.kotlin.analysis.api.annotations.KtErrorValue
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirCompileTimeConstantEvaluator
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir
@@ -12,7 +14,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirEle
import org.jetbrains.kotlin.analysis.api.components.KtCompileTimeConstantProvider
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.evaluate.KtFirConstantValueConverter
import org.jetbrains.kotlin.analysis.api.symbols.markers.*
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
import org.jetbrains.kotlin.fir.expressions.FirWhenBranch
@@ -23,7 +24,7 @@ internal class KtFirCompileTimeConstantProvider(
override val token: ValidityToken,
) : KtCompileTimeConstantProvider(), KtFirAnalysisSessionComponent {
override fun evaluate(expression: KtExpression): KtConstantValue? = withValidityAssertion {
override fun evaluate(expression: KtExpression): KtAnnotationValue? = withValidityAssertion {
when (val fir = expression.getOrBuildFir(firResolveState)) {
is FirExpression -> {
try {
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.analysis.api.fir.evaluate
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtConstantValue
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationValue
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
@@ -37,7 +37,7 @@ internal object FirCompileTimeConstantEvaluator {
else -> null
}
fun evaluateAsKtConstantExpression(expression: FirExpression): KtConstantValue? {
fun evaluateAsKtConstantExpression(expression: FirExpression): KtAnnotationValue? {
val evaluated = evaluate(expression) ?: return null
return KtFirConstantValueConverter.toConstantValue(evaluated)
}
@@ -5,8 +5,7 @@
package org.jetbrains.kotlin.analysis.api.fir.evaluate
import org.jetbrains.kotlin.analysis.api.annotations.KtNamedConstantValue
import org.jetbrains.kotlin.analysis.api.symbols.markers.*
import org.jetbrains.kotlin.analysis.api.annotations.*
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol
@@ -30,21 +29,21 @@ internal object KtFirConstantValueConverter {
argumentMapping.map { (name, expression) ->
KtNamedConstantValue(
name,
expression.convertConstantExpression(session) ?: KtUnsupportedConstantValue
expression.convertConstantExpression(session) ?: KtUnsupportedAnnotationValue
)
}
fun <T> toConstantValue(
firConstExpression: FirConstExpression<T>,
): KtLiteralConstantValue<T> =
): KtLiteralAnnotationValue<T> =
firConstExpression.convertConstantExpression()
private fun <T> FirConstExpression<T>.convertConstantExpression(): KtLiteralConstantValue<T> =
KtLiteralConstantValue(kind, value, psi as? KtElement)
private fun <T> FirConstExpression<T>.convertConstantExpression(): KtLiteralAnnotationValue<T> =
KtLiteralAnnotationValue(kind, value, psi as? KtElement)
private fun Collection<FirExpression>.convertConstantExpression(
session: FirSession,
): Collection<KtConstantValue> =
): Collection<KtAnnotationValue> =
mapNotNull { it.convertConstantExpression(session) }
// Refer to KtLightAnnotationParameterList#checkIfToArrayConversionExpected
@@ -62,12 +61,12 @@ internal object KtFirConstantValueConverter {
}
}
private fun Collection<KtConstantValue>.toArrayConstantValueIfNecessary(sourcePsi: KtElement?): KtConstantValue? {
private fun Collection<KtAnnotationValue>.toArrayConstantValueIfNecessary(sourcePsi: KtElement?): KtAnnotationValue? {
val valueArgument = if (sourcePsi is ValueArgument) sourcePsi else
(sourcePsi?.parents?.firstOrNull { it is ValueArgument } as? ValueArgument)
val wrap = valueArgument?.arrayConversionExpected() ?: false
return if (wrap) {
KtArrayConstantValue(this, sourcePsi)
KtArrayAnnotationValue(this, sourcePsi)
} else {
singleOrNull()
}
@@ -76,12 +75,12 @@ internal object KtFirConstantValueConverter {
fun toConstantValue(
firExpression: FirExpression,
session: FirSession,
): KtConstantValue? =
): KtAnnotationValue? =
firExpression.convertConstantExpression(session)
private fun FirExpression.convertConstantExpression(
session: FirSession,
): KtConstantValue? {
): KtAnnotationValue? {
return when (this) {
is FirConstExpression<*> -> convertConstantExpression()
is FirNamedArgumentExpression -> {
@@ -95,7 +94,7 @@ internal object KtFirConstantValueConverter {
}
is FirArrayOfCall -> {
// Desugared collection literals.
KtArrayConstantValue(argumentList.arguments.convertConstantExpression(session), psi as? KtElement)
KtArrayAnnotationValue(argumentList.arguments.convertConstantExpression(session), psi as? KtElement)
}
is FirFunctionCall -> {
val reference = calleeReference as? FirResolvedNamedReference ?: return null
@@ -107,7 +106,7 @@ internal object KtFirConstantValueConverter {
argumentMapping?.entries?.forEach { (arg, param) ->
resultMap[param.name.asString()] = arg
}
KtAnnotationConstantValue(
KtAnnotationAnnotationValue(
resolvedSymbol.callableId.classId,
toNamedConstantValue(resultMap, session),
psi as? KtCallElement
@@ -127,7 +126,7 @@ internal object KtFirConstantValueConverter {
val reference = calleeReference as? FirResolvedNamedReference ?: return null
when (val resolvedSymbol = reference.resolvedSymbol) {
is FirEnumEntrySymbol -> {
KtEnumEntryConstantValue(resolvedSymbol.callableId, psi as? KtElement)
KtEnumEntryAnnotationValue(resolvedSymbol.callableId, psi as? KtElement)
}
else -> null
}
@@ -9,12 +9,11 @@ import org.jetbrains.kotlin.analysis.api.fir.annotations.mapAnnotationParameters
import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirCompileTimeConstantEvaluator
import org.jetbrains.kotlin.analysis.api.fir.evaluate.KtFirConstantValueConverter
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtConstantValueRenderer
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtUnsupportedConstantValue
import org.jetbrains.kotlin.analysis.api.annotations.KtUnsupportedAnnotationValue
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
@@ -59,7 +58,7 @@ private fun renderAndSortAnnotationArguments(descriptor: FirAnnotation, session:
private fun renderConstant(value: FirExpression, useSiteSession: FirSession): String {
val evaluated = FirCompileTimeConstantEvaluator.evaluate(value)
val constantValue = KtFirConstantValueConverter.toConstantValue(evaluated ?: value, useSiteSession)
?: KtUnsupportedConstantValue
?: KtUnsupportedAnnotationValue
return KtConstantValueRenderer.render(constantValue)
}
@@ -9,7 +9,6 @@ import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
import org.jetbrains.kotlin.analysis.api.fir.evaluate.KtFirConstantValueConverter
import org.jetbrains.kotlin.analysis.api.fir.findPsi
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirMemberPropertySymbolPointer
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.createSignature
@@ -20,7 +19,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyGetterSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySetterSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtConstantValue
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
import org.jetbrains.kotlin.analysis.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
@@ -9,7 +9,6 @@ import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
import org.jetbrains.kotlin.analysis.api.fir.evaluate.KtFirConstantValueConverter
import org.jetbrains.kotlin.analysis.api.fir.findPsi
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirJavaSyntheticPropertySymbolPointer
@@ -17,7 +16,6 @@ import org.jetbrains.kotlin.analysis.api.fir.utils.asKtInitializerValue
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
import org.jetbrains.kotlin.analysis.api.fir.utils.firRef
import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtConstantValue
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
import org.jetbrains.kotlin.analysis.api.types.KtType