[FIR] Build resolved declaration status for all non-raw declarations

This commit is contained in:
Dmitriy Novozhilov
2021-04-22 13:47:03 +03:00
committed by TeamCityServer
parent d54808e33f
commit 12331cb10c
4 changed files with 40 additions and 10 deletions
@@ -234,6 +234,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
val getterFlags = if (proto.hasGetterFlags()) proto.getterFlags else defaultAccessorFlags
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags))
val modality = ProtoEnumFlags.modality(Flags.MODALITY.get(getterFlags))
val effectiveVisibility = visibility.toEffectiveVisibility(classSymbol)
if (Flags.IS_NOT_DEFAULT.get(getterFlags)) {
buildPropertyAccessor {
declarationSiteSession = c.session
@@ -244,7 +245,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
status = FirResolvedDeclarationStatusImpl(
visibility,
modality,
visibility.toEffectiveVisibility(classSymbol)
effectiveVisibility
).apply {
isInline = Flags.IS_INLINE_ACCESSOR.get(getterFlags)
isExternal = Flags.IS_EXTERNAL_ACCESSOR.get(getterFlags)
@@ -255,7 +256,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
versionRequirementsTable = c.versionRequirementTable
}
} else {
FirDefaultPropertyGetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, visibility)
FirDefaultPropertyGetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, visibility, effectiveVisibility)
}.apply {
(annotations as MutableList<FirAnnotationCall>) +=
c.annotationDeserializer.loadPropertyGetterAnnotations(
@@ -270,6 +271,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
val setterFlags = if (proto.hasSetterFlags()) proto.setterFlags else defaultAccessorFlags
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags))
val modality = ProtoEnumFlags.modality(Flags.MODALITY.get(setterFlags))
val effectiveVisibility = visibility.toEffectiveVisibility(classSymbol)
if (Flags.IS_NOT_DEFAULT.get(setterFlags)) {
buildPropertyAccessor {
declarationSiteSession = c.session
@@ -280,7 +282,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
status = FirResolvedDeclarationStatusImpl(
visibility,
modality,
visibility.toEffectiveVisibility(classSymbol)
effectiveVisibility
).apply {
isInline = Flags.IS_INLINE_ACCESSOR.get(setterFlags)
isExternal = Flags.IS_EXTERNAL_ACCESSOR.get(setterFlags)
@@ -297,7 +299,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
versionRequirementsTable = c.versionRequirementTable
}
} else {
FirDefaultPropertySetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, visibility)
FirDefaultPropertySetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, visibility, effectiveVisibility)
}.apply {
(annotations as MutableList<FirAnnotationCall>) +=
c.annotationDeserializer.loadPropertySetterAnnotations(
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.resolve
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.EffectiveVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.containingClassAttr
@@ -14,6 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.builder.FirTypeParameterBuilder
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
import org.jetbrains.kotlin.fir.diagnostics.ConeIntermediateDiagnostic
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticFunctionSymbol
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
@@ -167,7 +169,12 @@ class FirSamResolverImpl(
source = firRegularClass.source
name = classId.shortClassName
origin = FirDeclarationOrigin.SamConstructor
status = FirDeclarationStatusImpl(firRegularClass.visibility, Modality.FINAL).apply {
val visibility = firRegularClass.visibility
status = FirResolvedDeclarationStatusImpl(
visibility,
Modality.FINAL,
EffectiveVisibility.Local
).apply {
isExpect = firRegularClass.isExpect
isActual = firRegularClass.isActual
isOverride = false
@@ -8,22 +8,24 @@ package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.builder.FirRegularClassBuilder
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
import org.jetbrains.kotlin.fir.expressions.builder.buildEmptyExpressionBlock
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.StandardClassIds
private val ENUM_VALUES = Name.identifier("values")
private val ENUM_VALUE_OF = Name.identifier("valueOf")
@@ -48,7 +50,7 @@ fun FirRegularClassBuilder.generateValuesFunction(
)
}
name = ENUM_VALUES
this.status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL).apply {
this.status = createStatus(this@generateValuesFunction.status).apply {
isStatic = true
isExpect = makeExpect
}
@@ -77,7 +79,8 @@ fun FirRegularClassBuilder.generateValueOfFunction(
)
}
name = ENUM_VALUE_OF
status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL).apply {
status = createStatus(this@generateValueOfFunction.status).apply {
isStatic = true
isExpect = makeExpect
}
@@ -99,3 +102,12 @@ fun FirRegularClassBuilder.generateValueOfFunction(
containingClassAttr = this@generateValueOfFunction.symbol.toLookupTag()
}
}
private fun createStatus(parentStatus: FirDeclarationStatus): FirDeclarationStatusImpl {
val parentEffectiveVisibility = (parentStatus as? FirResolvedDeclarationStatusImpl)?.effectiveVisibility
return if (parentEffectiveVisibility != null) {
FirResolvedDeclarationStatusImpl(Visibilities.Public, Modality.FINAL, parentEffectiveVisibility)
} else {
FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL)
}
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.descriptors.EffectiveVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirImplementationDetail
@@ -34,6 +35,7 @@ abstract class FirDefaultPropertyAccessor(
valueParameters: MutableList<FirValueParameter>,
isGetter: Boolean,
visibility: Visibility,
effectiveVisibility: EffectiveVisibility? = null,
symbol: FirPropertyAccessorSymbol
) : FirPropertyAccessorImpl(
source,
@@ -44,7 +46,10 @@ abstract class FirDefaultPropertyAccessor(
propertyTypeRef,
valueParameters,
body = null,
FirDeclarationStatusImpl(visibility, Modality.FINAL),
status = if (effectiveVisibility == null)
FirDeclarationStatusImpl(visibility, Modality.FINAL)
else
FirResolvedDeclarationStatusImpl(visibility, Modality.FINAL, effectiveVisibility),
containerSource = null,
dispatchReceiverType = null,
contractDescription = FirEmptyContractDescription,
@@ -85,6 +90,7 @@ class FirDefaultPropertyGetter(
origin: FirDeclarationOrigin,
propertyTypeRef: FirTypeRef,
visibility: Visibility,
effectiveVisibility: EffectiveVisibility? = null,
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
) : FirDefaultPropertyAccessor(
source,
@@ -94,6 +100,7 @@ class FirDefaultPropertyGetter(
valueParameters = mutableListOf(),
isGetter = true,
visibility = visibility,
effectiveVisibility = effectiveVisibility,
symbol = symbol
)
@@ -103,6 +110,7 @@ class FirDefaultPropertySetter(
origin: FirDeclarationOrigin,
propertyTypeRef: FirTypeRef,
visibility: Visibility,
effectiveVisibility: EffectiveVisibility? = null,
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
) : FirDefaultPropertyAccessor(
source,
@@ -120,5 +128,6 @@ class FirDefaultPropertySetter(
),
isGetter = false,
visibility,
effectiveVisibility,
symbol
)