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