[FIR] FirSyntheticProperty: drop resolveState

Such properties should be stateless and just wrap over accessories.
Logic inside contract transformer is unreachable because we do not
allow lazy resolution for synthetic properties.

^KT-61990
This commit is contained in:
Dmitrii Gridin
2023-10-12 20:42:03 +02:00
committed by Space Team
parent bb40ce0bfc
commit b8000d611a
12 changed files with 103 additions and 124 deletions
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.declarations
import java.util.concurrent.CountDownLatch
import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
/**
@@ -50,10 +51,10 @@ fun FirResolvePhase.asResolveState(): FirResolvedToPhaseState = FirResolvedToPha
@OptIn(ResolveStateAccess::class)
val FirElementWithResolveState.resolvePhase: FirResolvePhase
get() = if (this is FirSyntheticPropertyAccessor) {
delegate.resolvePhase
} else {
resolveState.resolvePhase
get() = when (this) {
is FirSyntheticProperty -> setter?.resolvePhase?.let { minOf(it, getter.resolvePhase) } ?: getter.resolvePhase
is FirSyntheticPropertyAccessor -> delegate.resolvePhase
else -> resolveState.resolvePhase
}
/**
@@ -27,7 +27,6 @@ class FirSyntheticProperty @FirImplementationDetail internal constructor(
override val isVar: Boolean,
override val symbol: FirSyntheticPropertySymbol,
override val status: FirDeclarationStatus,
resolvePhase: FirResolvePhase,
override val getter: FirSyntheticPropertyAccessor,
override val setter: FirSyntheticPropertyAccessor? = null,
override val deprecationsProvider: DeprecationsProvider = UnresolvedDeprecationProvider
@@ -36,11 +35,6 @@ class FirSyntheticProperty @FirImplementationDetail internal constructor(
symbol.bind(this)
}
init {
@OptIn(ResolveStateAccess::class)
this.resolveState = resolvePhase.asResolveState()
}
override val backingField: FirBackingField? get() = null
override val returnTypeRef: FirTypeRef
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.declarations.DeprecationsProvider
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.resolvePhase
import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol
import org.jetbrains.kotlin.name.Name
@@ -29,7 +28,6 @@ class FirSyntheticPropertyBuilder {
fun build(): FirSyntheticProperty = FirSyntheticProperty(
moduleData, name, isVar = delegateSetter != null, symbol = symbol,
status = status ?: delegateGetter.status,
resolvePhase = delegateGetter.resolvePhase,
getter = FirSyntheticPropertyAccessor(delegateGetter, isGetter = true, symbol),
setter = delegateSetter?.let { FirSyntheticPropertyAccessor(it, isGetter = false, symbol) },
deprecationsProvider = deprecationsProvider
@@ -7,6 +7,8 @@ package org.jetbrains.kotlin.fir.renderer
import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.declarations.ResolveStateAccess
import org.jetbrains.kotlin.fir.declarations.resolvePhase
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
@@ -16,10 +18,10 @@ class FirResolvePhaseRenderer {
fun render(element: FirElementWithResolveState) {
@OptIn(ResolveStateAccess::class)
val text = if (element is FirSyntheticPropertyAccessor) {
"[<synthetic> ${element.delegate.resolveState}] "
} else {
"[${element.resolveState}] "
val text = when (element) {
is FirSyntheticProperty -> "[<synthetic> ${element.resolvePhase}] "
is FirSyntheticPropertyAccessor -> "[<synthetic> ${element.delegate.resolveState}] "
else -> "[${element.resolveState}] "
}
printer.print(text)
@@ -28,4 +30,4 @@ class FirResolvePhaseRenderer {
fun render(element: FirAnnotationCall) {
printer.print("[${element.annotationResolvePhase}]")
}
}
}