FIR: Set resolve phase to BODY_RESOLVE for the generated declarations

In the future it should be checked that plugins can return only
`BODY_RESOLVE`d declarations
This commit is contained in:
Roman Golyshev
2022-02-16 12:14:44 +03:00
parent 765af5f18a
commit 62f0487efa
5 changed files with 14 additions and 4 deletions
@@ -11,12 +11,15 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirPluginKey
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension
import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar
import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate
import org.jetbrains.kotlin.fir.extensions.predicate.has
import org.jetbrains.kotlin.fir.extensions.predicate.metaHas
import org.jetbrains.kotlin.fir.extensions.predicate.or
import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
import org.jetbrains.kotlin.fir.moduleData
import org.jetbrains.kotlin.fir.plugin.fqn
@@ -61,6 +64,7 @@ class AdditionalMembersGenerator(session: FirSession) : FirDeclarationGeneration
val parentClassId = classId.parentClassId ?: return null
if (matchedClasses.none { it.classId == parentClassId }) return null
return buildRegularClass {
resolvePhase = FirResolvePhase.BODY_RESOLVE
moduleData = session.moduleData
origin = Key.origin
classKind = ClassKind.CLASS
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirPluginKey
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
@@ -49,6 +50,7 @@ class CompanionGenerator(session: FirSession) : FirDeclarationGenerationExtensio
val owner = matchedClasses.firstOrNull { it.classId == classId.outerClassId } ?: return null
if (owner.companionObjectSymbol != null) return null
val regularClass = buildRegularClass {
resolvePhase = FirResolvePhase.BODY_RESOLVE
moduleData = session.moduleData
origin = Key.origin
classKind = ClassKind.OBJECT
@@ -71,6 +73,7 @@ class CompanionGenerator(session: FirSession) : FirDeclarationGenerationExtensio
if (owner == null || owner.origin != Key.origin) return emptyList()
if (callableId.callableName != FOO_NAME) return emptyList()
val function = buildSimpleFunction {
resolvePhase = FirResolvePhase.BODY_RESOLVE
moduleData = session.moduleData
origin = Key.origin
status = FirResolvedDeclarationStatusImpl(
@@ -106,6 +106,7 @@ class ExternalClassGenerator(session: FirSession) : FirDeclarationGenerationExte
private fun buildClass(classId: ClassId): FirRegularClass {
return buildRegularClass {
resolvePhase = FirResolvePhase.BODY_RESOLVE
moduleData = session.moduleData
origin = Key.origin
classKind = ClassKind.CLASS
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirPluginKey
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
@@ -44,6 +45,7 @@ class TopLevelDeclarationsGenerator(session: FirSession) : FirDeclarationGenerat
if (owner != null) return emptyList()
val matchedClassSymbol = findMatchedClassForFunction(callableId) ?: return emptyList()
val function = buildSimpleFunction {
resolvePhase = FirResolvePhase.BODY_RESOLVE
moduleData = session.moduleData
origin = Key.origin
status = FirResolvedDeclarationStatusImpl(
@@ -53,6 +55,7 @@ class TopLevelDeclarationsGenerator(session: FirSession) : FirDeclarationGenerat
)
returnTypeRef = session.builtinTypes.stringType
valueParameters += buildValueParameter {
resolvePhase = FirResolvePhase.BODY_RESOLVE
moduleData = session.moduleData
origin = Key.origin
returnTypeRef = buildResolvedTypeRef {
@@ -9,10 +9,7 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.containingClassForStaticMemberAttr
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirPluginKey
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.buildPrimaryConstructor
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
@@ -39,6 +36,7 @@ fun FirDeclarationGenerationExtension.buildMaterializeFunction(
key: FirPluginKey
): FirSimpleFunction {
return buildSimpleFunction {
resolvePhase = FirResolvePhase.BODY_RESOLVE
moduleData = session.moduleData
origin = key.origin
status = FirResolvedDeclarationStatusImpl(
@@ -66,6 +64,7 @@ fun FirDeclarationGenerationExtension.buildMaterializeFunction(
fun FirDeclarationGenerationExtension.buildConstructor(classId: ClassId, isInner: Boolean, key: FirPluginKey): FirConstructor {
val lookupTag = ConeClassLikeLookupTagImpl(classId)
return buildPrimaryConstructor {
resolvePhase = FirResolvePhase.BODY_RESOLVE
moduleData = session.moduleData
origin = key.origin
returnTypeRef = buildResolvedTypeRef {