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