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() }