[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
This commit is contained in:
committed by
Space Team
parent
3a6cdc83cf
commit
1173cc46e2
+11
-7
@@ -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,
|
||||
|
||||
@@ -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<FirBasedSymbol<*>>
|
||||
}
|
||||
|
||||
internal fun FirAnnotation.toKtAnnotationApplication(
|
||||
useSiteSession: FirSession,
|
||||
builder: KtSymbolByFirBuilder,
|
||||
index: Int,
|
||||
arguments: List<KtNamedAnnotationValue> = 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,
|
||||
|
||||
+7
-6
@@ -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<FirBasedSymbol<*>, KtSymbol>()
|
||||
|
||||
+11
-12
@@ -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<KtAnnotationApplicationWithArgumentsInfo>
|
||||
get() = withValidityAssertion {
|
||||
annotations(firSymbol, useSiteSession)
|
||||
annotations(firSymbol, builder)
|
||||
}
|
||||
|
||||
override val annotationInfos: List<KtAnnotationApplicationInfo>
|
||||
@@ -40,7 +43,7 @@ internal class KtFirAnnotationListForDeclaration private constructor(
|
||||
classId: ClassId,
|
||||
useSiteTargetFilter: AnnotationUseSiteTargetFilter,
|
||||
): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
|
||||
annotationsByClassId(firSymbol, classId, useSiteTargetFilter, useSiteSession)
|
||||
annotationsByClassId(firSymbol, classId, useSiteTargetFilter, builder)
|
||||
}
|
||||
|
||||
override val annotationClassIds: Collection<ClassId>
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-11
@@ -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<KtAnnotationApplicationWithArgumentsInfo>
|
||||
get() = withValidityAssertion {
|
||||
annotations(firCallableSymbol, useSiteSession, receiverParameter)
|
||||
annotations(firCallableSymbol, builder, receiverParameter)
|
||||
}
|
||||
|
||||
override val annotationInfos: List<KtAnnotationApplicationInfo>
|
||||
@@ -41,7 +44,7 @@ internal class KtFirAnnotationListForReceiverParameter private constructor(
|
||||
classId: ClassId,
|
||||
useSiteTargetFilter: AnnotationUseSiteTargetFilter,
|
||||
): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
|
||||
annotationsByClassId(firCallableSymbol, classId, useSiteTargetFilter, useSiteSession, receiverParameter)
|
||||
annotationsByClassId(firCallableSymbol, classId, useSiteTargetFilter, builder, receiverParameter)
|
||||
}
|
||||
|
||||
override val annotationClassIds: Collection<ClassId>
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-11
@@ -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<KtAnnotationApplicationWithArgumentsInfo>
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+17
-16
@@ -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<KtAnnotationApplicationWithArgumentsInfo> =
|
||||
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<FirAnnotation>.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 <T> FirAnnotation.findFromRawArguments(expectedEnumClass: ClassId, transformer: (String) -> T?): Set<T> = buildSet {
|
||||
@@ -150,11 +151,11 @@ private fun <T> FirAnnotation.findFromRawArguments(expectedEnumClass: ClassId, t
|
||||
|
||||
internal fun annotations(
|
||||
firSymbol: FirBasedSymbol<*>,
|
||||
useSiteSession: FirSession,
|
||||
builder: KtSymbolByFirBuilder,
|
||||
annotationContainer: FirAnnotationContainer = firSymbol.fir,
|
||||
): List<KtAnnotationApplicationWithArgumentsInfo> =
|
||||
annotationContainer.resolvedAnnotationsWithArguments(firSymbol).mapIndexed { index, annotation ->
|
||||
annotation.toKtAnnotationApplication(useSiteSession, index)
|
||||
annotation.toKtAnnotationApplication(builder, index)
|
||||
}
|
||||
|
||||
internal fun annotationInfos(
|
||||
|
||||
+2
-10
@@ -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(
|
||||
|
||||
+24
-24
@@ -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<Name, FirExpression>,
|
||||
session: FirSession,
|
||||
): List<KtNamedAnnotationValue> =
|
||||
argumentMapping.map { (name, expression) ->
|
||||
KtNamedAnnotationValue(
|
||||
name,
|
||||
expression.convertConstantExpression(session) ?: KtUnsupportedAnnotationValue
|
||||
)
|
||||
}
|
||||
builder: KtSymbolByFirBuilder,
|
||||
): List<KtNamedAnnotationValue> = argumentMapping.map { (name, expression) ->
|
||||
KtNamedAnnotationValue(
|
||||
name,
|
||||
expression.convertConstantExpression(builder) ?: KtUnsupportedAnnotationValue
|
||||
)
|
||||
}
|
||||
|
||||
private fun <T> FirConstExpression<T>.convertConstantExpression(): KtConstantAnnotationValue? {
|
||||
val expression = psi as? KtElement
|
||||
@@ -71,12 +70,12 @@ internal object FirAnnotationValueConverter {
|
||||
}
|
||||
|
||||
private fun Collection<FirExpression>.convertVarargsExpression(
|
||||
session: FirSession,
|
||||
builder: KtSymbolByFirBuilder,
|
||||
): Pair<Collection<KtAnnotationValue>, 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<Name, FirExpression>()
|
||||
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 -> {
|
||||
|
||||
+2
-2
@@ -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) }
|
||||
|
||||
+2
-2
@@ -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<KtType> by cached { firSymbol.superTypesList(builder) }
|
||||
|
||||
+2
-2
@@ -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) }
|
||||
|
||||
+2
-6
@@ -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?
|
||||
|
||||
+1
-1
@@ -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<KtLocalVariableSymbol>
|
||||
get() = withValidityAssertion {
|
||||
|
||||
+2
-2
@@ -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 }
|
||||
|
||||
+2
-6
@@ -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)
|
||||
|
||||
+2
-6
@@ -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 }
|
||||
|
||||
+2
-2
@@ -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 }
|
||||
|
||||
+2
-10
@@ -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<KtContextReceiver> 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() }
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ internal abstract class KtFirLocalOrErrorVariableSymbol<E : FirVariable, S : Fir
|
||||
|
||||
override val annotationsList: KtAnnotationsList
|
||||
get() = withValidityAssertion {
|
||||
KtFirAnnotationListForDeclaration.create(firSymbol, analysisSession.useSiteSession, token)
|
||||
KtFirAnnotationListForDeclaration.create(firSymbol, builder)
|
||||
}
|
||||
|
||||
override val name: Name get() = withValidityAssertion { firSymbol.name }
|
||||
|
||||
+2
-6
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -59,11 +59,7 @@ internal class KtFirNamedClassOrObjectSymbol(
|
||||
}
|
||||
|
||||
override val annotationsList by cached {
|
||||
KtFirAnnotationListForDeclaration.create(
|
||||
firSymbol,
|
||||
analysisSession.useSiteSession,
|
||||
token,
|
||||
)
|
||||
KtFirAnnotationListForDeclaration.create(firSymbol, builder)
|
||||
}
|
||||
|
||||
override val isInner: Boolean get() = withValidityAssertion { firSymbol.isInner }
|
||||
|
||||
+2
-6
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -59,11 +59,7 @@ internal class KtFirPropertyGetterSymbol(
|
||||
override val receiverParameter: KtReceiverParameterSymbol? get() = withValidityAssertion { firSymbol.fir.propertySymbol.receiver(builder) }
|
||||
|
||||
override val annotationsList by cached {
|
||||
KtFirAnnotationListForDeclaration.create(
|
||||
firSymbol,
|
||||
analysisSession.useSiteSession,
|
||||
token,
|
||||
)
|
||||
KtFirAnnotationListForDeclaration.create(firSymbol, builder)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+1
-5
@@ -69,11 +69,7 @@ internal class KtFirPropertySetterSymbol(
|
||||
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
|
||||
|
||||
override val annotationsList by cached {
|
||||
KtFirAnnotationListForDeclaration.create(
|
||||
firSymbol,
|
||||
analysisSession.useSiteSession,
|
||||
token,
|
||||
)
|
||||
KtFirAnnotationListForDeclaration.create(firSymbol, builder)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -131,7 +131,7 @@ internal class KtFirPsiJavaClassSymbol(
|
||||
}
|
||||
|
||||
override val annotationsList: KtAnnotationsList by cached {
|
||||
if (hasAnnotations) KtFirAnnotationListForDeclaration.create(firSymbol, analysisSession.useSiteSession, token)
|
||||
if (hasAnnotations) KtFirAnnotationListForDeclaration.create(firSymbol, builder)
|
||||
else KtEmptyAnnotationsList(token)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -56,6 +56,6 @@ internal class KtFirReceiverParameterSymbol(
|
||||
}
|
||||
|
||||
override val annotationsList: KtAnnotationsList by cached {
|
||||
KtFirAnnotationListForReceiverParameter.create(firSymbol, analysisSession.useSiteSession, token)
|
||||
KtFirAnnotationListForReceiverParameter.create(firSymbol, builder = analysisSession.firSymbolBuilder)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -38,7 +38,7 @@ internal class KtFirSamConstructorSymbol(
|
||||
|
||||
override val annotationsList: KtAnnotationsList
|
||||
get() = withValidityAssertion {
|
||||
KtFirAnnotationListForDeclaration.create(firSymbol, analysisSession.useSiteSession, token)
|
||||
KtFirAnnotationListForDeclaration.create(firSymbol, builder)
|
||||
}
|
||||
|
||||
override val name: Name get() = withValidityAssertion { firSymbol.name }
|
||||
|
||||
+1
-5
@@ -32,11 +32,7 @@ internal class KtFirScriptSymbol(
|
||||
get() = withValidityAssertion { firSymbol.fir.psi }
|
||||
|
||||
override val annotationsList by cached {
|
||||
KtFirAnnotationListForDeclaration.create(
|
||||
firSymbol,
|
||||
analysisSession.useSiteSession,
|
||||
token,
|
||||
)
|
||||
KtFirAnnotationListForDeclaration.create(firSymbol, builder)
|
||||
}
|
||||
|
||||
override val typeParameters: List<KtTypeParameterSymbol>
|
||||
|
||||
+3
-7
@@ -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() }
|
||||
|
||||
+2
-2
@@ -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() }
|
||||
|
||||
+3
-3
@@ -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<FirTypeParameterSymbol> {
|
||||
override val annotationsList: KtAnnotationsList
|
||||
get() = withValidityAssertion {
|
||||
KtFirAnnotationListForDeclaration.create(firSymbol, analysisSession.useSiteSession, token)
|
||||
KtFirAnnotationListForDeclaration.create(firSymbol, builder)
|
||||
}
|
||||
|
||||
@OptIn(UnexpandedTypeCheck::class)
|
||||
|
||||
+2
-6
@@ -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 {
|
||||
|
||||
+7
-6
@@ -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)
|
||||
}
|
||||
|
||||
+2
-2
@@ -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() }
|
||||
|
||||
+2
-2
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
|
||||
+2
-2
@@ -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() }
|
||||
|
||||
+2
-2
@@ -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() }
|
||||
|
||||
|
||||
+2
-2
@@ -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() }
|
||||
|
||||
|
||||
+2
-3
@@ -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() }
|
||||
|
||||
+2
-2
@@ -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() }
|
||||
|
||||
+2
-2
@@ -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() }
|
||||
|
||||
|
||||
+2
-2
@@ -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() }
|
||||
|
||||
+2
-2
@@ -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() }
|
||||
|
||||
+2
-2
@@ -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<KtTypeProjection> 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() }
|
||||
|
||||
+6
-8
@@ -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 {
|
||||
|
||||
+7
@@ -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<KtNamedAnnotationValue>,
|
||||
override val index: Int?,
|
||||
|
||||
/**
|
||||
* The constructor symbol into which this annotation resolves if the annotation is correctly resolved
|
||||
*/
|
||||
public val constructorSymbolPointer: KtSymbolPointer<KtConstructorSymbol>?,
|
||||
) : KtAnnotationApplication {
|
||||
override val isCallWithArguments: Boolean get() = arguments.isNotEmpty()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user