FIR: introduce synthetic property symbol hierarchy

This commit is contained in:
Mikhail Glukhikh
2021-10-21 17:40:13 +03:00
committed by TeamCityServer
parent c673c4cc91
commit 79b98f9173
17 changed files with 92 additions and 39 deletions
@@ -11,8 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -25,7 +24,7 @@ class FirSyntheticProperty(
override val moduleData: FirModuleData,
override val name: Name,
override val isVar: Boolean,
override val symbol: FirAccessorSymbol,
override val symbol: FirSyntheticPropertySymbol,
override val status: FirDeclarationStatus,
override var resolvePhase: FirResolvePhase,
override val getter: FirSyntheticPropertyAccessor,
@@ -9,13 +9,13 @@ import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.declarations.DeprecationsPerUseSite
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol
import org.jetbrains.kotlin.name.Name
class FirSyntheticPropertyBuilder {
lateinit var moduleData: FirModuleData
lateinit var name: Name
lateinit var symbol: FirAccessorSymbol
lateinit var symbol: FirSyntheticPropertySymbol
lateinit var delegateGetter: FirSimpleFunction
lateinit var deprecation: DeprecationsPerUseSite
@@ -80,10 +80,19 @@ class FirConstructorSymbol(
get() = fir.delegatedConstructor?.isSuper ?: false
}
open class FirAccessorSymbol(
/**
* This is a property symbol which is always bound to FirSyntheticProperty.
*
* Synthetic property symbol is effectively a combination of
* a property (which never exists in sources) and
* a getter which exists in sources and is either from Java or overrides another getter from Java.
*/
abstract class FirSyntheticPropertySymbol(
propertyId: CallableId,
val getterId: CallableId
) : FirPropertySymbol(propertyId)
) : FirPropertySymbol(propertyId) {
abstract fun copy(): FirSyntheticPropertySymbol
}
// ------------------------ unnamed ------------------------