[FIR] Get rid of FirAnnotation.fullyExpandedClassId

It's duplicated by `toAnnotationClassId`.
This commit is contained in:
Nikolay Lunyak
2023-01-16 14:07:16 +02:00
committed by Space Team
parent 343b856cfc
commit 4cddbb5fc0
7 changed files with 22 additions and 30 deletions
@@ -6,11 +6,11 @@
package org.jetbrains.kotlin.analysis.api.fir
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClassId
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
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.psi
@@ -64,7 +64,7 @@ internal fun ConeDiagnostic.getCandidateSymbols(): Collection<FirBasedSymbol<*>>
internal fun FirAnnotation.toKtAnnotationApplication(useSiteSession: FirSession): KtAnnotationApplication {
return KtAnnotationApplication(
fullyExpandedClassId(useSiteSession),
toAnnotationClassId(useSiteSession),
psi as? KtCallElement,
useSiteTarget,
FirAnnotationValueConverter.toNamedConstantValue(
@@ -13,7 +13,8 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClassId
import org.jetbrains.kotlin.fir.declarations.hasAnnotation
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.ClassId
@@ -37,19 +38,17 @@ internal class KtFirAnnotationListForDeclaration private constructor(
): Boolean = withValidityAssertion {
firSymbol.resolvedAnnotationsWithClassIds.any {
(it.useSiteTarget == useSiteTarget || acceptAnnotationsWithoutUseSite && it.useSiteTarget == null) &&
it.fullyExpandedClassId(useSiteSession) == classId
it.toAnnotationClassId(useSiteSession) == classId
}
}
override fun hasAnnotation(classId: ClassId): Boolean = withValidityAssertion {
firSymbol.resolvedAnnotationsWithClassIds.any {
it.fullyExpandedClassId(useSiteSession) == classId
}
firSymbol.resolvedAnnotationsWithClassIds.hasAnnotation(classId, useSiteSession)
}
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplication> = withValidityAssertion {
firSymbol.resolvedAnnotationsWithArguments.mapNotNull { annotation ->
if (annotation.fullyExpandedClassId(useSiteSession) != classId) return@mapNotNull null
if (annotation.toAnnotationClassId(useSiteSession) != classId) return@mapNotNull null
annotation.toKtAnnotationApplication(useSiteSession)
}
}
@@ -14,7 +14,8 @@ import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClassId
import org.jetbrains.kotlin.fir.declarations.hasAnnotation
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.resolvedAnnotationClassIds
import org.jetbrains.kotlin.fir.symbols.resolvedAnnotationsWithArguments
@@ -42,19 +43,17 @@ internal class KtFirAnnotationListForReceiverParameter private constructor(
): Boolean = withValidityAssertion {
receiverParameter.resolvedAnnotationsWithClassIds(firCallableSymbol).any {
(it.useSiteTarget == useSiteTarget || acceptAnnotationsWithoutUseSite && it.useSiteTarget == null) &&
it.fullyExpandedClassId(useSiteSession) == classId
it.toAnnotationClassId(useSiteSession) == classId
}
}
override fun hasAnnotation(classId: ClassId): Boolean = withValidityAssertion {
receiverParameter.resolvedAnnotationsWithClassIds(firCallableSymbol).any {
it.fullyExpandedClassId(useSiteSession) == classId
}
receiverParameter.resolvedAnnotationsWithClassIds(firCallableSymbol).hasAnnotation(classId, useSiteSession)
}
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplication> = withValidityAssertion {
receiverParameter.resolvedAnnotationsWithArguments(firCallableSymbol).mapNotNull { annotation ->
if (annotation.fullyExpandedClassId(useSiteSession) != classId) return@mapNotNull null
if (annotation.toAnnotationClassId(useSiteSession) != classId) return@mapNotNull null
annotation.toKtAnnotationApplication(useSiteSession)
}
}
@@ -13,7 +13,8 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClassId
import org.jetbrains.kotlin.fir.declarations.hasAnnotation
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.customAnnotations
import org.jetbrains.kotlin.name.ClassId
@@ -33,25 +34,23 @@ internal class KtFirAnnotationListForType private constructor(
): Boolean = withValidityAssertion {
coneType.customAnnotations.any {
(it.useSiteTarget == useSiteTarget || acceptAnnotationsWithoutUseSite && it.useSiteTarget == null) &&
it.fullyExpandedClassId(useSiteSession) == classId
it.toAnnotationClassId(useSiteSession) == classId
}
}
override fun hasAnnotation(classId: ClassId): Boolean = withValidityAssertion {
coneType.customAnnotations.any {
it.fullyExpandedClassId(useSiteSession) == classId
}
coneType.customAnnotations.hasAnnotation(classId, useSiteSession)
}
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplication> = withValidityAssertion {
coneType.customAnnotations.mapNotNull { annotation ->
if (annotation.fullyExpandedClassId(useSiteSession) != classId) return@mapNotNull null
if (annotation.toAnnotationClassId(useSiteSession) != classId) return@mapNotNull null
annotation.toKtAnnotationApplication(useSiteSession)
}
}
override val annotationClassIds: Collection<ClassId>
get() = withValidityAssertion { coneType.customAnnotations.mapNotNull { it.fullyExpandedClassId(useSiteSession) } }
get() = withValidityAssertion { coneType.customAnnotations.mapNotNull { it.toAnnotationClassId(useSiteSession) } }
companion object {
fun create(
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.analysis.js.checkers.isNativeObject
import org.jetbrains.kotlin.fir.analysis.checkers.isTopLevel
import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClassId
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.name.JsStandardClassIds
@@ -28,7 +28,7 @@ object FirJsExternalFileChecker : FirBasicDeclarationChecker() {
val targetAnnotations = context.containingFile
?.annotations
?.firstOrNull { it.fullyExpandedClassId(context.session) in JsStandardClassIds.Annotations.annotationsRequiringExternal }
?.firstOrNull { it.toAnnotationClassId(context.session) in JsStandardClassIds.Annotations.annotationsRequiringExternal }
if (targetAnnotations != null) {
reporter.reportOn(
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.diagnostics.reportOn
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirAnnotationCallChecker
import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClassId
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
import org.jetbrains.kotlin.js.validateQualifier
@@ -18,9 +18,7 @@ import org.jetbrains.kotlin.name.JsStandardClassIds.Annotations.JsQualifier
object FirJsQualifierChecker : FirAnnotationCallChecker() {
override fun check(expression: FirAnnotationCall, context: CheckerContext, reporter: DiagnosticReporter) {
val annotationFqName = expression.fullyExpandedClassId(context.session)
if (annotationFqName != JsQualifier) {
if (expression.toAnnotationClassId(context.session) != JsQualifier) {
return
}
@@ -233,6 +233,3 @@ fun hasLowPriorityAnnotation(annotations: List<FirAnnotation>) = annotations.any
val lookupTag = it.annotationTypeRef.coneTypeSafe<ConeClassLikeType>()?.lookupTag ?: return@any false
lookupTag.classId == LOW_PRIORITY_IN_OVERLOAD_RESOLUTION_CLASS_ID
}
fun FirAnnotation.fullyExpandedClassId(useSiteSession: FirSession): ClassId? =
unexpandedConeClassLikeType?.fullyExpandedType(useSiteSession)?.classId