Analysis API: add KDoc, small cosmetic improvements
This commit is contained in:
+6
-5
@@ -16,21 +16,22 @@ import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||
import org.jetbrains.kotlin.fir.types.classId
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
internal fun mapAnnotationParameters(annotation: FirAnnotation, session: FirSession): Map<String, FirExpression> {
|
||||
if (annotation.resolved) return annotation.argumentMapping.mapping.mapKeys { (name, _) -> name.identifier }
|
||||
internal fun mapAnnotationParameters(annotation: FirAnnotation, session: FirSession): Map<Name, FirExpression> {
|
||||
if (annotation.resolved) return annotation.argumentMapping.mapping.mapKeys { (name, _) -> name }
|
||||
if (annotation !is FirAnnotationCall) return emptyMap()
|
||||
val annotationCone = annotation.annotationTypeRef.coneType as? ConeClassLikeType ?: return emptyMap()
|
||||
|
||||
val annotationPrimaryCtor = (annotationCone.lookupTag.toSymbol(session)?.fir as? FirRegularClass)?.primaryConstructorIfAny(session)?.fir
|
||||
val annotationCtorParameterNames = annotationPrimaryCtor?.valueParameters?.map { it.name }
|
||||
|
||||
val resultMap = mutableMapOf<String, FirExpression>()
|
||||
val resultMap = mutableMapOf<Name, FirExpression>()
|
||||
|
||||
val namesSequence = annotationCtorParameterNames?.asSequence()?.iterator()
|
||||
|
||||
for (argument in annotation.argumentList.arguments.filterIsInstance<FirNamedArgumentExpression>()) {
|
||||
resultMap[argument.name.asString()] = argument.expression
|
||||
resultMap[argument.name] = argument.expression
|
||||
}
|
||||
|
||||
if (namesSequence != null) {
|
||||
@@ -38,7 +39,7 @@ internal fun mapAnnotationParameters(annotation: FirAnnotation, session: FirSess
|
||||
if (argument is FirNamedArgumentExpression) continue
|
||||
|
||||
while (namesSequence.hasNext()) {
|
||||
val name = namesSequence.next().asString()
|
||||
val name = namesSequence.next()
|
||||
if (!resultMap.contains(name)) {
|
||||
resultMap[name] = argument
|
||||
break
|
||||
|
||||
+10
-6
@@ -17,13 +17,14 @@ import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.parents
|
||||
import org.jetbrains.kotlin.resolve.ArrayFqNames
|
||||
|
||||
internal object FirAnnotationValueConverter {
|
||||
fun toNamedConstantValue(
|
||||
argumentMapping: Map<String, FirExpression>,
|
||||
argumentMapping: Map<Name, FirExpression>,
|
||||
session: FirSession,
|
||||
): List<KtNamedAnnotationValue> =
|
||||
argumentMapping.map { (name, expression) ->
|
||||
@@ -100,9 +101,9 @@ internal object FirAnnotationValueConverter {
|
||||
is FirConstructorSymbol -> {
|
||||
val classSymbol = resolvedSymbol.getContainingClassSymbol(session) ?: return null
|
||||
if ((classSymbol.fir as? FirClass)?.classKind == ClassKind.ANNOTATION_CLASS) {
|
||||
val resultMap = mutableMapOf<String, FirExpression>()
|
||||
val resultMap = mutableMapOf<Name, FirExpression>()
|
||||
argumentMapping?.entries?.forEach { (arg, param) ->
|
||||
resultMap[param.name.asString()] = arg
|
||||
resultMap[param.name] = arg
|
||||
}
|
||||
KtAnnotationApplicationValue(
|
||||
KtAnnotationApplication(
|
||||
@@ -135,9 +136,12 @@ internal object FirAnnotationValueConverter {
|
||||
is FirGetClassCall -> {
|
||||
val symbol = (argument as FirResolvedQualifier).symbol
|
||||
when {
|
||||
symbol == null -> KtErrorClassAnnotationValue(sourcePsi)
|
||||
symbol.classId.isLocal -> KtLocalKClassAnnotationValue(symbol.fir.psi as KtClassOrObject, sourcePsi)
|
||||
else -> KtNonLocalKClassAnnotationValue(symbol.classId, sourcePsi)
|
||||
symbol == null -> KtKClassAnnotationValue.KtErrorClassAnnotationValue(sourcePsi)
|
||||
symbol.classId.isLocal -> KtKClassAnnotationValue.KtLocalKClassAnnotationValue(
|
||||
symbol.fir.psi as KtClassOrObject,
|
||||
sourcePsi
|
||||
)
|
||||
else -> KtKClassAnnotationValue.KtNonLocalKClassAnnotationValue(symbol.classId, sourcePsi)
|
||||
}
|
||||
}
|
||||
else -> null
|
||||
|
||||
+2
-3
@@ -8,9 +8,8 @@ package org.jetbrains.kotlin.analysis.api.fir.renderer
|
||||
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.FirAnnotationValueConverter
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationValueRenderer
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtUnsupportedAnnotationValue
|
||||
import org.jetbrains.kotlin.analysis.utils.printer.PrettyPrinter
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.renderAsSourceCode
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
|
||||
@@ -65,5 +64,5 @@ private fun renderConstant(value: FirExpression, useSiteSession: FirSession): St
|
||||
val constantValue = FirAnnotationValueConverter.toConstantValue(evaluated ?: value, useSiteSession)
|
||||
?: KtUnsupportedAnnotationValue
|
||||
|
||||
return KtAnnotationValueRenderer.render(constantValue)
|
||||
return constantValue.renderAsSourceCode()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user