[AA] introduce KtAnnotationApplication

^KT-56046
This commit is contained in:
Dmitrii Gridin
2023-01-27 17:22:14 +01:00
committed by Space Team
parent 59f07c2197
commit 6e25b45f7d
27 changed files with 170 additions and 166 deletions
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.analysis.api.fir
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
import org.jetbrains.kotlin.analysis.api.fir.annotations.mapAnnotationParameters
import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirAnnotationValueConverter
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
@@ -71,7 +71,7 @@ internal fun ConeDiagnostic.getCandidateSymbols(): Collection<FirBasedSymbol<*>>
internal fun FirAnnotation.toKtAnnotationApplication(
useSiteSession: FirSession,
index: Int,
): KtAnnotationApplication = KtAnnotationApplication(
): KtAnnotationApplicationWithArgumentsInfo = KtAnnotationApplicationWithArgumentsInfo(
classId = toAnnotationClassId(useSiteSession),
psi = psi as? KtCallElement,
useSiteTarget = useSiteTarget,
@@ -82,10 +82,13 @@ internal fun FirAnnotation.toKtAnnotationApplication(
index = index,
)
internal fun FirAnnotation.toKtAnnotationOverview(useSiteSession: FirSession, index: Int): KtAnnotationOverview = KtAnnotationOverview(
internal fun FirAnnotation.toKtAnnotationInfo(
useSiteSession: FirSession,
index: Int,
): KtAnnotationApplicationInfo = KtAnnotationApplicationInfo(
classId = toAnnotationClassId(useSiteSession),
psi = psi as? KtCallElement,
useSiteTarget = useSiteTarget,
hasArguments = this is FirAnnotationCall && arguments.isNotEmpty(),
isCallWithArguments = this is FirAnnotationCall && arguments.isNotEmpty(),
index = index,
)
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.analysis.api.fir.annotations
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
@@ -21,14 +21,14 @@ internal class KtFirAnnotationListForDeclaration private constructor(
private val useSiteSession: FirSession,
override val token: KtLifetimeToken,
) : KtAnnotationsList() {
override val annotations: List<KtAnnotationApplication>
override val annotations: List<KtAnnotationApplicationWithArgumentsInfo>
get() = withValidityAssertion {
annotations(firSymbol, useSiteSession)
}
override val annotationOverviews: List<KtAnnotationOverview>
override val annotationInfos: List<KtAnnotationApplicationInfo>
get() = withValidityAssertion {
annotationOverviews(firSymbol, useSiteSession)
annotationInfos(firSymbol, useSiteSession)
}
override fun hasAnnotation(
@@ -43,7 +43,7 @@ internal class KtFirAnnotationListForDeclaration private constructor(
hasAnnotation(firSymbol, classId, useSiteSession)
}
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplication> = withValidityAssertion {
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
annotationsByClassId(firSymbol, classId, useSiteSession)
}
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.analysis.api.fir.annotations
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
@@ -23,14 +23,14 @@ internal class KtFirAnnotationListForReceiverParameter private constructor(
private val useSiteSession: FirSession,
override val token: KtLifetimeToken,
) : KtAnnotationsList() {
override val annotations: List<KtAnnotationApplication>
override val annotations: List<KtAnnotationApplicationWithArgumentsInfo>
get() = withValidityAssertion {
annotations(firCallableSymbol, useSiteSession, receiverParameter)
}
override val annotationOverviews: List<KtAnnotationOverview>
override val annotationInfos: List<KtAnnotationApplicationInfo>
get() = withValidityAssertion {
annotationOverviews(firCallableSymbol, useSiteSession, receiverParameter)
annotationInfos(firCallableSymbol, useSiteSession, receiverParameter)
}
override fun hasAnnotation(
@@ -45,7 +45,7 @@ internal class KtFirAnnotationListForReceiverParameter private constructor(
hasAnnotation(firCallableSymbol, classId, useSiteSession, receiverParameter)
}
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplication> = withValidityAssertion {
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
annotationsByClassId(firCallableSymbol, classId, useSiteSession, receiverParameter)
}
@@ -5,11 +5,11 @@
package org.jetbrains.kotlin.analysis.api.fir.annotations
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationOverview
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationInfo
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
@@ -31,17 +31,17 @@ internal class KtFirAnnotationListForType private constructor(
private val useSiteSession: FirSession,
override val token: KtLifetimeToken,
) : KtAnnotationsList() {
override val annotations: List<KtAnnotationApplication>
override val annotations: List<KtAnnotationApplicationWithArgumentsInfo>
get() = withValidityAssertion {
coneType.customAnnotationsWithLazyResolve(FirResolvePhase.ANNOTATIONS_ARGUMENTS_MAPPING).mapIndexed { index, annotation ->
annotation.toKtAnnotationApplication(useSiteSession, index)
}
}
override val annotationOverviews: List<KtAnnotationOverview>
override val annotationInfos: List<KtAnnotationApplicationInfo>
get() = withValidityAssertion {
coneType.customAnnotationsWithLazyResolve(FirResolvePhase.TYPES).mapIndexed { index, annotation ->
annotation.toKtAnnotationOverview(useSiteSession, index)
annotation.toKtAnnotationInfo(useSiteSession, index)
}
}
@@ -60,7 +60,7 @@ internal class KtFirAnnotationListForType private constructor(
coneType.customAnnotationsWithLazyResolve(FirResolvePhase.TYPES).hasAnnotation(classId, useSiteSession)
}
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplication> = withValidityAssertion {
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
coneType.customAnnotationsWithLazyResolve(FirResolvePhase.ANNOTATIONS_ARGUMENTS_MAPPING).mapIndexedNotNull { index, annotation ->
if (annotation.toAnnotationClassId(useSiteSession) != classId) return@mapIndexedNotNull null
annotation.toKtAnnotationApplication(useSiteSession, index)
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.analysis.api.fir.annotations
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationOverview
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationOverview
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationInfo
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
import org.jetbrains.kotlin.analysis.utils.errors.checkWithAttachmentBuilder
import org.jetbrains.kotlin.analysis.utils.errors.withClassEntry
@@ -45,7 +45,7 @@ internal fun annotationsByClassId(
classId: ClassId,
useSiteSession: FirSession,
annotationContainer: FirAnnotationContainer = firSymbol.fir,
): List<KtAnnotationApplication> =
): List<KtAnnotationApplicationWithArgumentsInfo> =
if (firSymbol.isFromCompilerRequiredAnnotationsPhase(classId)) {
annotationContainer.resolvedCompilerRequiredAnnotations(firSymbol).mapIndexedNotNull { index, annotation ->
if (annotation.toAnnotationClassIdSafe(useSiteSession) != classId) return@mapIndexedNotNull null
@@ -62,16 +62,17 @@ internal fun annotations(
firSymbol: FirBasedSymbol<*>,
useSiteSession: FirSession,
annotationContainer: FirAnnotationContainer = firSymbol.fir,
): List<KtAnnotationApplication> = annotationContainer.resolvedAnnotationsWithArguments(firSymbol).mapIndexed { index, annotation ->
annotation.toKtAnnotationApplication(useSiteSession, index)
}
): List<KtAnnotationApplicationWithArgumentsInfo> =
annotationContainer.resolvedAnnotationsWithArguments(firSymbol).mapIndexed { index, annotation ->
annotation.toKtAnnotationApplication(useSiteSession, index)
}
internal fun annotationOverviews(
internal fun annotationInfos(
firSymbol: FirBasedSymbol<*>,
useSiteSession: FirSession,
annotationContainer: FirAnnotationContainer = firSymbol.fir,
): List<KtAnnotationOverview> = annotationContainer.resolvedAnnotationsWithClassIds(firSymbol).mapIndexed { index, annotation ->
annotation.toKtAnnotationOverview(useSiteSession, index)
): List<KtAnnotationApplicationInfo> = annotationContainer.resolvedAnnotationsWithClassIds(firSymbol).mapIndexed { index, annotation ->
annotation.toKtAnnotationInfo(useSiteSession, index)
}
internal fun annotationClassIds(
@@ -112,7 +112,7 @@ internal object FirAnnotationValueConverter {
}
KtAnnotationApplicationValue(
KtAnnotationApplication(
KtAnnotationApplicationWithArgumentsInfo(
resolvedSymbol.callableId.classId,
psi as? KtCallElement,
useSiteTarget = null,