[FIR] Add propertySymbol to property accessors
This commit is contained in:
committed by
TeamCityServer
parent
e34b64d6f2
commit
654ed3caf6
+129
-78
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.expressions.builder.buildExpressionStub
|
||||
import org.jetbrains.kotlin.fir.resolve.defaultType
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.toEffectiveVisibility
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.computeTypeAttributes
|
||||
@@ -218,6 +219,111 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadPropertyGetter(
|
||||
proto: ProtoBuf.Property,
|
||||
classSymbol: FirClassSymbol<*>?,
|
||||
defaultAccessorFlags: Int,
|
||||
returnTypeRef: FirTypeRef,
|
||||
propertySymbol: FirPropertySymbol,
|
||||
local: FirDeserializationContext,
|
||||
propertyModality: Modality,
|
||||
): FirPropertyAccessor {
|
||||
val getterFlags = if (proto.hasGetterFlags()) proto.getterFlags else defaultAccessorFlags
|
||||
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags))
|
||||
val accessorModality = ProtoEnumFlags.modality(Flags.MODALITY.get(getterFlags))
|
||||
val effectiveVisibility = visibility.toEffectiveVisibility(classSymbol)
|
||||
return if (Flags.IS_NOT_DEFAULT.get(getterFlags)) {
|
||||
buildPropertyAccessor {
|
||||
moduleData = c.moduleData
|
||||
origin = FirDeclarationOrigin.Library
|
||||
this.returnTypeRef = returnTypeRef
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
isGetter = true
|
||||
status = FirResolvedDeclarationStatusImpl(visibility, accessorModality, effectiveVisibility).apply {
|
||||
isInline = Flags.IS_INLINE_ACCESSOR.get(getterFlags)
|
||||
isExternal = Flags.IS_EXTERNAL_ACCESSOR.get(getterFlags)
|
||||
}
|
||||
this.symbol = FirPropertyAccessorSymbol()
|
||||
dispatchReceiverType = c.dispatchReceiver
|
||||
this.propertySymbol = propertySymbol
|
||||
}.apply {
|
||||
versionRequirementsTable = c.versionRequirementTable
|
||||
}
|
||||
} else {
|
||||
FirDefaultPropertyGetter(
|
||||
null,
|
||||
c.moduleData,
|
||||
FirDeclarationOrigin.Library,
|
||||
returnTypeRef,
|
||||
visibility,
|
||||
propertySymbol,
|
||||
propertyModality,
|
||||
effectiveVisibility
|
||||
)
|
||||
}.apply {
|
||||
(annotations as MutableList<FirAnnotationCall>) +=
|
||||
c.annotationDeserializer.loadPropertyGetterAnnotations(
|
||||
c.containerSource, proto, local.nameResolver, local.typeTable, getterFlags
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadPropertySetter(
|
||||
proto: ProtoBuf.Property,
|
||||
classProto: ProtoBuf.Class? = null,
|
||||
classSymbol: FirClassSymbol<*>?,
|
||||
defaultAccessorFlags: Int,
|
||||
returnTypeRef: FirTypeRef,
|
||||
propertySymbol: FirPropertySymbol,
|
||||
local: FirDeserializationContext,
|
||||
propertyModality: Modality,
|
||||
): FirPropertyAccessor {
|
||||
val setterFlags = if (proto.hasSetterFlags()) proto.setterFlags else defaultAccessorFlags
|
||||
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags))
|
||||
val accessorModality = ProtoEnumFlags.modality(Flags.MODALITY.get(setterFlags))
|
||||
val effectiveVisibility = visibility.toEffectiveVisibility(classSymbol)
|
||||
return if (Flags.IS_NOT_DEFAULT.get(setterFlags)) {
|
||||
buildPropertyAccessor {
|
||||
moduleData = c.moduleData
|
||||
origin = FirDeclarationOrigin.Library
|
||||
this.returnTypeRef = FirImplicitUnitTypeRef(source)
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
isGetter = false
|
||||
status = FirResolvedDeclarationStatusImpl(visibility, accessorModality, effectiveVisibility).apply {
|
||||
isInline = Flags.IS_INLINE_ACCESSOR.get(setterFlags)
|
||||
isExternal = Flags.IS_EXTERNAL_ACCESSOR.get(setterFlags)
|
||||
}
|
||||
this.symbol = FirPropertyAccessorSymbol()
|
||||
dispatchReceiverType = c.dispatchReceiver
|
||||
valueParameters += local.memberDeserializer.valueParameters(
|
||||
listOf(proto.setterValueParameter),
|
||||
proto,
|
||||
AbstractAnnotationDeserializer.CallableKind.PROPERTY_SETTER,
|
||||
classProto
|
||||
)
|
||||
this.propertySymbol = propertySymbol
|
||||
}.apply {
|
||||
versionRequirementsTable = c.versionRequirementTable
|
||||
}
|
||||
} else {
|
||||
FirDefaultPropertySetter(
|
||||
null,
|
||||
c.moduleData,
|
||||
FirDeclarationOrigin.Library,
|
||||
returnTypeRef,
|
||||
visibility,
|
||||
propertySymbol,
|
||||
propertyModality,
|
||||
effectiveVisibility
|
||||
)
|
||||
}.apply {
|
||||
(annotations as MutableList<FirAnnotationCall>) +=
|
||||
c.annotationDeserializer.loadPropertySetterAnnotations(
|
||||
c.containerSource, proto, local.nameResolver, local.typeTable, setterFlags
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun loadProperty(
|
||||
proto: ProtoBuf.Property,
|
||||
classProto: ProtoBuf.Class? = null,
|
||||
@@ -251,82 +357,6 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
|
||||
val propertyModality = ProtoEnumFlags.modality(Flags.MODALITY.get(flags))
|
||||
|
||||
val getter = if (hasGetter) {
|
||||
val getterFlags = if (proto.hasGetterFlags()) proto.getterFlags else defaultAccessorFlags
|
||||
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags))
|
||||
val accessorModality = ProtoEnumFlags.modality(Flags.MODALITY.get(getterFlags))
|
||||
val effectiveVisibility = visibility.toEffectiveVisibility(classSymbol)
|
||||
if (Flags.IS_NOT_DEFAULT.get(getterFlags)) {
|
||||
buildPropertyAccessor {
|
||||
moduleData = c.moduleData
|
||||
origin = FirDeclarationOrigin.Library
|
||||
this.returnTypeRef = returnTypeRef
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
isGetter = true
|
||||
status = FirResolvedDeclarationStatusImpl(visibility, accessorModality, effectiveVisibility).apply {
|
||||
isInline = Flags.IS_INLINE_ACCESSOR.get(getterFlags)
|
||||
isExternal = Flags.IS_EXTERNAL_ACCESSOR.get(getterFlags)
|
||||
}
|
||||
this.symbol = FirPropertyAccessorSymbol()
|
||||
dispatchReceiverType = c.dispatchReceiver
|
||||
}.apply {
|
||||
versionRequirementsTable = c.versionRequirementTable
|
||||
}
|
||||
} else {
|
||||
FirDefaultPropertyGetter(
|
||||
null, c.moduleData, FirDeclarationOrigin.Library, returnTypeRef, visibility, propertyModality, effectiveVisibility
|
||||
)
|
||||
}.apply {
|
||||
(annotations as MutableList<FirAnnotationCall>) +=
|
||||
c.annotationDeserializer.loadPropertyGetterAnnotations(
|
||||
c.containerSource, proto, local.nameResolver, local.typeTable, getterFlags
|
||||
)
|
||||
}
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
val setter = if (Flags.HAS_SETTER.get(flags)) {
|
||||
val setterFlags = if (proto.hasSetterFlags()) proto.setterFlags else defaultAccessorFlags
|
||||
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags))
|
||||
val accessorModality = ProtoEnumFlags.modality(Flags.MODALITY.get(setterFlags))
|
||||
val effectiveVisibility = visibility.toEffectiveVisibility(classSymbol)
|
||||
if (Flags.IS_NOT_DEFAULT.get(setterFlags)) {
|
||||
buildPropertyAccessor {
|
||||
moduleData = c.moduleData
|
||||
origin = FirDeclarationOrigin.Library
|
||||
this.returnTypeRef = FirImplicitUnitTypeRef(source)
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
isGetter = false
|
||||
status = FirResolvedDeclarationStatusImpl(visibility, accessorModality, effectiveVisibility).apply {
|
||||
isInline = Flags.IS_INLINE_ACCESSOR.get(setterFlags)
|
||||
isExternal = Flags.IS_EXTERNAL_ACCESSOR.get(setterFlags)
|
||||
}
|
||||
this.symbol = FirPropertyAccessorSymbol()
|
||||
dispatchReceiverType = c.dispatchReceiver
|
||||
valueParameters += local.memberDeserializer.valueParameters(
|
||||
listOf(proto.setterValueParameter),
|
||||
proto,
|
||||
AbstractAnnotationDeserializer.CallableKind.PROPERTY_SETTER,
|
||||
classProto
|
||||
)
|
||||
}.apply {
|
||||
versionRequirementsTable = c.versionRequirementTable
|
||||
}
|
||||
} else {
|
||||
FirDefaultPropertySetter(
|
||||
null, c.moduleData, FirDeclarationOrigin.Library, returnTypeRef, visibility, propertyModality, effectiveVisibility
|
||||
)
|
||||
}.apply {
|
||||
(annotations as MutableList<FirAnnotationCall>) +=
|
||||
c.annotationDeserializer.loadPropertySetterAnnotations(
|
||||
c.containerSource, proto, local.nameResolver, local.typeTable, setterFlags
|
||||
)
|
||||
}
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
val isVar = Flags.IS_VAR.get(flags)
|
||||
return buildProperty {
|
||||
moduleData = c.moduleData
|
||||
@@ -362,8 +392,29 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
|
||||
c.annotationDeserializer.loadPropertyDelegatedFieldAnnotations(
|
||||
c.containerSource, proto, local.nameResolver, local.typeTable
|
||||
)
|
||||
this.getter = getter
|
||||
this.setter = setter
|
||||
if (hasGetter) {
|
||||
this.getter = loadPropertyGetter(
|
||||
proto,
|
||||
classSymbol,
|
||||
defaultAccessorFlags,
|
||||
returnTypeRef,
|
||||
symbol,
|
||||
local,
|
||||
propertyModality
|
||||
)
|
||||
}
|
||||
if (Flags.HAS_SETTER.get(flags)) {
|
||||
this.setter = loadPropertySetter(
|
||||
proto,
|
||||
classProto,
|
||||
classSymbol,
|
||||
defaultAccessorFlags,
|
||||
returnTypeRef,
|
||||
symbol,
|
||||
local,
|
||||
propertyModality
|
||||
)
|
||||
}
|
||||
this.containerSource = c.containerSource
|
||||
this.initializer = c.constDeserializer.loadConstant(proto, symbol.callableId, c.nameResolver)
|
||||
deprecation = annotations.getDeprecationInfosFromAnnotations(c.session.languageVersionSettings.apiVersion, false)
|
||||
|
||||
+6
-3
@@ -1130,14 +1130,14 @@ class DeclarationsConverter(
|
||||
isExternal = modifiers.hasExternal()
|
||||
}
|
||||
|
||||
val convertedAccessors = accessors.map { convertGetterOrSetter(it, returnType, propertyVisibility, modifiers) }
|
||||
val convertedAccessors = accessors.map { convertGetterOrSetter(it, returnType, propertyVisibility, symbol, modifiers) }
|
||||
this.getter = convertedAccessors.find { it.isGetter }
|
||||
?: FirDefaultPropertyGetter(
|
||||
property.toFirSourceElement(FirFakeSourceElementKind.DefaultAccessor),
|
||||
moduleData,
|
||||
FirDeclarationOrigin.Source,
|
||||
returnType,
|
||||
propertyVisibility
|
||||
propertyVisibility, symbol,
|
||||
).also {
|
||||
it.status = defaultAccessorStatus()
|
||||
it.initContainingClassAttr()
|
||||
@@ -1150,7 +1150,7 @@ class DeclarationsConverter(
|
||||
moduleData,
|
||||
FirDeclarationOrigin.Source,
|
||||
returnType,
|
||||
propertyVisibility
|
||||
propertyVisibility, symbol,
|
||||
).also {
|
||||
it.status = defaultAccessorStatus()
|
||||
it.initContainingClassAttr()
|
||||
@@ -1252,6 +1252,7 @@ class DeclarationsConverter(
|
||||
getterOrSetter: LighterASTNode,
|
||||
propertyTypeRef: FirTypeRef,
|
||||
propertyVisibility: Visibility,
|
||||
propertySymbol: FirPropertySymbol,
|
||||
propertyModifiers: Modifier
|
||||
): FirPropertyAccessor {
|
||||
var modifiers = Modifier()
|
||||
@@ -1299,6 +1300,7 @@ class DeclarationsConverter(
|
||||
FirDeclarationOrigin.Source,
|
||||
propertyTypeRefToUse,
|
||||
accessorVisibility,
|
||||
propertySymbol,
|
||||
isGetter
|
||||
)
|
||||
.also { accessor ->
|
||||
@@ -1331,6 +1333,7 @@ class DeclarationsConverter(
|
||||
this.contractDescription = it
|
||||
}
|
||||
context.firFunctionTargets.removeLast()
|
||||
this.propertySymbol = propertySymbol
|
||||
}.also {
|
||||
target.bind(it)
|
||||
it.initContainingClassAttr()
|
||||
|
||||
+4
-2
@@ -81,14 +81,16 @@ class ValueParameter(
|
||||
moduleData,
|
||||
FirDeclarationOrigin.Source,
|
||||
type.copyWithNewSourceKind(FirFakeSourceElementKind.DefaultAccessor),
|
||||
modifiers.getVisibility()
|
||||
modifiers.getVisibility(),
|
||||
symbol,
|
||||
)
|
||||
setter = if (this.isVar) FirDefaultPropertySetter(
|
||||
defaultAccessorSource,
|
||||
moduleData,
|
||||
FirDeclarationOrigin.Source,
|
||||
type.copyWithNewSourceKind(FirFakeSourceElementKind.DefaultAccessor),
|
||||
modifiers.getVisibility()
|
||||
modifiers.getVisibility(),
|
||||
symbol,
|
||||
) else null
|
||||
}.apply {
|
||||
if (firValueParameter.isVararg) {
|
||||
|
||||
@@ -368,6 +368,7 @@ open class RawFirBuilder(
|
||||
private fun KtPropertyAccessor?.toFirPropertyAccessor(
|
||||
property: KtProperty,
|
||||
propertyTypeRef: FirTypeRef,
|
||||
propertySymbol: FirPropertySymbol,
|
||||
isGetter: Boolean,
|
||||
): FirPropertyAccessor? {
|
||||
val accessorVisibility =
|
||||
@@ -418,6 +419,7 @@ open class RawFirBuilder(
|
||||
contractDescription?.let {
|
||||
this.contractDescription = it
|
||||
}
|
||||
this.propertySymbol = propertySymbol
|
||||
}.also {
|
||||
it.initContainingClassAttr()
|
||||
bindFunctionTarget(accessorTarget, it)
|
||||
@@ -435,6 +437,7 @@ open class RawFirBuilder(
|
||||
FirDeclarationOrigin.Source,
|
||||
propertyTypeRefToUse,
|
||||
accessorVisibility,
|
||||
propertySymbol,
|
||||
isGetter
|
||||
)
|
||||
.also {
|
||||
@@ -515,14 +518,16 @@ open class RawFirBuilder(
|
||||
baseModuleData,
|
||||
FirDeclarationOrigin.Source,
|
||||
type.copyWithNewSourceKind(FirFakeSourceElementKind.DefaultAccessor),
|
||||
visibility
|
||||
visibility,
|
||||
symbol,
|
||||
)
|
||||
setter = if (isMutable) FirDefaultPropertySetter(
|
||||
defaultAccessorSource,
|
||||
baseModuleData,
|
||||
FirDeclarationOrigin.Source,
|
||||
type.copyWithNewSourceKind(FirFakeSourceElementKind.DefaultAccessor),
|
||||
visibility
|
||||
visibility,
|
||||
symbol,
|
||||
) else null
|
||||
extractAnnotationsTo(this)
|
||||
|
||||
@@ -1450,8 +1455,18 @@ open class RawFirBuilder(
|
||||
dispatchReceiverType = currentDispatchReceiverType()
|
||||
extractTypeParametersTo(this, symbol)
|
||||
withCapturedTypeParameters(true, this.typeParameters) {
|
||||
getter = this@toFirProperty.getter.toFirPropertyAccessor(this@toFirProperty, propertyType, isGetter = true)
|
||||
setter = this@toFirProperty.setter.toFirPropertyAccessor(this@toFirProperty, propertyType, isGetter = false)
|
||||
getter = this@toFirProperty.getter.toFirPropertyAccessor(
|
||||
this@toFirProperty,
|
||||
propertyType,
|
||||
propertySymbol = symbol,
|
||||
isGetter = true
|
||||
)
|
||||
setter = this@toFirProperty.setter.toFirPropertyAccessor(
|
||||
this@toFirProperty,
|
||||
propertyType,
|
||||
propertySymbol = symbol,
|
||||
isGetter = false
|
||||
)
|
||||
|
||||
status = FirDeclarationStatusImpl(visibility, modality).apply {
|
||||
isExpect = hasExpectModifier() || this@RawFirBuilder.context.containerIsExpect
|
||||
|
||||
+2
@@ -442,6 +442,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate(
|
||||
if (annotations != null) {
|
||||
this.annotations.addAll(annotations)
|
||||
}
|
||||
propertySymbol = this@generateAccessorsByDelegate.symbol
|
||||
}.also {
|
||||
returnTarget.bind(it)
|
||||
}
|
||||
@@ -495,6 +496,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate(
|
||||
if (annotations != null) {
|
||||
this.annotations.addAll(annotations)
|
||||
}
|
||||
propertySymbol = this@generateAccessorsByDelegate.symbol
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
@@ -40,6 +41,7 @@ abstract class FirPropertyAccessor : FirFunction(), FirContractDescriptionOwner,
|
||||
abstract override val body: FirBlock?
|
||||
abstract override val contractDescription: FirContractDescription
|
||||
abstract override val symbol: FirPropertyAccessorSymbol
|
||||
abstract val propertySymbol: FirPropertySymbol?
|
||||
abstract val isGetter: Boolean
|
||||
abstract val isSetter: Boolean
|
||||
abstract override val annotations: List<FirAnnotationCall>
|
||||
|
||||
+4
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
@@ -54,6 +55,7 @@ class FirPropertyAccessorBuilder : FirFunctionBuilder, FirAnnotationContainerBui
|
||||
override var body: FirBlock? = null
|
||||
var contractDescription: FirContractDescription = FirEmptyContractDescription
|
||||
lateinit var symbol: FirPropertyAccessorSymbol
|
||||
var propertySymbol: FirPropertySymbol? = null
|
||||
var isGetter: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
||||
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||
val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
|
||||
@@ -75,6 +77,7 @@ class FirPropertyAccessorBuilder : FirFunctionBuilder, FirAnnotationContainerBui
|
||||
body,
|
||||
contractDescription,
|
||||
symbol,
|
||||
propertySymbol,
|
||||
isGetter,
|
||||
annotations,
|
||||
typeParameters,
|
||||
@@ -111,6 +114,7 @@ inline fun buildPropertyAccessorCopy(original: FirPropertyAccessor, init: FirPro
|
||||
copyBuilder.body = original.body
|
||||
copyBuilder.contractDescription = original.contractDescription
|
||||
copyBuilder.symbol = original.symbol
|
||||
copyBuilder.propertySymbol = original.propertySymbol
|
||||
copyBuilder.isGetter = original.isGetter
|
||||
copyBuilder.annotations.addAll(original.annotations)
|
||||
copyBuilder.typeParameters.addAll(original.typeParameters)
|
||||
|
||||
+2
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
@@ -48,6 +49,7 @@ open class FirPropertyAccessorImpl @FirImplementationDetail constructor(
|
||||
override var body: FirBlock?,
|
||||
override var contractDescription: FirContractDescription,
|
||||
override val symbol: FirPropertyAccessorSymbol,
|
||||
override val propertySymbol: FirPropertySymbol?,
|
||||
override val isGetter: Boolean,
|
||||
override val annotations: MutableList<FirAnnotationCall>,
|
||||
override val typeParameters: MutableList<FirTypeParameter>,
|
||||
|
||||
+10
-2
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.buildDefaultSetterValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef
|
||||
@@ -28,6 +29,7 @@ abstract class FirDefaultPropertyAccessor(
|
||||
origin: FirDeclarationOrigin,
|
||||
propertyTypeRef: FirTypeRef,
|
||||
valueParameters: MutableList<FirValueParameter>,
|
||||
propertySymbol: FirPropertySymbol,
|
||||
isGetter: Boolean,
|
||||
visibility: Visibility,
|
||||
modality: Modality = Modality.FINAL,
|
||||
@@ -51,6 +53,7 @@ abstract class FirDefaultPropertyAccessor(
|
||||
body = null,
|
||||
contractDescription = FirEmptyContractDescription,
|
||||
symbol,
|
||||
propertySymbol,
|
||||
isGetter,
|
||||
annotations = mutableListOf(),
|
||||
typeParameters = mutableListOf(),
|
||||
@@ -70,12 +73,13 @@ abstract class FirDefaultPropertyAccessor(
|
||||
origin: FirDeclarationOrigin,
|
||||
propertyTypeRef: FirTypeRef,
|
||||
visibility: Visibility,
|
||||
propertySymbol: FirPropertySymbol,
|
||||
isGetter: Boolean
|
||||
): FirDefaultPropertyAccessor {
|
||||
return if (isGetter) {
|
||||
FirDefaultPropertyGetter(source, moduleData, origin, propertyTypeRef, visibility, Modality.FINAL)
|
||||
FirDefaultPropertyGetter(source, moduleData, origin, propertyTypeRef, visibility, propertySymbol, Modality.FINAL)
|
||||
} else {
|
||||
FirDefaultPropertySetter(source, moduleData, origin, propertyTypeRef, visibility, Modality.FINAL)
|
||||
FirDefaultPropertySetter(source, moduleData, origin, propertyTypeRef, visibility, propertySymbol, Modality.FINAL)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -87,6 +91,7 @@ class FirDefaultPropertyGetter(
|
||||
origin: FirDeclarationOrigin,
|
||||
propertyTypeRef: FirTypeRef,
|
||||
visibility: Visibility,
|
||||
propertySymbol: FirPropertySymbol,
|
||||
modality: Modality = Modality.FINAL,
|
||||
effectiveVisibility: EffectiveVisibility? = null,
|
||||
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
|
||||
@@ -96,6 +101,7 @@ class FirDefaultPropertyGetter(
|
||||
origin,
|
||||
propertyTypeRef,
|
||||
valueParameters = mutableListOf(),
|
||||
propertySymbol,
|
||||
isGetter = true,
|
||||
visibility = visibility,
|
||||
modality = modality,
|
||||
@@ -109,6 +115,7 @@ class FirDefaultPropertySetter(
|
||||
origin: FirDeclarationOrigin,
|
||||
propertyTypeRef: FirTypeRef,
|
||||
visibility: Visibility,
|
||||
propertySymbol: FirPropertySymbol,
|
||||
modality: Modality = Modality.FINAL,
|
||||
effectiveVisibility: EffectiveVisibility? = null,
|
||||
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
|
||||
@@ -126,6 +133,7 @@ class FirDefaultPropertySetter(
|
||||
this@builder.symbol = FirValueParameterSymbol(Name.special("<default-setter-parameter>"))
|
||||
}
|
||||
),
|
||||
propertySymbol,
|
||||
isGetter = false,
|
||||
visibility = visibility,
|
||||
modality = modality,
|
||||
|
||||
+4
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
@@ -74,6 +75,9 @@ class FirSyntheticPropertyAccessor(
|
||||
bind(this@FirSyntheticPropertyAccessor)
|
||||
}
|
||||
|
||||
// NB: unused
|
||||
override val propertySymbol: FirPropertySymbol? = null
|
||||
|
||||
override val controlFlowGraphReference: FirControlFlowGraphReference? = null
|
||||
|
||||
override val contractDescription: FirContractDescription = FirEmptyContractDescription
|
||||
|
||||
+3
@@ -324,6 +324,9 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
|
||||
propertyAccessor.configure {
|
||||
+symbol("FirPropertyAccessorSymbol")
|
||||
+field("propertySymbol", firPropertySymbolType, nullable = true).apply {
|
||||
withBindThis = false
|
||||
}
|
||||
+booleanField("isGetter")
|
||||
+booleanField("isSetter")
|
||||
+annotations
|
||||
|
||||
@@ -94,3 +94,6 @@ val functionCallOrigin = type("fir.expressions", "FirFunctionCallOrigin")
|
||||
val resolvedDeclarationStatusImplType = type("fir.declarations.impl", "FirResolvedDeclarationStatusImpl")
|
||||
|
||||
val deprecationsPerUseSiteType = type("fir.declarations", "DeprecationsPerUseSite")
|
||||
|
||||
val firPropertySymbolType = type("fir.symbols.impl", "FirPropertySymbol")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user