AA/LC: Support annotation property->backing field move
#KT-57462 Fixed
This commit is contained in:
committed by
Space Team
parent
f6bf7560a6
commit
1f05ce2e01
+6
@@ -402,6 +402,12 @@ internal class KtSymbolByFirBuilder constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun buildBackingFieldSymbol(firSymbol: FirBackingFieldSymbol): KtFirBackingFieldSymbol {
|
||||
return symbolsCache.cache(firSymbol) {
|
||||
KtFirBackingFieldSymbol(firSymbol, analysisSession)
|
||||
}
|
||||
}
|
||||
|
||||
fun buildExtensionReceiverSymbol(firCallableSymbol: FirCallableSymbol<*>): KtReceiverParameterSymbol? {
|
||||
if (firCallableSymbol.fir.receiverParameter == null) return null
|
||||
return KtFirReceiverParameterSymbol(firCallableSymbol, analysisSession)
|
||||
|
||||
+8
-4
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
internal class KtFirAnnotationListForDeclaration private constructor(
|
||||
@@ -53,10 +54,13 @@ internal class KtFirAnnotationListForDeclaration private constructor(
|
||||
useSiteSession: FirSession,
|
||||
token: KtLifetimeToken,
|
||||
): KtAnnotationsList {
|
||||
return if (firSymbol.annotations.isEmpty()) {
|
||||
KtEmptyAnnotationsList(token)
|
||||
} else {
|
||||
KtFirAnnotationListForDeclaration(firSymbol, useSiteSession, token)
|
||||
return when {
|
||||
firSymbol is FirBackingFieldSymbol && firSymbol.propertySymbol.annotations.any { it.useSiteTarget == null } ->
|
||||
KtFirAnnotationListForDeclaration(firSymbol, useSiteSession, token)
|
||||
firSymbol.annotations.isEmpty() ->
|
||||
KtEmptyAnnotationsList(token)
|
||||
else ->
|
||||
KtFirAnnotationListForDeclaration(firSymbol, useSiteSession, token)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -18,8 +18,8 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.symbols.resolvedAnnotationsWithArguments
|
||||
import org.jetbrains.kotlin.fir.symbols.resolvedAnnotationsWithClassIds
|
||||
import org.jetbrains.kotlin.fir.symbols.resolveAnnotationsWithArguments
|
||||
import org.jetbrains.kotlin.fir.symbols.resolveAnnotationsWithClassIds
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.custom
|
||||
import org.jetbrains.kotlin.fir.types.customAnnotations
|
||||
@@ -89,8 +89,8 @@ private fun ConeKotlinType.customAnnotationsWithLazyResolve(phase: FirResolvePha
|
||||
|
||||
for (containerSymbol in custom.containerSymbols) {
|
||||
when (phase) {
|
||||
FirResolvePhase.TYPES -> annotations.resolvedAnnotationsWithClassIds(containerSymbol)
|
||||
FirResolvePhase.ANNOTATIONS_ARGUMENTS_MAPPING -> annotations.resolvedAnnotationsWithArguments(containerSymbol)
|
||||
FirResolvePhase.TYPES -> resolveAnnotationsWithClassIds(containerSymbol)
|
||||
FirResolvePhase.ANNOTATIONS_ARGUMENTS_MAPPING -> annotations.resolveAnnotationsWithArguments(containerSymbol)
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-2
@@ -33,7 +33,7 @@ internal class KtFirSymbolInfoProvider(
|
||||
private val apiVersion = analysisSession.useSiteSession.languageVersionSettings.apiVersion
|
||||
|
||||
override fun getDeprecation(symbol: KtSymbol): DeprecationInfo? {
|
||||
if (symbol is KtFirBackingFieldSymbol || symbol is KtFirPackageSymbol || symbol is KtReceiverParameterSymbol) return null
|
||||
if (symbol is KtFirPackageSymbol || symbol is KtReceiverParameterSymbol) return null
|
||||
require(symbol is KtFirSymbol<*>) { "${this::class}" }
|
||||
|
||||
// Optimization: Avoid building `firSymbol` of `KtFirPsiJavaClassSymbol` if it definitely isn't deprecated.
|
||||
@@ -44,6 +44,7 @@ internal class KtFirSymbolInfoProvider(
|
||||
return when (val firSymbol = symbol.firSymbol) {
|
||||
is FirPropertySymbol -> {
|
||||
firSymbol.getDeprecationForCallSite(apiVersion, AnnotationUseSiteTarget.PROPERTY)
|
||||
?: firSymbol.backingFieldSymbol?.getDeprecationForCallSite(apiVersion, AnnotationUseSiteTarget.FIELD)
|
||||
}
|
||||
else -> {
|
||||
firSymbol.getDeprecationForCallSite(apiVersion)
|
||||
@@ -115,7 +116,9 @@ internal class KtFirSymbolInfoProvider(
|
||||
}
|
||||
|
||||
private fun getJvmName(property: FirProperty, isSetter: Boolean): Name {
|
||||
if (property.hasAnnotation(StandardClassIds.Annotations.JvmField, analysisSession.useSiteSession)) return property.name
|
||||
if (property.backingField?.symbol?.hasAnnotation(StandardClassIds.Annotations.JvmField, analysisSession.useSiteSession) == true) {
|
||||
return property.name
|
||||
}
|
||||
return Name.identifier(getJvmNameAsString(property, isSetter))
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -11,12 +11,10 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
||||
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
|
||||
import org.jetbrains.kotlin.analysis.api.fir.findPsi
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.*
|
||||
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
||||
@@ -24,7 +22,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointe
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.UnsupportedSymbolKind
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||
@@ -97,6 +94,10 @@ internal class KtFirKotlinPropertySymbol(
|
||||
get() = withValidityAssertion {
|
||||
firSymbol.setterSymbol?.let { builder.callableBuilder.buildPropertyAccessorSymbol(it) } as? KtPropertySetterSymbol
|
||||
}
|
||||
override val backingFieldSymbol: KtBackingFieldSymbol?
|
||||
get() = withValidityAssertion {
|
||||
firSymbol.backingFieldSymbol?.let { builder.callableBuilder.buildBackingFieldSymbol(it) }
|
||||
}
|
||||
|
||||
// NB: `field` in accessors indicates the property should have a backing field. To see that, though, we need BODY_RESOLVE.
|
||||
override val hasBackingField: Boolean
|
||||
|
||||
+3
@@ -84,6 +84,9 @@ internal class KtFirSyntheticJavaPropertySymbol(
|
||||
firSymbol.setterSymbol?.let { builder.callableBuilder.buildPropertyAccessorSymbol(it) } as? KtPropertySetterSymbol
|
||||
}
|
||||
|
||||
override val backingFieldSymbol: KtBackingFieldSymbol?
|
||||
get() = null
|
||||
|
||||
override val isFromPrimaryConstructor: Boolean get() = withValidityAssertion { false }
|
||||
override val isOverride: Boolean get() = withValidityAssertion { firSymbol.isOverride }
|
||||
override val isStatic: Boolean get() = withValidityAssertion { firSymbol.isStatic }
|
||||
|
||||
Reference in New Issue
Block a user