From 1173cc46e2375872329ffc44a2bd53c4be535104 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Wed, 1 Nov 2023 15:59:50 +0100 Subject: [PATCH] [Analysis API] add constructorSymbol to API of KtAnnotationApplicationWithArgumentsInfo This is required for some checks on call site, and it seems that this symbol can cover all cases. One of the examples why this API was introduced is a request to distinguish which vararg parameter is missed in arguments of an annotation call from symbol light classes ^KT-62560 --- .../descriptorBased/base/Kt1DescUtils.kt | 18 ++++--- .../kotlin/analysis/api/fir/FirUtils.kt | 26 ++++++---- .../analysis/api/fir/KtSymbolByFirBuilder.kt | 13 ++--- .../KtFirAnnotationListForDeclaration.kt | 23 +++++---- ...KtFirAnnotationListForReceiverParameter.kt | 21 ++++---- .../annotations/KtFirAnnotationListForType.kt | 21 ++++---- .../api/fir/annotations/firAnnotationUtils.kt | 33 ++++++------- .../KtFirCompileTimeConstantProvider.kt | 12 +---- .../evaluate/FirAnnotationValueConverter.kt | 48 +++++++++---------- .../symbols/KtFirAnonymousFunctionSymbol.kt | 4 +- .../fir/symbols/KtFirAnonymousObjectSymbol.kt | 4 +- .../fir/symbols/KtFirBackingFieldSymbol.kt | 4 +- .../api/fir/symbols/KtFirConstructorSymbol.kt | 8 +--- .../KtFirDestructuringDeclarationSymbol.kt | 2 +- .../api/fir/symbols/KtFirEnumEntrySymbol.kt | 4 +- .../api/fir/symbols/KtFirFileSymbol.kt | 8 +--- .../api/fir/symbols/KtFirFunctionSymbol.kt | 8 +--- .../api/fir/symbols/KtFirJavaFieldSymbol.kt | 4 +- .../fir/symbols/KtFirKotlinPropertySymbol.kt | 12 +---- .../fir/symbols/KtFirLocalVariableSymbol.kt | 2 +- .../symbols/KtFirNamedClassOrObjectSymbol.kt | 8 +--- .../fir/symbols/KtFirPropertyGetterSymbol.kt | 8 +--- .../fir/symbols/KtFirPropertySetterSymbol.kt | 6 +-- .../fir/symbols/KtFirPsiJavaClassSymbol.kt | 2 +- .../symbols/KtFirReceiverParameterSymbol.kt | 4 +- .../fir/symbols/KtFirSamConstructorSymbol.kt | 4 +- .../api/fir/symbols/KtFirScriptSymbol.kt | 6 +-- .../KtFirSyntheticJavaPropertySymbol.kt | 10 ++-- .../api/fir/symbols/KtFirTypeAliasSymbol.kt | 4 +- .../symbols/KtFirTypeParameterSymbolBase.kt | 6 +-- .../fir/symbols/KtFirValueParameterSymbol.kt | 8 +--- .../api/fir/symbols/firSymbolUtils.kt | 13 ++--- .../api/fir/types/KtFirCapturedType.kt | 4 +- .../api/fir/types/KtFirClassErrorType.kt | 4 +- .../fir/types/KtFirDefinitelyNotNullType.kt | 4 +- .../api/fir/types/KtFirDynamicType.kt | 4 +- .../api/fir/types/KtFirFlexibleType.kt | 4 +- .../api/fir/types/KtFirFunctionalType.kt | 5 +- .../api/fir/types/KtFirIntegerLiteralType.kt | 4 +- .../api/fir/types/KtFirIntersectionType.kt | 4 +- .../api/fir/types/KtFirTypeErrorType.kt | 4 +- .../api/fir/types/KtFirTypeParameterType.kt | 4 +- .../api/fir/types/KtFirUsualClassType.kt | 4 +- .../kotlin/analysis/api/fir/utils/firUtils.kt | 14 +++--- ...tAnnotationApplicationWithArgumentsInfo.kt | 7 +++ 45 files changed, 192 insertions(+), 228 deletions(-) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt index 9e8d5d188dc..226098bb308 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt @@ -471,6 +471,7 @@ internal fun ConstantValue<*>.toKtAnnotationValue(analysisContext: Fe10AnalysisC useSiteTarget = null, arguments = value.getKtNamedAnnotationArguments(analysisContext), index = null, + constructorSymbolPointer = null, ) ) } @@ -618,13 +619,16 @@ internal fun createKtInitializerValue( internal fun AnnotationDescriptor.toKtAnnotationApplication( analysisContext: Fe10AnalysisContext, index: Int, -): KtAnnotationApplicationWithArgumentsInfo = KtAnnotationApplicationWithArgumentsInfo( - classId = classIdForAnnotation, - psi = psi, - useSiteTarget = useSiteTarget, - arguments = getKtNamedAnnotationArguments(analysisContext), - index = index, -) +): KtAnnotationApplicationWithArgumentsInfo { + return KtAnnotationApplicationWithArgumentsInfo( + classId = classIdForAnnotation, + psi = psi, + useSiteTarget = useSiteTarget, + arguments = getKtNamedAnnotationArguments(analysisContext), + index = index, + constructorSymbolPointer = null, + ) +} internal fun AnnotationDescriptor.toKtAnnotationInfo(index: Int): KtAnnotationApplicationInfo = KtAnnotationApplicationInfo( classId = classIdForAnnotation, 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 f67d0a66fdf..bf44b2578e5 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 @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference +import org.jetbrains.kotlin.fir.references.toResolvedConstructorSymbol import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeDiagnosticWithCandidates import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeDiagnosticWithSymbol import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeHiddenCandidateError @@ -82,19 +83,26 @@ internal fun ConeDiagnostic.getCandidateSymbols(): Collection> } internal fun FirAnnotation.toKtAnnotationApplication( - useSiteSession: FirSession, + builder: KtSymbolByFirBuilder, index: Int, arguments: List = FirAnnotationValueConverter.toNamedConstantValue( mapAnnotationParameters(this), - useSiteSession, + builder, ) -): KtAnnotationApplicationWithArgumentsInfo = KtAnnotationApplicationWithArgumentsInfo( - classId = toAnnotationClassId(useSiteSession), - psi = psi as? KtCallElement, - useSiteTarget = useSiteTarget, - arguments = arguments, - index = index, -) +): KtAnnotationApplicationWithArgumentsInfo { + val constructorSymbol = (this as? FirAnnotationCall)?.calleeReference + ?.toResolvedConstructorSymbol() + ?.let(builder.functionLikeBuilder::buildConstructorSymbol) + + return KtAnnotationApplicationWithArgumentsInfo( + classId = toAnnotationClassId(builder.rootSession), + psi = psi as? KtCallElement, + useSiteTarget = useSiteTarget, + arguments = arguments, + index = index, + constructorSymbolPointer = with(builder.analysisSession) { constructorSymbol?.createPointer() }, + ) +} internal fun FirAnnotation.toKtAnnotationInfo( useSiteSession: FirSession, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt index 3fba3831f7f..ea35f4c3886 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -42,13 +42,14 @@ import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedSymbolError import org.jetbrains.kotlin.fir.resolve.getContainingClass import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable -import org.jetbrains.kotlin.fir.scopes.impl.originalConstructorIfTypeAlias +import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.substitution.ChainedSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.scopes.impl.importedFromObjectOrStaticData +import org.jetbrains.kotlin.fir.scopes.impl.originalConstructorIfTypeAlias import org.jetbrains.kotlin.fir.scopes.impl.toConeType import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag @@ -71,13 +72,13 @@ import kotlin.contracts.contract /** * Maps FirElement to KtSymbol & ConeType to KtType, thread safe */ -internal class KtSymbolByFirBuilder constructor( +internal class KtSymbolByFirBuilder( private val project: Project, - private val analysisSession: KtFirAnalysisSession, + val analysisSession: KtFirAnalysisSession, val token: KtLifetimeToken, ) { - private val firResolveSession: LLFirResolveSession = analysisSession.firResolveSession - private val firProvider get() = firResolveSession.useSiteFirSession.symbolProvider + private val firResolveSession: LLFirResolveSession get() = analysisSession.firResolveSession + private val firProvider: FirSymbolProvider get() = rootSession.symbolProvider val rootSession: FirSession = firResolveSession.useSiteFirSession private val symbolsCache = BuilderCache, KtSymbol>() 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 e22e72b449e..6358678f164 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 @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.analysis.api.annotations.AnnotationUseSiteTargetFilt 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.KtSymbolByFirBuilder 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 @@ -19,12 +20,14 @@ import org.jetbrains.kotlin.name.ClassId internal class KtFirAnnotationListForDeclaration private constructor( val firSymbol: FirBasedSymbol<*>, - private val useSiteSession: FirSession, - override val token: KtLifetimeToken, + private val builder: KtSymbolByFirBuilder, ) : KtAnnotationsList() { + override val token: KtLifetimeToken get() = builder.token + private val useSiteSession: FirSession get() = builder.rootSession + override val annotations: List get() = withValidityAssertion { - annotations(firSymbol, useSiteSession) + annotations(firSymbol, builder) } override val annotationInfos: List @@ -40,7 +43,7 @@ internal class KtFirAnnotationListForDeclaration private constructor( classId: ClassId, useSiteTargetFilter: AnnotationUseSiteTargetFilter, ): List = withValidityAssertion { - annotationsByClassId(firSymbol, classId, useSiteTargetFilter, useSiteSession) + annotationsByClassId(firSymbol, classId, useSiteTargetFilter, builder) } override val annotationClassIds: Collection @@ -49,18 +52,14 @@ internal class KtFirAnnotationListForDeclaration private constructor( } companion object { - fun create( - firSymbol: FirBasedSymbol<*>, - useSiteSession: FirSession, - token: KtLifetimeToken, - ): KtAnnotationsList { + fun create(firSymbol: FirBasedSymbol<*>, builder: KtSymbolByFirBuilder): KtAnnotationsList { return when { firSymbol is FirBackingFieldSymbol && firSymbol.propertySymbol.annotations.any { it.useSiteTarget == null } -> - KtFirAnnotationListForDeclaration(firSymbol, useSiteSession, token) + KtFirAnnotationListForDeclaration(firSymbol, builder) firSymbol.annotations.isEmpty() -> - KtEmptyAnnotationsList(token) + KtEmptyAnnotationsList(builder.token) else -> - KtFirAnnotationListForDeclaration(firSymbol, useSiteSession, token) + KtFirAnnotationListForDeclaration(firSymbol, builder) } } } 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 908594e7fa2..25ce7d7277c 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 @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.analysis.api.annotations.AnnotationUseSiteTargetFilt 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.KtSymbolByFirBuilder 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 @@ -20,12 +21,14 @@ import org.jetbrains.kotlin.name.ClassId internal class KtFirAnnotationListForReceiverParameter private constructor( private val firCallableSymbol: FirCallableSymbol<*>, private val receiverParameter: FirAnnotationContainer, - private val useSiteSession: FirSession, - override val token: KtLifetimeToken, + private val builder: KtSymbolByFirBuilder, ) : KtAnnotationsList() { + private val useSiteSession: FirSession get() = builder.rootSession + override val token: KtLifetimeToken get() = builder.token + override val annotations: List get() = withValidityAssertion { - annotations(firCallableSymbol, useSiteSession, receiverParameter) + annotations(firCallableSymbol, builder, receiverParameter) } override val annotationInfos: List @@ -41,7 +44,7 @@ internal class KtFirAnnotationListForReceiverParameter private constructor( classId: ClassId, useSiteTargetFilter: AnnotationUseSiteTargetFilter, ): List = withValidityAssertion { - annotationsByClassId(firCallableSymbol, classId, useSiteTargetFilter, useSiteSession, receiverParameter) + annotationsByClassId(firCallableSymbol, classId, useSiteTargetFilter, builder, receiverParameter) } override val annotationClassIds: Collection @@ -50,16 +53,12 @@ internal class KtFirAnnotationListForReceiverParameter private constructor( } companion object { - fun create( - firCallableSymbol: FirCallableSymbol<*>, - useSiteSession: FirSession, - token: KtLifetimeToken, - ): KtAnnotationsList { + fun create(firCallableSymbol: FirCallableSymbol<*>, builder: KtSymbolByFirBuilder): KtAnnotationsList { val receiverParameter = firCallableSymbol.receiverParameter return if (receiverParameter?.annotations?.isEmpty() != false) { - KtEmptyAnnotationsList(token) + KtEmptyAnnotationsList(builder.token) } else { - KtFirAnnotationListForReceiverParameter(firCallableSymbol, receiverParameter, useSiteSession, token) + KtFirAnnotationListForReceiverParameter(firCallableSymbol, receiverParameter, builder) } } } 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 ae6b23d11ec..eb31fdd1dd3 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 @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.analysis.api.annotations.AnnotationUseSiteTargetFilt 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.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationApplication import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationInfo import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList @@ -27,13 +28,15 @@ import org.jetbrains.kotlin.name.ClassId internal class KtFirAnnotationListForType private constructor( val coneType: ConeKotlinType, - private val useSiteSession: FirSession, - override val token: KtLifetimeToken, + private val builder: KtSymbolByFirBuilder, ) : KtAnnotationsList() { + override val token: KtLifetimeToken get() = builder.token + private val useSiteSession: FirSession get() = builder.rootSession + override val annotations: List get() = withValidityAssertion { coneType.customAnnotationsWithLazyResolve(FirResolvePhase.ANNOTATION_ARGUMENTS).mapIndexed { index, annotation -> - annotation.toKtAnnotationApplication(useSiteSession, index) + annotation.toKtAnnotationApplication(builder, index) } } @@ -59,7 +62,7 @@ internal class KtFirAnnotationListForType private constructor( return@mapIndexedNotNull null } - annotation.toKtAnnotationApplication(useSiteSession, index) + annotation.toKtAnnotationApplication(builder, index) } } @@ -69,15 +72,11 @@ internal class KtFirAnnotationListForType private constructor( } companion object { - fun create( - coneType: ConeKotlinType, - useSiteSession: FirSession, - token: KtLifetimeToken, - ): KtAnnotationsList { + fun create(coneType: ConeKotlinType, builder: KtSymbolByFirBuilder): KtAnnotationsList { return if (coneType.customAnnotations.isEmpty()) { - KtEmptyAnnotationsList(token) + KtEmptyAnnotationsList(builder.token) } else { - KtFirAnnotationListForType(coneType, useSiteSession, token) + KtFirAnnotationListForType(coneType, builder) } } } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/firAnnotationUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/firAnnotationUtils.kt index c61a45573ba..d2f2633e30c 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/firAnnotationUtils.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/annotations/firAnnotationUtils.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.analysis.api.fir.annotations import org.jetbrains.kotlin.analysis.api.annotations.* +import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationApplication import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationInfo import org.jetbrains.kotlin.analysis.utils.errors.withClassEntry @@ -44,23 +45,23 @@ internal fun annotationsByClassId( firSymbol: FirBasedSymbol<*>, classId: ClassId, useSiteTargetFilter: AnnotationUseSiteTargetFilter, - useSiteSession: FirSession, + builder: KtSymbolByFirBuilder, annotationContainer: FirAnnotationContainer = firSymbol.fir, ): List = if (classId == StandardClassIds.Annotations.Target && firSymbol.fir.resolvePhase < FirResolvePhase.ANNOTATION_ARGUMENTS) { annotationContainer.resolvedAnnotationsWithClassIds(firSymbol) - .mapIndexedToAnnotationApplication(useSiteTargetFilter, useSiteSession, classId) { index, annotation -> - annotation.asKtAnnotationApplicationForTargetAnnotation(useSiteSession, index) + .mapIndexedToAnnotationApplication(useSiteTargetFilter, builder.rootSession, classId) { index, annotation -> + annotation.asKtAnnotationApplicationForTargetAnnotation(builder, index) } } else if (classId == JvmStandardClassIds.Annotations.Java.Target && firSymbol.fir.resolvePhase < FirResolvePhase.ANNOTATION_ARGUMENTS) { annotationContainer.resolvedAnnotationsWithClassIds(firSymbol) - .mapIndexedToAnnotationApplication(useSiteTargetFilter, useSiteSession, classId) { index, annotation -> - annotation.asKtAnnotationApplicationForJavaTargetAnnotation(useSiteSession, index) + .mapIndexedToAnnotationApplication(useSiteTargetFilter, builder.rootSession, classId) { index, annotation -> + annotation.asKtAnnotationApplicationForJavaTargetAnnotation(builder, index) } } else { annotationContainer.resolvedAnnotationsWithArguments(firSymbol) - .mapIndexedToAnnotationApplication(useSiteTargetFilter, useSiteSession, classId) { index, annotation -> - annotation.toKtAnnotationApplication(useSiteSession, index) + .mapIndexedToAnnotationApplication(useSiteTargetFilter, builder.rootSession, classId) { index, annotation -> + annotation.toKtAnnotationApplication(builder, index) } } @@ -78,7 +79,7 @@ private inline fun List.mapIndexedToAnnotationApplication( } private fun FirAnnotation.asKtAnnotationApplicationForAnnotationWithEnumArgument( - useSiteSession: FirSession, + builder: KtSymbolByFirBuilder, index: Int, expectedEnumClassId: ClassId, annotationParameterName: Name, @@ -107,14 +108,14 @@ private fun FirAnnotation.asKtAnnotationApplicationForAnnotationWithEnumArgument ) }.orEmpty() - return toKtAnnotationApplication(useSiteSession, index, arguments) + return toKtAnnotationApplication(builder, index, arguments) } private fun FirAnnotation.asKtAnnotationApplicationForTargetAnnotation( - useSiteSession: FirSession, + builder: KtSymbolByFirBuilder, index: Int, ): KtAnnotationApplicationWithArgumentsInfo = asKtAnnotationApplicationForAnnotationWithEnumArgument( - useSiteSession = useSiteSession, + builder = builder, index = index, expectedEnumClassId = StandardClassIds.AnnotationTarget, annotationParameterName = StandardClassIds.Annotations.ParameterNames.targetAllowedTargets, @@ -122,14 +123,14 @@ private fun FirAnnotation.asKtAnnotationApplicationForTargetAnnotation( ) private fun FirAnnotation.asKtAnnotationApplicationForJavaTargetAnnotation( - useSiteSession: FirSession, + builder: KtSymbolByFirBuilder, index: Int, ): KtAnnotationApplicationWithArgumentsInfo = asKtAnnotationApplicationForAnnotationWithEnumArgument( - useSiteSession = useSiteSession, + builder = builder, index = index, expectedEnumClassId = JvmStandardClassIds.Annotations.Java.ElementType, annotationParameterName = StandardClassIds.Annotations.ParameterNames.value, - nameMapper = { ElementType.values().firstOrNull { enumValue -> enumValue.name == it }?.name }, + nameMapper = { ElementType.entries.firstOrNull { enumValue -> enumValue.name == it }?.name }, ) private fun FirAnnotation.findFromRawArguments(expectedEnumClass: ClassId, transformer: (String) -> T?): Set = buildSet { @@ -150,11 +151,11 @@ private fun FirAnnotation.findFromRawArguments(expectedEnumClass: ClassId, t internal fun annotations( firSymbol: FirBasedSymbol<*>, - useSiteSession: FirSession, + builder: KtSymbolByFirBuilder, annotationContainer: FirAnnotationContainer = firSymbol.fir, ): List = annotationContainer.resolvedAnnotationsWithArguments(firSymbol).mapIndexed { index, annotation -> - annotation.toKtAnnotationApplication(useSiteSession, index) + annotation.toKtAnnotationApplication(builder, index) } internal fun annotationInfos( diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCompileTimeConstantProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCompileTimeConstantProvider.kt index 133abfe7a95..0f688981ffe 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCompileTimeConstantProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCompileTimeConstantProvider.kt @@ -1,11 +1,10 @@ /* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.analysis.api.fir.components -import org.jetbrains.kotlin.KtFakeSourceElementKind import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationValue import org.jetbrains.kotlin.analysis.api.base.KtConstantValue import org.jetbrains.kotlin.analysis.api.components.KtCompileTimeConstantProvider @@ -13,19 +12,12 @@ import org.jetbrains.kotlin.analysis.api.components.KtConstantEvaluationMode import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirAnnotationValueConverter import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirCompileTimeConstantEvaluator -import org.jetbrains.kotlin.analysis.api.fir.utils.asKtInitializerValue import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir -import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirElementError import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression -import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment -import org.jetbrains.kotlin.fir.expressions.FirWhenBranch import org.jetbrains.kotlin.fir.references.FirNamedReference -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.psi import org.jetbrains.kotlin.psi.KtExpression internal class KtFirCompileTimeConstantProvider( @@ -42,7 +34,7 @@ internal class KtFirCompileTimeConstantProvider( override fun evaluateAsAnnotationValue(expression: KtExpression): KtAnnotationValue? = (expression.getOrBuildFir(firResolveSession) as? FirExpression)?.let { - FirAnnotationValueConverter.toConstantValue(it, firResolveSession.useSiteFirSession) + FirAnnotationValueConverter.toConstantValue(it, analysisSession.firSymbolBuilder) } private fun evaluateFir( diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt index a38078d01ea..6ee54804b36 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt @@ -9,8 +9,8 @@ import org.jetbrains.kotlin.analysis.api.annotations.* import org.jetbrains.kotlin.analysis.api.base.KtConstantValue import org.jetbrains.kotlin.analysis.api.base.KtConstantValueFactory import org.jetbrains.kotlin.analysis.api.components.KtConstantEvaluationMode +import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.fullyExpandedClass @@ -34,14 +34,13 @@ import org.jetbrains.kotlin.resolve.ArrayFqNames internal object FirAnnotationValueConverter { fun toNamedConstantValue( argumentMapping: Map, - session: FirSession, - ): List = - argumentMapping.map { (name, expression) -> - KtNamedAnnotationValue( - name, - expression.convertConstantExpression(session) ?: KtUnsupportedAnnotationValue - ) - } + builder: KtSymbolByFirBuilder, + ): List = argumentMapping.map { (name, expression) -> + KtNamedAnnotationValue( + name, + expression.convertConstantExpression(builder) ?: KtUnsupportedAnnotationValue + ) + } private fun FirConstExpression.convertConstantExpression(): KtConstantAnnotationValue? { val expression = psi as? KtElement @@ -71,12 +70,12 @@ internal object FirAnnotationValueConverter { } private fun Collection.convertVarargsExpression( - session: FirSession, + builder: KtSymbolByFirBuilder, ): Pair, KtElement?> { var representativePsi: KtElement? = null val flattenedVarargs = buildList { for (expr in this@convertVarargsExpression) { - val converted = expr.convertConstantExpression(session) ?: continue + val converted = expr.convertConstantExpression(builder) ?: continue if (expr is FirSpreadArgumentExpression || expr is FirNamedArgumentExpression) { addAll((converted as KtArrayAnnotationValue).values) @@ -93,40 +92,38 @@ internal object FirAnnotationValueConverter { fun toConstantValue( firExpression: FirExpression, - session: FirSession, - ): KtAnnotationValue? = firExpression.convertConstantExpression(session) + builder: KtSymbolByFirBuilder, + ): KtAnnotationValue? = firExpression.convertConstantExpression(builder) - private fun FirExpression.convertConstantExpression( - session: FirSession, - ): KtAnnotationValue? { + private fun FirExpression.convertConstantExpression(builder: KtSymbolByFirBuilder): KtAnnotationValue? { val sourcePsi = psi as? KtElement return when (this) { is FirConstExpression<*> -> convertConstantExpression() is FirNamedArgumentExpression -> { - expression.convertConstantExpression(session) + expression.convertConstantExpression(builder) } is FirSpreadArgumentExpression -> { - expression.convertConstantExpression(session) + expression.convertConstantExpression(builder) } is FirVarargArgumentsExpression -> { // Vararg arguments may have multiple independent expressions associated. // Choose one to be the representative PSI value for the entire assembled argument. - val (annotationValues, representativePsi) = arguments.convertVarargsExpression(session) + val (annotationValues, representativePsi) = arguments.convertVarargsExpression(builder) KtArrayAnnotationValue(annotationValues, representativePsi ?: sourcePsi) } is FirArrayLiteral -> { // Desugared collection literals. - KtArrayAnnotationValue(argumentList.arguments.convertVarargsExpression(session).first, sourcePsi) + KtArrayAnnotationValue(argumentList.arguments.convertVarargsExpression(builder).first, sourcePsi) } is FirFunctionCall -> { val reference = calleeReference as? FirResolvedNamedReference ?: return null when (val resolvedSymbol = reference.resolvedSymbol) { is FirConstructorSymbol -> { - val classSymbol = resolvedSymbol.getContainingClassSymbol(session) ?: return null + val classSymbol = resolvedSymbol.getContainingClassSymbol(builder.rootSession) ?: return null if ((classSymbol.fir as? FirClass)?.classKind == ClassKind.ANNOTATION_CLASS) { val resultMap = mutableMapOf() resolvedArgumentMapping?.entries?.forEach { (arg, param) -> @@ -138,8 +135,11 @@ internal object FirAnnotationValueConverter { resolvedSymbol.callableId.classId, psi as? KtCallElement, useSiteTarget = null, - toNamedConstantValue(resultMap, session), + toNamedConstantValue(resultMap, builder), index = null, + constructorSymbolPointer = with(builder.analysisSession) { + builder.functionLikeBuilder.buildConstructorSymbol(resolvedSymbol).createPointer() + }, ) ) } else null @@ -148,7 +148,7 @@ internal object FirAnnotationValueConverter { is FirNamedFunctionSymbol -> { // arrayOf call with a single vararg argument. if (resolvedSymbol.callableId.asSingleFqName() in ArrayFqNames.ARRAY_CALL_FQ_NAMES) - argumentList.arguments.single().convertConstantExpression(session) + argumentList.arguments.single().convertConstantExpression(builder) else null } @@ -174,7 +174,7 @@ internal object FirAnnotationValueConverter { is FirGetClassCall -> { var symbol = (argument as? FirResolvedQualifier)?.symbol if (symbol is FirTypeAliasSymbol) { - symbol = symbol.fullyExpandedClass(session) ?: symbol + symbol = symbol.fullyExpandedClass(builder.rootSession) ?: symbol } when { symbol == null -> { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt index 3491f2d0640..3a336e9ea4b 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -34,7 +34,7 @@ internal class KtFirAnonymousFunctionSymbol( override val annotationsList: KtAnnotationsList get() = withValidityAssertion { - KtFirAnnotationListForDeclaration.create(firSymbol, analysisSession.useSiteSession, token) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override val returnType: KtType get() = withValidityAssertion { firSymbol.returnType(analysisSession.firSymbolBuilder) } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirAnonymousObjectSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirAnonymousObjectSymbol.kt index fbb6bea08e7..5c209e41487 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirAnonymousObjectSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirAnonymousObjectSymbol.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -26,7 +26,7 @@ internal open class KtFirAnonymousObjectSymbol( override val psi: PsiElement? = withValidityAssertion { firSymbol.fir.getAllowedPsi() } override val annotationsList by cached { - KtFirAnnotationListForDeclaration.create(firSymbol, analysisSession.useSiteSession, token) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override val superTypes: List by cached { firSymbol.superTypesList(builder) } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirBackingFieldSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirBackingFieldSymbol.kt index 8517e1e5fde..e907dd546e6 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirBackingFieldSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirBackingFieldSymbol.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -26,7 +26,7 @@ internal class KtFirBackingFieldSymbol( override val annotationsList: KtAnnotationsList get() = withValidityAssertion { - KtFirAnnotationListForDeclaration.create(firSymbol, analysisSession.useSiteSession, token) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override val returnType: KtType get() = withValidityAssertion { firSymbol.returnType(builder) } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirConstructorSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirConstructorSymbol.kt index f54f5017c80..296d9253196 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirConstructorSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirConstructorSymbol.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -49,11 +49,7 @@ internal class KtFirConstructorSymbol( override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility } override val annotationsList by cached { - KtFirAnnotationListForDeclaration.create( - firSymbol, - analysisSession.useSiteSession, - token, - ) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override val containingClassIdIfNonLocal: ClassId? diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirDestructuringDeclarationSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirDestructuringDeclarationSymbol.kt index 18b10bf6f49..11266577403 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirDestructuringDeclarationSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirDestructuringDeclarationSymbol.kt @@ -47,7 +47,7 @@ internal class KtFirDestructuringDeclarationSymbol( } override val annotationsList: KtAnnotationsList - get() = withValidityAssertion { KtFirAnnotationListForDeclaration.create(firSymbol, analysisSession.useSiteSession, token) } + get() = withValidityAssertion { KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override val entries: List get() = withValidityAssertion { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirEnumEntrySymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirEnumEntrySymbol.kt index 27f5046fbd7..385ca40b96d 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirEnumEntrySymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirEnumEntrySymbol.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -35,7 +35,7 @@ internal class KtFirEnumEntrySymbol( override val annotationsList: KtAnnotationsList get() = withValidityAssertion { - KtFirAnnotationListForDeclaration.create(firSymbol, analysisSession.useSiteSession, token) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override val name: Name get() = withValidityAssertion { firSymbol.name } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFileSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFileSymbol.kt index be1eff7326b..c4d4ef385a5 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFileSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFileSymbol.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -31,11 +31,7 @@ internal class KtFirFileSymbol( } override val annotationsList by cached { - KtFirAnnotationListForDeclaration.create( - firSymbol, - analysisSession.useSiteSession, - token, - ) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override fun equals(other: Any?): Boolean = symbolEquals(other) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFunctionSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFunctionSymbol.kt index 0214c3364c8..023fe680ba9 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFunctionSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFunctionSymbol.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -68,11 +68,7 @@ internal class KtFirFunctionSymbol( get() = withValidityAssertion { firSymbol.fir.hasStableParameterNames } override val annotationsList by cached { - KtFirAnnotationListForDeclaration.create( - firSymbol, - analysisSession.useSiteSession, - token, - ) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override val isSuspend: Boolean get() = withValidityAssertion { firSymbol.isSuspend } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirJavaFieldSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirJavaFieldSymbol.kt index bd1d439912f..43e57c48f2d 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirJavaFieldSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirJavaFieldSymbol.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -37,7 +37,7 @@ internal class KtFirJavaFieldSymbol( override val annotationsList: KtAnnotationsList get() = withValidityAssertion { - KtFirAnnotationListForDeclaration.create(firSymbol, analysisSession.useSiteSession, token) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override val isVal: Boolean get() = withValidityAssertion { firSymbol.fir.isVal } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirKotlinPropertySymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirKotlinPropertySymbol.kt index dd8e04ad476..69c63363582 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirKotlinPropertySymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirKotlinPropertySymbol.kt @@ -21,10 +21,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.UnsupportedSymbolKind -import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointerOfType import org.jetbrains.kotlin.analysis.api.types.KtType -import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries -import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getContainingFile import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.containingClassLookupTag @@ -38,7 +35,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.isExtension import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.psi.KtFile internal class KtFirKotlinPropertySymbol( override val firSymbol: FirPropertySymbol, @@ -64,7 +60,7 @@ internal class KtFirKotlinPropertySymbol( override val contextReceivers: List by cached { firSymbol.createContextReceivers(builder) } override val isExtension: Boolean get() = withValidityAssertion { firSymbol.isExtension } - override val initializer: KtInitializerValue? by cached { firSymbol.getKtConstantInitializer(analysisSession.firResolveSession) } + override val initializer: KtInitializerValue? by cached { firSymbol.getKtConstantInitializer(builder) } override val symbolKind: KtSymbolKind get() = withValidityAssertion { @@ -81,11 +77,7 @@ internal class KtFirKotlinPropertySymbol( override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility } override val annotationsList by cached { - KtFirAnnotationListForDeclaration.create( - firSymbol, - analysisSession.useSiteSession, - token - ) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override val callableIdIfNonLocal: CallableId? get() = withValidityAssertion { firSymbol.getCallableIdIfNonLocal() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirLocalVariableSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirLocalVariableSymbol.kt index 1c79ee843ef..2be45839137 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirLocalVariableSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirLocalVariableSymbol.kt @@ -37,7 +37,7 @@ internal abstract class KtFirLocalOrErrorVariableSymbol diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSyntheticJavaPropertySymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSyntheticJavaPropertySymbol.kt index 15c0072719f..40716e2c867 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSyntheticJavaPropertySymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSyntheticJavaPropertySymbol.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -49,17 +49,13 @@ internal class KtFirSyntheticJavaPropertySymbol( override val isExtension: Boolean get() = withValidityAssertion { firSymbol.isExtension } - override val initializer: KtInitializerValue? by cached { firSymbol.getKtConstantInitializer(analysisSession.firResolveSession) } + override val initializer: KtInitializerValue? by cached { firSymbol.getKtConstantInitializer(builder) } override val modality: Modality get() = withValidityAssertion { firSymbol.modality } override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility } override val annotationsList by cached { - KtFirAnnotationListForDeclaration.create( - firSymbol, - analysisSession.useSiteSession, - token - ) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override val callableIdIfNonLocal: CallableId? get() = withValidityAssertion { firSymbol.getCallableIdIfNonLocal() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeAliasSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeAliasSymbol.kt index 3ade118fdf7..f6973f196cf 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeAliasSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeAliasSymbol.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -51,7 +51,7 @@ internal class KtFirTypeAliasSymbol( override val expandedType: KtType by cached { builder.typeBuilder.buildKtType(firSymbol.resolvedExpandedTypeRef) } override val annotationsList: KtAnnotationsList by cached { - KtFirAnnotationListForDeclaration.create(firSymbol, analysisSession.useSiteSession, token) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override val symbolKind: KtSymbolKind get() = withValidityAssertion { getSymbolKind() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeParameterSymbolBase.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeParameterSymbolBase.kt index ce96db35804..72184f148ad 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeParameterSymbolBase.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeParameterSymbolBase.kt @@ -16,10 +16,10 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.types.KtType -import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol -import org.jetbrains.kotlin.fir.types.isNullableAny import org.jetbrains.kotlin.fir.analysis.checkers.typeParameterSymbols +import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.UnexpandedTypeCheck +import org.jetbrains.kotlin.fir.types.isNullableAny /** * [KtFirTypeParameterSymbolBase] provides shared implementations for [KtFirTypeParameterSymbol] and [KtFirPsiJavaTypeParameterSymbol]. @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.fir.types.UnexpandedTypeCheck internal sealed class KtFirTypeParameterSymbolBase : KtTypeParameterSymbol(), KtFirSymbol { override val annotationsList: KtAnnotationsList get() = withValidityAssertion { - KtFirAnnotationListForDeclaration.create(firSymbol, analysisSession.useSiteSession, token) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } @OptIn(UnexpandedTypeCheck::class) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirValueParameterSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirValueParameterSymbol.kt index 8527bfe93e9..3d3a7c906b3 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirValueParameterSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirValueParameterSymbol.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -58,11 +58,7 @@ internal class KtFirValueParameterSymbol( override val hasDefaultValue: Boolean get() = withValidityAssertion { firSymbol.hasDefaultValue } override val annotationsList by cached { - KtFirAnnotationListForDeclaration.create( - firSymbol, - analysisSession.useSiteSession, - token, - ) + KtFirAnnotationListForDeclaration.create(firSymbol, builder) } override val generatedPrimaryConstructorProperty: KtKotlinPropertySymbol? by cached { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/firSymbolUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/firSymbolUtils.kt index 4b593019541..f1e33bc6197 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/firSymbolUtils.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/firSymbolUtils.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -15,14 +15,13 @@ import org.jetbrains.kotlin.analysis.api.fir.utils.asKtInitializerValue import org.jetbrains.kotlin.analysis.api.impl.base.KtContextReceiverImpl import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol import org.jetbrains.kotlin.analysis.api.types.KtType -import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterResolvedNamedReference import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol -import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.symbols.impl.* +import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.types.ConeDynamicType import org.jetbrains.kotlin.fir.types.create import org.jetbrains.kotlin.fir.types.toRegularClassSymbol @@ -106,7 +105,7 @@ internal fun FirCallableSymbol<*>.dispatchReceiverType( return type?.let { builder.typeBuilder.buildKtType(it) } } -internal fun FirVariableSymbol<*>.getKtConstantInitializer(resolveSession: LLFirResolveSession): KtInitializerValue? { +internal fun FirVariableSymbol<*>.getKtConstantInitializer(builder: KtSymbolByFirBuilder): KtInitializerValue? { // to avoid lazy resolve if (fir.initializer == null) return null @@ -122,8 +121,10 @@ internal fun FirVariableSymbol<*>.getKtConstantInitializer(resolveSession: LLFir } } } + val parentIsAnnotation = dispatchReceiverType - ?.toRegularClassSymbol(resolveSession.useSiteFirSession) + ?.toRegularClassSymbol(builder.rootSession) ?.classKind == ClassKind.ANNOTATION_CLASS - return firInitializer.asKtInitializerValue(moduleData.session, parentIsAnnotation) + + return firInitializer.asKtInitializerValue(builder, parentIsAnnotation) } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirCapturedType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirCapturedType.kt index 6d3f00718aa..3f85973412c 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirCapturedType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirCapturedType.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -28,7 +28,7 @@ internal class KtFirCapturedType( get() = withValidityAssertion { builder.typeBuilder.buildTypeProjection(coneType.constructor.projection) } override val annotationsList: KtAnnotationsList by cached { - KtFirAnnotationListForType.create(coneType, builder.rootSession, token) + KtFirAnnotationListForType.create(coneType, builder) } override fun asStringForDebugging(): String = withValidityAssertion { coneType.renderForDebugging() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirClassErrorType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirClassErrorType.kt index 4090c433833..47c64aaa207 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirClassErrorType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirClassErrorType.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -46,7 +46,7 @@ internal class KtFirClassErrorType( override val errorMessage: String get() = withValidityAssertion { coneDiagnostic.reason } override val annotationsList: KtAnnotationsList by cached { - KtFirAnnotationListForType.create(coneType, builder.rootSession, token) + KtFirAnnotationListForType.create(coneType, builder) } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirDefinitelyNotNullType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirDefinitelyNotNullType.kt index 36c015fa9c0..65e2cb03824 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirDefinitelyNotNullType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirDefinitelyNotNullType.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -23,7 +23,7 @@ internal class KtFirDefinitelyNotNullType( override val token: KtLifetimeToken get() = builder.token override val original: KtType = withValidityAssertion { builder.typeBuilder.buildKtType(this.coneType.original) } override val annotationsList: KtAnnotationsList by cached { - KtFirAnnotationListForType.create(coneType, builder.rootSession, token) + KtFirAnnotationListForType.create(coneType, builder) } override fun asStringForDebugging(): String = withValidityAssertion { coneType.renderForDebugging() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirDynamicType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirDynamicType.kt index 6455d6b986d..410aecec827 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirDynamicType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirDynamicType.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -22,7 +22,7 @@ internal class KtFirDynamicType( ) : KtDynamicType(), KtFirType { override val token: KtLifetimeToken get() = builder.token override val annotationsList: KtAnnotationsList by cached { - KtFirAnnotationListForType.create(coneType, builder.rootSession, token) + KtFirAnnotationListForType.create(coneType, builder) } override val nullability: KtTypeNullability get() = withValidityAssertion { coneType.nullability.asKtNullability() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirFlexibleType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirFlexibleType.kt index f4a519391de..18d0a11d017 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirFlexibleType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirFlexibleType.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -26,7 +26,7 @@ internal class KtFirFlexibleType( override val lowerBound: KtType get() = withValidityAssertion { builder.typeBuilder.buildKtType(coneType.lowerBound) } override val upperBound: KtType get() = withValidityAssertion { builder.typeBuilder.buildKtType(coneType.upperBound) } override val annotationsList: KtAnnotationsList by cached { - KtFirAnnotationListForType.create(coneType, builder.rootSession, token) + KtFirAnnotationListForType.create(coneType, builder) } override val nullability: KtTypeNullability get() = withValidityAssertion { coneType.nullability.asKtNullability() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirFunctionalType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirFunctionalType.kt index a3b1c22ed76..c96016f0efa 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirFunctionalType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirFunctionalType.kt @@ -1,12 +1,11 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.analysis.api.fir.types import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals -import org.jetbrains.kotlin.analysis.api.KtTypeArgumentWithVariance import org.jetbrains.kotlin.analysis.api.KtTypeProjection import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver @@ -45,7 +44,7 @@ internal class KtFirFunctionalType( } override val annotationsList: KtAnnotationsList by cached { - KtFirAnnotationListForType.create(coneType, builder.rootSession, token) + KtFirAnnotationListForType.create(coneType, builder) } override val nullability: KtTypeNullability get() = withValidityAssertion { coneType.nullability.asKtNullability() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirIntegerLiteralType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirIntegerLiteralType.kt index 70cc04100e5..fb46dba1700 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirIntegerLiteralType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirIntegerLiteralType.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -34,7 +34,7 @@ internal class KtFirIntegerLiteralType( } override val annotationsList: KtAnnotationsList by cached { - KtFirAnnotationListForType.create(coneType, builder.rootSession, token) + KtFirAnnotationListForType.create(coneType, builder) } override val nullability: KtTypeNullability get() = withValidityAssertion { coneType.nullability.asKtNullability() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirIntersectionType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirIntersectionType.kt index 03ca98acd46..635df4386c1 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirIntersectionType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirIntersectionType.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -27,7 +27,7 @@ internal class KtFirIntersectionType( coneType.intersectedTypes.map { conjunct -> builder.typeBuilder.buildKtType(conjunct) } } override val annotationsList: KtAnnotationsList by cached { - KtFirAnnotationListForType.create(coneType, builder.rootSession, token) + KtFirAnnotationListForType.create(coneType, builder) } override val nullability: KtTypeNullability get() = withValidityAssertion { coneType.nullability.asKtNullability() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirTypeErrorType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirTypeErrorType.kt index c79e73b6cb9..464533bbb79 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirTypeErrorType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirTypeErrorType.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -36,7 +36,7 @@ internal class KtFirTypeErrorType( } override val annotationsList: KtAnnotationsList by cached { - KtFirAnnotationListForType.create(coneType, builder.rootSession, token) + KtFirAnnotationListForType.create(coneType, builder) } override fun asStringForDebugging(): String = withValidityAssertion { coneType.renderForDebugging() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirTypeParameterType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirTypeParameterType.kt index a9be7c2fce0..00781ed7022 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirTypeParameterType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirTypeParameterType.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -31,7 +31,7 @@ internal class KtFirTypeParameterType( } override val annotationsList: KtAnnotationsList by cached { - KtFirAnnotationListForType.create(coneType, builder.rootSession, token) + KtFirAnnotationListForType.create(coneType, builder) } override val nullability: KtTypeNullability get() = withValidityAssertion { coneType.nullability.asKtNullability() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirUsualClassType.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirUsualClassType.kt index bd8c7fb3e85..842b815369e 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirUsualClassType.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/types/KtFirUsualClassType.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -40,7 +40,7 @@ internal class KtFirUsualClassType( override val ownTypeArguments: List get() = withValidityAssertion { qualifiers.last().typeArguments } override val annotationsList: KtAnnotationsList by cached { - KtFirAnnotationListForType.create(coneType, builder.rootSession, token) + KtFirAnnotationListForType.create(coneType, builder) } override val nullability: KtTypeNullability get() = withValidityAssertion { coneType.nullability.asKtNullability() } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/utils/firUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/utils/firUtils.kt index e15aa9629ea..f158399567b 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/utils/firUtils.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/utils/firUtils.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.analysis.api.fir.utils @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.analysis.api.KtConstantValueForAnnotation import org.jetbrains.kotlin.analysis.api.KtInitializerValue import org.jetbrains.kotlin.analysis.api.KtNonConstantInitializerValue import org.jetbrains.kotlin.analysis.api.components.KtConstantEvaluationMode +import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirAnnotationValueConverter import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirCompileTimeConstantEvaluator import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability @@ -72,16 +73,13 @@ internal fun FirCallableSymbol<*>.computeImportableName(useSiteSession: FirSessi return if (canBeImported) callableId.asSingleFqName() else null } -internal fun FirExpression.asKtInitializerValue( - session: FirSession, - forAnnotationDefaultValue: Boolean -): KtInitializerValue { +internal fun FirExpression.asKtInitializerValue(builder: KtSymbolByFirBuilder, forAnnotationDefaultValue: Boolean): KtInitializerValue { val ktExpression = psi as? KtExpression - val evaluated = - FirCompileTimeConstantEvaluator.evaluateAsKtConstantValue(this, KtConstantEvaluationMode.CONSTANT_EXPRESSION_EVALUATION) + val evaluated = FirCompileTimeConstantEvaluator.evaluateAsKtConstantValue(this, KtConstantEvaluationMode.CONSTANT_EXPRESSION_EVALUATION) + return when (evaluated) { null -> if (forAnnotationDefaultValue) { - val annotationConstantValue = FirAnnotationValueConverter.toConstantValue(this, session) + val annotationConstantValue = FirAnnotationValueConverter.toConstantValue(this, builder) if (annotationConstantValue != null) { KtConstantValueForAnnotation(annotationConstantValue, ktExpression) } else { diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/annotations/KtAnnotationApplicationWithArgumentsInfo.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/annotations/KtAnnotationApplicationWithArgumentsInfo.kt index fe077dbf60e..424da30a869 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/annotations/KtAnnotationApplicationWithArgumentsInfo.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/annotations/KtAnnotationApplicationWithArgumentsInfo.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.analysis.api.annotations +import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol +import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.psi.KtCallElement @@ -23,6 +25,11 @@ public data class KtAnnotationApplicationWithArgumentsInfo( */ public val arguments: List, override val index: Int?, + + /** + * The constructor symbol into which this annotation resolves if the annotation is correctly resolved + */ + public val constructorSymbolPointer: KtSymbolPointer?, ) : KtAnnotationApplication { override val isCallWithArguments: Boolean get() = arguments.isNotEmpty() }