diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/FirUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/FirUtils.kt index b2dec6a7f69..4634b004184 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/FirUtils.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/FirUtils.kt @@ -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> internal fun FirAnnotation.toKtAnnotationApplication(useSiteSession: FirSession): KtAnnotationApplication { return KtAnnotationApplication( - fullyExpandedClassId(useSiteSession), + toAnnotationClassId(useSiteSession), psi as? KtCallElement, useSiteTarget, FirAnnotationValueConverter.toNamedConstantValue( diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForDeclaration.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForDeclaration.kt index 35aba4ce982..beb0706e181 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForDeclaration.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForDeclaration.kt @@ -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 = withValidityAssertion { firSymbol.resolvedAnnotationsWithArguments.mapNotNull { annotation -> - if (annotation.fullyExpandedClassId(useSiteSession) != classId) return@mapNotNull null + if (annotation.toAnnotationClassId(useSiteSession) != classId) return@mapNotNull null annotation.toKtAnnotationApplication(useSiteSession) } } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForReceiverParameter.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForReceiverParameter.kt index 6f4436949a1..dab98c6b896 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForReceiverParameter.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForReceiverParameter.kt @@ -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 = 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) } } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForType.kt index 70220951247..086be878da3 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/KtFirAnnotationListForType.kt @@ -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 = 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 - get() = withValidityAssertion { coneType.customAnnotations.mapNotNull { it.fullyExpandedClassId(useSiteSession) } } + get() = withValidityAssertion { coneType.customAnnotations.mapNotNull { it.toAnnotationClassId(useSiteSession) } } companion object { fun create( diff --git a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsExternalFileChecker.kt b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsExternalFileChecker.kt index ad860409960..dc52c329207 100644 --- a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsExternalFileChecker.kt +++ b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/declaration/FirJsExternalFileChecker.kt @@ -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( diff --git a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/expression/FirJsQualifierChecker.kt b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/expression/FirJsQualifierChecker.kt index 0be8be7e68e..246ee4674f0 100644 --- a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/expression/FirJsQualifierChecker.kt +++ b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/expression/FirJsQualifierChecker.kt @@ -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 } diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt index 55bef2deab9..cbbafdb21ca 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt @@ -233,6 +233,3 @@ fun hasLowPriorityAnnotation(annotations: List) = annotations.any val lookupTag = it.annotationTypeRef.coneTypeSafe()?.lookupTag ?: return@any false lookupTag.classId == LOW_PRIORITY_IN_OVERLOAD_RESOLUTION_CLASS_ID } - -fun FirAnnotation.fullyExpandedClassId(useSiteSession: FirSession): ClassId? = - unexpandedConeClassLikeType?.fullyExpandedType(useSiteSession)?.classId