[FIR] Get rid of all conditional reads of FirDeclaration.resolvePhase
This commit is contained in:
@@ -96,7 +96,7 @@ class FirJavaElementFinder(
|
|||||||
)
|
)
|
||||||
|
|
||||||
val superTypeRefs = when {
|
val superTypeRefs = when {
|
||||||
firClass.resolvePhase > FirResolvePhase.SUPER_TYPES -> firClass.superTypeRefs
|
firClass.superTypeRefs.all { it is FirResolvedTypeRef } -> firClass.superTypeRefs
|
||||||
else -> firClass.resolveSupertypesInTheAir(session)
|
else -> firClass.resolveSupertypesInTheAir(session)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.contracts.description.ConeConditionalEffectDecla
|
|||||||
import org.jetbrains.kotlin.fir.contracts.description.ConeConstantReference
|
import org.jetbrains.kotlin.fir.contracts.description.ConeConstantReference
|
||||||
import org.jetbrains.kotlin.fir.contracts.description.ConeReturnsEffectDeclaration
|
import org.jetbrains.kotlin.fir.contracts.description.ConeReturnsEffectDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||||
@@ -214,6 +215,7 @@ abstract class FirDataFlowAnalyzer<FLOW : Flow>(
|
|||||||
// ----------------------------------- Named function -----------------------------------
|
// ----------------------------------- Named function -----------------------------------
|
||||||
|
|
||||||
fun enterFunction(function: FirFunction) {
|
fun enterFunction(function: FirFunction) {
|
||||||
|
if (function is FirDefaultPropertyAccessor) return
|
||||||
if (function is FirAnonymousFunction) {
|
if (function is FirAnonymousFunction) {
|
||||||
enterAnonymousFunction(function)
|
enterAnonymousFunction(function)
|
||||||
return
|
return
|
||||||
@@ -226,7 +228,8 @@ abstract class FirDataFlowAnalyzer<FLOW : Flow>(
|
|||||||
functionEnterNode.mergeIncomingFlow(shouldForkFlow = previousNode != null)
|
functionEnterNode.mergeIncomingFlow(shouldForkFlow = previousNode != null)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun exitFunction(function: FirFunction): FirControlFlowGraphReference {
|
fun exitFunction(function: FirFunction): FirControlFlowGraphReference? {
|
||||||
|
if (function is FirDefaultPropertyAccessor) return null
|
||||||
if (function is FirAnonymousFunction) {
|
if (function is FirAnonymousFunction) {
|
||||||
return exitAnonymousFunction(function)
|
return exitAnonymousFunction(function)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -407,8 +407,7 @@ abstract class AbstractFirStatusResolveTransformer(
|
|||||||
forceResolveStatusesOfSupertypes(regularClass)
|
forceResolveStatusesOfSupertypes(regularClass)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (regularClass.resolvePhase > FirResolvePhase.STATUS) return
|
if (regularClass.origin != FirDeclarationOrigin.Source) return
|
||||||
val firProvider = session.firProvider
|
|
||||||
val statusComputationStatus = statusComputationSession[regularClass]
|
val statusComputationStatus = statusComputationSession[regularClass]
|
||||||
if (!statusComputationStatus.requiresComputation) return
|
if (!statusComputationStatus.requiresComputation) return
|
||||||
|
|
||||||
@@ -425,6 +424,7 @@ abstract class AbstractFirStatusResolveTransformer(
|
|||||||
}
|
}
|
||||||
reverse()
|
reverse()
|
||||||
} else buildList<FirDeclaration> {
|
} else buildList<FirDeclaration> {
|
||||||
|
val firProvider = regularClass.moduleData.session.firProvider
|
||||||
val outerClasses = generateSequence(symbol.classId) { classId ->
|
val outerClasses = generateSequence(symbol.classId) { classId ->
|
||||||
classId.outerClassId
|
classId.outerClassId
|
||||||
}.mapTo(mutableListOf()) { firProvider.getFirClassifierByFqName(it) }
|
}.mapTo(mutableListOf()) { firProvider.getFirClassifierByFqName(it) }
|
||||||
|
|||||||
+2
-2
@@ -436,14 +436,14 @@ class SupertypeComputationSession {
|
|||||||
|
|
||||||
val supertypesSupplier: SupertypeSupplier = object : SupertypeSupplier() {
|
val supertypesSupplier: SupertypeSupplier = object : SupertypeSupplier() {
|
||||||
override fun forClass(firClass: FirClass, useSiteSession: FirSession): List<ConeClassLikeType> {
|
override fun forClass(firClass: FirClass, useSiteSession: FirSession): List<ConeClassLikeType> {
|
||||||
if (firClass.resolvePhase > FirResolvePhase.SUPER_TYPES) return firClass.superConeTypes
|
if (firClass.superTypeRefs.all { it is FirResolvedTypeRef }) return firClass.superConeTypes
|
||||||
return (getSupertypesComputationStatus(firClass) as? SupertypeComputationStatus.Computed)?.supertypeRefs?.mapNotNull {
|
return (getSupertypesComputationStatus(firClass) as? SupertypeComputationStatus.Computed)?.supertypeRefs?.mapNotNull {
|
||||||
it.coneTypeSafe<ConeClassLikeType>()
|
it.coneTypeSafe<ConeClassLikeType>()
|
||||||
}.orEmpty()
|
}.orEmpty()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun expansionForTypeAlias(typeAlias: FirTypeAlias, useSiteSession: FirSession): ConeClassLikeType? {
|
override fun expansionForTypeAlias(typeAlias: FirTypeAlias, useSiteSession: FirSession): ConeClassLikeType? {
|
||||||
if (typeAlias.resolvePhase > FirResolvePhase.SUPER_TYPES) return typeAlias.expandedConeType
|
if (typeAlias.expandedTypeRef is FirResolvedTypeRef) return typeAlias.expandedConeType
|
||||||
return (getSupertypesComputationStatus(typeAlias) as? SupertypeComputationStatus.Computed)
|
return (getSupertypesComputationStatus(typeAlias) as? SupertypeComputationStatus.Computed)
|
||||||
?.supertypeRefs
|
?.supertypeRefs
|
||||||
?.getOrNull(0)?.coneTypeSafe()
|
?.getOrNull(0)?.coneTypeSafe()
|
||||||
|
|||||||
+19
-22
@@ -107,7 +107,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirEnumEntry {
|
override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirEnumEntry {
|
||||||
if (enumEntry.resolvePhase == transformerPhase) return enumEntry
|
if (implicitTypeOnly || enumEntry.initializerResolved) return enumEntry
|
||||||
transformer.replaceDeclarationResolvePhaseIfNeeded(enumEntry, transformerPhase)
|
transformer.replaceDeclarationResolvePhaseIfNeeded(enumEntry, transformerPhase)
|
||||||
return context.forEnumEntry {
|
return context.forEnumEntry {
|
||||||
(enumEntry.transformChildren(this, data) as FirEnumEntry)
|
(enumEntry.transformChildren(this, data) as FirEnumEntry)
|
||||||
@@ -126,11 +126,8 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
|
|||||||
}
|
}
|
||||||
|
|
||||||
val returnTypeRef = property.returnTypeRef
|
val returnTypeRef = property.returnTypeRef
|
||||||
|
if (property.initializerAndAccessorsAreResolved) return property
|
||||||
if (returnTypeRef !is FirImplicitTypeRef && implicitTypeOnly) return property
|
if (returnTypeRef !is FirImplicitTypeRef && implicitTypeOnly) return property
|
||||||
if (property.resolvePhase == transformerPhase) return property
|
|
||||||
if (property.resolvePhase == FirResolvePhase.BODY_RESOLVE || property.resolvePhase == transformerPhase) {
|
|
||||||
return property
|
|
||||||
}
|
|
||||||
|
|
||||||
property.transformReceiverTypeRef(transformer, ResolutionMode.ContextIndependent)
|
property.transformReceiverTypeRef(transformer, ResolutionMode.ContextIndependent)
|
||||||
dataFlowAnalyzer.enterProperty(property)
|
dataFlowAnalyzer.enterProperty(property)
|
||||||
@@ -158,6 +155,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
|
|||||||
dataFlowAnalyzer.exitProperty(property)?.let {
|
dataFlowAnalyzer.exitProperty(property)?.let {
|
||||||
property.replaceControlFlowGraphReference(FirControlFlowGraphReferenceImpl(it))
|
property.replaceControlFlowGraphReference(FirControlFlowGraphReferenceImpl(it))
|
||||||
}
|
}
|
||||||
|
property.replaceInitializerAndAccessorsAreResolved(true)
|
||||||
property
|
property
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -165,9 +163,8 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
|
|||||||
override fun transformField(field: FirField, data: ResolutionMode): FirField {
|
override fun transformField(field: FirField, data: ResolutionMode): FirField {
|
||||||
val returnTypeRef = field.returnTypeRef
|
val returnTypeRef = field.returnTypeRef
|
||||||
if (implicitTypeOnly) return field
|
if (implicitTypeOnly) return field
|
||||||
if (field.resolvePhase == FirResolvePhase.BODY_RESOLVE || field.resolvePhase == transformerPhase) {
|
if (field.initializerResolved) return field
|
||||||
return field
|
|
||||||
}
|
|
||||||
dataFlowAnalyzer.enterField(field)
|
dataFlowAnalyzer.enterField(field)
|
||||||
return withFullBodyResolve {
|
return withFullBodyResolve {
|
||||||
context.withField(field) {
|
context.withField(field) {
|
||||||
@@ -394,23 +391,17 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
|
|||||||
regularClass: FirRegularClass,
|
regularClass: FirRegularClass,
|
||||||
data: ResolutionMode
|
data: ResolutionMode
|
||||||
): FirRegularClass {
|
): FirRegularClass {
|
||||||
val notAnalyzed = regularClass.resolvePhase < transformerPhase
|
dataFlowAnalyzer.enterClass()
|
||||||
|
|
||||||
if (notAnalyzed) {
|
|
||||||
dataFlowAnalyzer.enterClass()
|
|
||||||
}
|
|
||||||
|
|
||||||
val result = context.withRegularClass(regularClass, components) {
|
val result = context.withRegularClass(regularClass, components) {
|
||||||
transformDeclarationContent(regularClass, data) as FirRegularClass
|
transformDeclarationContent(regularClass, data) as FirRegularClass
|
||||||
}
|
}
|
||||||
|
|
||||||
if (notAnalyzed) {
|
if (!implicitTypeOnly) {
|
||||||
if (!implicitTypeOnly) {
|
val controlFlowGraph = dataFlowAnalyzer.exitRegularClass(result)
|
||||||
val controlFlowGraph = dataFlowAnalyzer.exitRegularClass(result)
|
result.replaceControlFlowGraphReference(FirControlFlowGraphReferenceImpl(controlFlowGraph))
|
||||||
result.replaceControlFlowGraphReference(FirControlFlowGraphReferenceImpl(controlFlowGraph))
|
} else {
|
||||||
} else {
|
dataFlowAnalyzer.exitClass()
|
||||||
dataFlowAnalyzer.exitClass()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
@@ -476,7 +467,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
|
|||||||
simpleFunction: FirSimpleFunction,
|
simpleFunction: FirSimpleFunction,
|
||||||
data: ResolutionMode
|
data: ResolutionMode
|
||||||
): FirSimpleFunction {
|
): FirSimpleFunction {
|
||||||
if (simpleFunction.resolvePhase == FirResolvePhase.BODY_RESOLVE || simpleFunction.resolvePhase == transformerPhase) {
|
if (simpleFunction.bodyResolved) {
|
||||||
return simpleFunction
|
return simpleFunction
|
||||||
}
|
}
|
||||||
val returnTypeRef = simpleFunction.returnTypeRef
|
val returnTypeRef = simpleFunction.returnTypeRef
|
||||||
@@ -540,7 +531,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
|
|||||||
function: FirFunction,
|
function: FirFunction,
|
||||||
data: ResolutionMode
|
data: ResolutionMode
|
||||||
): FirStatement {
|
): FirStatement {
|
||||||
val functionIsNotAnalyzed = transformerPhase != function.resolvePhase
|
val functionIsNotAnalyzed = !function.bodyResolved
|
||||||
if (functionIsNotAnalyzed) {
|
if (functionIsNotAnalyzed) {
|
||||||
dataFlowAnalyzer.enterFunction(function)
|
dataFlowAnalyzer.enterFunction(function)
|
||||||
}
|
}
|
||||||
@@ -892,4 +883,10 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
|
|||||||
return valueParameter
|
return valueParameter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val FirVariable.initializerResolved: Boolean
|
||||||
|
get() = initializer?.typeRef is FirResolvedTypeRef
|
||||||
|
|
||||||
|
private val FirFunction.bodyResolved: Boolean
|
||||||
|
get() = body?.typeRef is FirResolvedTypeRef
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ abstract class FirProperty : FirVariable(), FirTypeParametersOwner, FirControlFl
|
|||||||
abstract val backingFieldSymbol: FirBackingFieldSymbol
|
abstract val backingFieldSymbol: FirBackingFieldSymbol
|
||||||
abstract val delegateFieldSymbol: FirDelegateFieldSymbol?
|
abstract val delegateFieldSymbol: FirDelegateFieldSymbol?
|
||||||
abstract val isLocal: Boolean
|
abstract val isLocal: Boolean
|
||||||
|
abstract val initializerAndAccessorsAreResolved: Boolean
|
||||||
abstract override val typeParameters: List<FirTypeParameter>
|
abstract override val typeParameters: List<FirTypeParameter>
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitProperty(this, data)
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitProperty(this, data)
|
||||||
@@ -67,6 +68,8 @@ abstract class FirProperty : FirVariable(), FirTypeParametersOwner, FirControlFl
|
|||||||
|
|
||||||
abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?)
|
abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?)
|
||||||
|
|
||||||
|
abstract fun replaceInitializerAndAccessorsAreResolved(newInitializerAndAccessorsAreResolved: Boolean)
|
||||||
|
|
||||||
abstract override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirProperty
|
abstract override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirProperty
|
||||||
|
|
||||||
abstract override fun <D> transformReceiverTypeRef(transformer: FirTransformer<D>, data: D): FirProperty
|
abstract override fun <D> transformReceiverTypeRef(transformer: FirTransformer<D>, data: D): FirProperty
|
||||||
|
|||||||
+3
@@ -59,6 +59,7 @@ class FirPropertyBuilder : FirDeclarationBuilder, FirTypeParametersOwnerBuilder,
|
|||||||
lateinit var symbol: FirPropertySymbol
|
lateinit var symbol: FirPropertySymbol
|
||||||
var delegateFieldSymbol: FirDelegateFieldSymbol? = null
|
var delegateFieldSymbol: FirDelegateFieldSymbol? = null
|
||||||
var isLocal: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
var isLocal: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
||||||
|
var initializerAndAccessorsAreResolved: Boolean = false
|
||||||
override val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
|
override val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
|
||||||
|
|
||||||
override fun build(): FirProperty {
|
override fun build(): FirProperty {
|
||||||
@@ -83,6 +84,7 @@ class FirPropertyBuilder : FirDeclarationBuilder, FirTypeParametersOwnerBuilder,
|
|||||||
symbol,
|
symbol,
|
||||||
delegateFieldSymbol,
|
delegateFieldSymbol,
|
||||||
isLocal,
|
isLocal,
|
||||||
|
initializerAndAccessorsAreResolved,
|
||||||
typeParameters,
|
typeParameters,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -123,6 +125,7 @@ inline fun buildPropertyCopy(original: FirProperty, init: FirPropertyBuilder.()
|
|||||||
copyBuilder.symbol = original.symbol
|
copyBuilder.symbol = original.symbol
|
||||||
copyBuilder.delegateFieldSymbol = original.delegateFieldSymbol
|
copyBuilder.delegateFieldSymbol = original.delegateFieldSymbol
|
||||||
copyBuilder.isLocal = original.isLocal
|
copyBuilder.isLocal = original.isLocal
|
||||||
|
copyBuilder.initializerAndAccessorsAreResolved = original.initializerAndAccessorsAreResolved
|
||||||
copyBuilder.typeParameters.addAll(original.typeParameters)
|
copyBuilder.typeParameters.addAll(original.typeParameters)
|
||||||
return copyBuilder.apply(init).build()
|
return copyBuilder.apply(init).build()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ internal class FirPropertyImpl(
|
|||||||
override val symbol: FirPropertySymbol,
|
override val symbol: FirPropertySymbol,
|
||||||
override val delegateFieldSymbol: FirDelegateFieldSymbol?,
|
override val delegateFieldSymbol: FirDelegateFieldSymbol?,
|
||||||
override val isLocal: Boolean,
|
override val isLocal: Boolean,
|
||||||
|
override var initializerAndAccessorsAreResolved: Boolean,
|
||||||
override val typeParameters: MutableList<FirTypeParameter>,
|
override val typeParameters: MutableList<FirTypeParameter>,
|
||||||
) : FirProperty() {
|
) : FirProperty() {
|
||||||
override val isVal: Boolean get() = !isVar
|
override val isVal: Boolean get() = !isVar
|
||||||
@@ -160,4 +161,8 @@ internal class FirPropertyImpl(
|
|||||||
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
|
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
|
||||||
controlFlowGraphReference = newControlFlowGraphReference
|
controlFlowGraphReference = newControlFlowGraphReference
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun replaceInitializerAndAccessorsAreResolved(newInitializerAndAccessorsAreResolved: Boolean) {
|
||||||
|
initializerAndAccessorsAreResolved = newInitializerAndAccessorsAreResolved
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -17,11 +17,8 @@ import org.jetbrains.kotlin.fir.declarations.builder.buildDefaultSetterValuePara
|
|||||||
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.FirValueParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
|
||||||
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
|
||||||
import org.jetbrains.kotlin.name.CallableId
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@OptIn(FirImplementationDetail::class)
|
@OptIn(FirImplementationDetail::class)
|
||||||
|
|||||||
+7
@@ -81,6 +81,9 @@ class FirSyntheticProperty(
|
|||||||
// ???
|
// ???
|
||||||
override val backingFieldSymbol: FirBackingFieldSymbol = FirBackingFieldSymbol(symbol.callableId)
|
override val backingFieldSymbol: FirBackingFieldSymbol = FirBackingFieldSymbol(symbol.callableId)
|
||||||
|
|
||||||
|
override val initializerAndAccessorsAreResolved: Boolean
|
||||||
|
get() = true
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
returnTypeRef.accept(visitor, data)
|
returnTypeRef.accept(visitor, data)
|
||||||
status.accept(visitor, data)
|
status.accept(visitor, data)
|
||||||
@@ -149,4 +152,8 @@ class FirSyntheticProperty(
|
|||||||
override fun replaceInitializer(newInitializer: FirExpression?) {
|
override fun replaceInitializer(newInitializer: FirExpression?) {
|
||||||
throw AssertionError("Mutation of synthetic property isn't supported")
|
throw AssertionError("Mutation of synthetic property isn't supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun replaceInitializerAndAccessorsAreResolved(newInitializerAndAccessorsAreResolved: Boolean) {
|
||||||
|
throw AssertionError("Mutation of synthetic property isn't supported")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,10 @@ package org.jetbrains.kotlin.fir.declarations.utils
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.fir.FirRenderer
|
import org.jetbrains.kotlin.fir.FirRenderer
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
|
import kotlin.contracts.ExperimentalContracts
|
||||||
|
import kotlin.contracts.contract
|
||||||
|
|
||||||
inline val FirMemberDeclaration.modality: Modality? get() = status.modality
|
inline val FirMemberDeclaration.modality: Modality? get() = status.modality
|
||||||
inline val FirMemberDeclaration.isAbstract: Boolean get() = status.modality == Modality.ABSTRACT
|
inline val FirMemberDeclaration.isAbstract: Boolean get() = status.modality == Modality.ABSTRACT
|
||||||
|
|||||||
+1
@@ -202,6 +202,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
|||||||
parents += typeParametersOwnerBuilder
|
parents += typeParametersOwnerBuilder
|
||||||
defaultNull("getter", "setter", "containerSource", "delegateFieldSymbol")
|
defaultNull("getter", "setter", "containerSource", "delegateFieldSymbol")
|
||||||
default("resolvePhase", "FirResolvePhase.RAW_FIR")
|
default("resolvePhase", "FirResolvePhase.RAW_FIR")
|
||||||
|
defaultFalse("initializerAndAccessorsAreResolved")
|
||||||
withCopy()
|
withCopy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
@@ -311,6 +311,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
|||||||
+field("backingFieldSymbol", backingFieldSymbolType)
|
+field("backingFieldSymbol", backingFieldSymbolType)
|
||||||
+field("delegateFieldSymbol", delegateFieldSymbolType, nullable = true)
|
+field("delegateFieldSymbol", delegateFieldSymbolType, nullable = true)
|
||||||
+booleanField("isLocal")
|
+booleanField("isLocal")
|
||||||
|
+booleanField("initializerAndAccessorsAreResolved", withReplace = true)
|
||||||
+typeParameters
|
+typeParameters
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
@@ -59,6 +59,10 @@ internal object DeclarationCopyBuilder {
|
|||||||
getter = propertyWithBody.getter
|
getter = propertyWithBody.getter
|
||||||
setter = copySetter
|
setter = copySetter
|
||||||
|
|
||||||
|
if (propertyResolvePhase < FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) {
|
||||||
|
initializerAndAccessorsAreResolved = false
|
||||||
|
}
|
||||||
|
|
||||||
initDeclaration(this@withBodyFrom, propertyWithBody)
|
initDeclaration(this@withBodyFrom, propertyWithBody)
|
||||||
resolvePhase = propertyResolvePhase
|
resolvePhase = propertyResolvePhase
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user