[FIR] Make SyntheticPropertySymbol derived from FirAccessorSymbol

This commit is contained in:
Mikhail Glukhikh
2020-02-05 14:38:21 +03:00
parent a7f9e3ab09
commit a569e29091
6 changed files with 12 additions and 15 deletions
@@ -106,12 +106,12 @@ class JavaClassEnhancementScope(
return symbol return symbol
} }
is FirSyntheticProperty -> { is FirSyntheticProperty -> {
original as FirAccessorSymbol val accessorSymbol = firElement.symbol
val enhancedFunctionSymbol = enhanceMethod( val enhancedFunctionSymbol = enhanceMethod(
firElement.getter.delegate, original.accessorId, original.accessorId.callableName firElement.getter.delegate, accessorSymbol.accessorId, accessorSymbol.accessorId.callableName
) )
val enhancedProperty = FirSyntheticProperty( val enhancedProperty = FirSyntheticProperty(
session, name, FirAccessorSymbol(original.callableId, original.accessorId), session, name, FirAccessorSymbol(accessorSymbol.callableId, accessorSymbol.accessorId),
enhancedFunctionSymbol.fir as FirSimpleFunction enhancedFunctionSymbol.fir as FirSimpleFunction
) )
return enhancedProperty.symbol return enhancedProperty.symbol
@@ -49,7 +49,7 @@ class JavaClassUseSiteMemberScope(
syntheticPropertyName: Name, syntheticPropertyName: Name,
overrideCandidates: MutableSet<FirCallableSymbol<*>>, overrideCandidates: MutableSet<FirCallableSymbol<*>>,
isGetter: Boolean isGetter: Boolean
): FirPropertySymbol? { ): FirAccessorSymbol? {
if (functionSymbol !is FirNamedFunctionSymbol) { if (functionSymbol !is FirNamedFunctionSymbol) {
return null return null
} }
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.isStatic import org.jetbrains.kotlin.fir.declarations.isStatic
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.symbols.AccessorSymbol
import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.SyntheticSymbol import org.jetbrains.kotlin.fir.symbols.SyntheticSymbol
@@ -25,7 +24,7 @@ import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeFirstWord
class SyntheticPropertySymbol( class SyntheticPropertySymbol(
callableId: CallableId, callableId: CallableId,
override val accessorId: CallableId override val accessorId: CallableId
) : FirPropertySymbol(callableId), AccessorSymbol, SyntheticSymbol ) : FirAccessorSymbol(callableId, accessorId), SyntheticSymbol
class FirSyntheticFunctionSymbol( class FirSyntheticFunctionSymbol(
callableId: CallableId callableId: CallableId
@@ -68,9 +68,7 @@ class FirClassSubstitutionScope(
processor(field) processor(field)
} }
is FirAccessorSymbol -> { is FirAccessorSymbol -> {
val accessor = fakeOverrideAccessors.getOrPut(original) { val accessor = fakeOverrideAccessors.getOrPut(original) { createFakeOverrideAccessor(original) }
createFakeOverrideAccessor(original) as FirAccessorSymbol
}
processor(accessor) processor(accessor)
} }
else -> { else -> {
@@ -197,7 +195,7 @@ class FirClassSubstitutionScope(
return createFakeOverrideField(session, member, original, newReturnType) return createFakeOverrideField(session, member, original, newReturnType)
} }
private fun createFakeOverrideAccessor(original: FirAccessorSymbol): FirPropertySymbol { private fun createFakeOverrideAccessor(original: FirAccessorSymbol): FirAccessorSymbol {
val member = original.fir as FirSyntheticProperty val member = original.fir as FirSyntheticProperty
val returnType = typeCalculator.tryCalculateReturnType(member).type val returnType = typeCalculator.tryCalculateReturnType(member).type
@@ -330,7 +328,7 @@ class FirClassSubstitutionScope(
baseSymbol: FirAccessorSymbol, baseSymbol: FirAccessorSymbol,
newReturnType: ConeKotlinType? = null, newReturnType: ConeKotlinType? = null,
newParameterTypes: List<ConeKotlinType?>? = null newParameterTypes: List<ConeKotlinType?>? = null
): FirPropertySymbol { ): FirAccessorSymbol {
val functionSymbol = FirNamedFunctionSymbol(baseSymbol.accessorId) val functionSymbol = FirNamedFunctionSymbol(baseSymbol.accessorId)
val function = createFakeOverrideFunction( val function = createFakeOverrideFunction(
functionSymbol, session, baseProperty.getter.delegate, null, newReturnType, newParameterTypes functionSymbol, session, baseProperty.getter.delegate, null, newReturnType, newParameterTypes
@@ -13,9 +13,9 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
@@ -27,7 +27,7 @@ class FirSyntheticProperty(
override val returnTypeRef: FirTypeRef, override val returnTypeRef: FirTypeRef,
override val name: Name, override val name: Name,
override val isVar: Boolean, override val isVar: Boolean,
override val symbol: FirPropertySymbol, override val symbol: FirAccessorSymbol,
override val status: FirDeclarationStatus, override val status: FirDeclarationStatus,
override val resolvePhase: FirResolvePhase, override val resolvePhase: FirResolvePhase,
override val getter: FirSyntheticPropertyAccessor, override val getter: FirSyntheticPropertyAccessor,
@@ -40,7 +40,7 @@ class FirSyntheticProperty(
constructor( constructor(
session: FirSession, session: FirSession,
name: Name, name: Name,
symbol: FirPropertySymbol, symbol: FirAccessorSymbol,
delegateGetter: FirSimpleFunction delegateGetter: FirSimpleFunction
) : this( ) : this(
session, delegateGetter.returnTypeRef, name, false, symbol, session, delegateGetter.returnTypeRef, name, false, symbol,
@@ -33,7 +33,7 @@ class FirConstructorSymbol(
override val overriddenSymbol: FirConstructorSymbol? = null override val overriddenSymbol: FirConstructorSymbol? = null
) : FirFunctionSymbol<FirConstructor>(callableId) ) : FirFunctionSymbol<FirConstructor>(callableId)
class FirAccessorSymbol( open class FirAccessorSymbol(
callableId: CallableId, callableId: CallableId,
override val accessorId: CallableId override val accessorId: CallableId
) : FirPropertySymbol(callableId), AccessorSymbol ) : FirPropertySymbol(callableId), AccessorSymbol