From 61eb19fbbf3ec1e3a995169ffe27c1e67200945b Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Wed, 6 Mar 2019 18:04:02 +0300 Subject: [PATCH] FIR: Make possible to return variable symbols from scope --- .../java/scopes/JavaClassEnhancementScope.kt | 45 +++++++++---------- .../fir/java/scopes/JavaClassUseSiteScope.kt | 6 +-- .../impl/FirClassDeclaredMemberScope.kt | 3 +- .../scopes/impl/FirClassSubstitutionScope.kt | 2 +- .../fir/scopes/impl/FirClassUseSiteScope.kt | 7 +-- .../fir/scopes/impl/FirCompositeScope.kt | 4 +- .../impl/FirTopLevelDeclaredMemberScope.kt | 3 +- .../fir/declarations/FirNamedFunction.kt | 4 ++ .../impl/FirAbstractCallableMember.kt | 8 +--- .../declarations/impl/FirConstructorImpl.kt | 11 ++++- .../impl/FirMemberFunctionImpl.kt | 13 +++++- .../impl/FirMemberPropertyImpl.kt | 5 ++- .../fir/declarations/impl/FirVariableImpl.kt | 2 +- .../kotlin/fir/expressions/FirVariable.kt | 4 ++ .../jetbrains/kotlin/fir/scopes/FirScope.kt | 4 +- .../fir/symbols/impl/FirPropertySymbol.kt | 4 +- 16 files changed, 70 insertions(+), 55 deletions(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt index a65f00f4ad9..8c23eed25d8 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt @@ -21,10 +21,7 @@ import org.jetbrains.kotlin.fir.java.toNotNullConeKotlinType import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.ProcessorAction -import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol -import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol -import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.* import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.types.* @@ -54,7 +51,7 @@ class JavaClassEnhancementScope( private val enhancements = mutableMapOf() - override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction { + override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction { useSiteScope.processPropertiesByName(name) process@{ original -> val field = enhancements.getOrPut(original) { enhance(original, name) } @@ -75,7 +72,7 @@ class JavaClassEnhancementScope( } private fun enhance( - original: ConePropertySymbol, + original: ConeVariableSymbol, name: Name ): FirPropertySymbol { val firField = (original as FirBasedSymbol<*>).fir as? FirJavaField ?: error("Can't make enhancement for $original") @@ -109,7 +106,7 @@ class JavaClassEnhancementScope( ): FirFunctionSymbol { val firMethod = (original as FirFunctionSymbol).fir as? FirFunction - if (firMethod !is FirJavaMethod && firMethod !is FirJavaConstructor || firMethod !is FirCallableMember) return original + if (firMethod !is FirJavaMethod && firMethod !is FirJavaConstructor || firMethod !is FirCallableMemberDeclaration) return original val memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firMethod.annotations) @@ -220,7 +217,7 @@ class JavaClassEnhancementScope( private fun enhanceReceiverType( ownerFunction: FirJavaMethod, - overriddenMembers: List, + overriddenMembers: List, memberContext: FirJavaEnhancementContext ): FirResolvedTypeRef { val signatureParts = ownerFunction.partsForValueParameter( @@ -237,8 +234,8 @@ class JavaClassEnhancementScope( private data class EnhanceValueParameterResult(val typeRef: FirResolvedTypeRef, val defaultValue: FirExpression?) private fun enhanceValueParameter( - ownerFunction: FirCallableMember, - overriddenMembers: List, + ownerFunction: FirCallableMemberDeclaration, + overriddenMembers: List, hasReceiver: Boolean, memberContext: FirJavaEnhancementContext, predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo?, @@ -263,8 +260,8 @@ class JavaClassEnhancementScope( } private fun enhanceReturnType( - owner: FirCallableMember, - overriddenMembers: List, + owner: FirCallableMemberDeclaration, + overriddenMembers: List, memberContext: FirJavaEnhancementContext, predefinedEnhancementInfo: PredefinedFunctionEnhancementInfo? ): FirResolvedTypeRef { @@ -281,11 +278,11 @@ class JavaClassEnhancementScope( return signatureParts.type } - private val overriddenMemberCache = mutableMapOf>() + private val overriddenMemberCache = mutableMapOf>() - private fun FirCallableMember.overriddenMembers(): List { + private fun FirCallableMemberDeclaration.overriddenMembers(): List { return overriddenMemberCache.getOrPut(this) { - val result = mutableListOf() + val result = mutableListOf() if (this is FirNamedFunction) { val superTypesScope = useSiteScope.superTypesScope superTypesScope.processFunctionsByName(this.name) { basicFunctionSymbol -> @@ -294,7 +291,7 @@ class JavaClassEnhancementScope( } val overriddenByFir = (overriddenBy as? FirFunctionSymbol)?.fir if (overriddenByFir === this@overriddenMembers) { - result += (basicFunctionSymbol as FirFunctionSymbol).fir + result += (basicFunctionSymbol as FirFunctionSymbol).fir as FirCallableMemberDeclaration } ProcessorAction.NEXT } @@ -304,21 +301,21 @@ class JavaClassEnhancementScope( } private sealed class TypeInSignature { - abstract fun getTypeRef(member: FirCallableMember): FirTypeRef + abstract fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef object Return : TypeInSignature() { - override fun getTypeRef(member: FirCallableMember): FirTypeRef = member.returnTypeRef + override fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef = member.returnTypeRef } object Receiver : TypeInSignature() { - override fun getTypeRef(member: FirCallableMember): FirTypeRef { + override fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef { if (member is FirJavaMethod) return member.valueParameters[0].returnTypeRef return member.receiverTypeRef!! } } class ValueParameter(val hasReceiver: Boolean, val index: Int) : TypeInSignature() { - override fun getTypeRef(member: FirCallableMember): FirTypeRef { + override fun getTypeRef(member: FirCallableMemberDeclaration): FirTypeRef { if (hasReceiver && member is FirJavaMethod) { return (member as FirFunction).valueParameters[index + 1].returnTypeRef } @@ -327,9 +324,9 @@ class JavaClassEnhancementScope( } } - private fun FirCallableMember.partsForValueParameter( + private fun FirCallableMemberDeclaration.partsForValueParameter( typeQualifierResolver: FirAnnotationTypeQualifierResolver, - overriddenMembers: List, + overriddenMembers: List, // TODO: investigate if it's really can be a null (check properties' with extension overrides in Java) parameterContainer: FirAnnotationContainer?, methodContext: FirJavaEnhancementContext, @@ -345,9 +342,9 @@ class JavaClassEnhancementScope( typeInSignature ) - private fun FirCallableMember.parts( + private fun FirCallableMemberDeclaration.parts( typeQualifierResolver: FirAnnotationTypeQualifierResolver, - overriddenMembers: List, + overriddenMembers: List, typeContainer: FirAnnotationContainer?, isCovariant: Boolean, containerContext: FirJavaEnhancementContext, diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt index d70d81fbedb..fcadcfb273f 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractProviderBasedScope import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol +import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.types.* @@ -103,8 +103,8 @@ class JavaClassUseSiteScope( } } - override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction { - val seen = mutableSetOf() + override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction { + val seen = mutableSetOf() if (!declaredMemberScope.processPropertiesByName(name) { seen += it processor(it) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt index a6da398e86f..f25091ddb63 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol +import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol import org.jetbrains.kotlin.name.Name class FirClassDeclaredMemberScope( @@ -32,7 +33,7 @@ class FirClassDeclaredMemberScope( return NEXT } - override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction { + override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction { val symbols = provider.getCallableSymbols(CallableId(classId.packageFqName, classId.relativeClassName, name)) for (symbol in symbols) { if (symbol is ConePropertySymbol && !processor(symbol)) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt index bce9cf33da1..f6480fdba7e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt @@ -93,7 +93,7 @@ class FirClassSubstitutionScope( return super.processFunctionsByName(name, processor) } - override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction { + override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction { return useSiteScope.processPropertiesByName(name, processor) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteScope.kt index e7585e586d1..f4043de4313 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassUseSiteScope.kt @@ -12,10 +12,7 @@ import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP -import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol -import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol -import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol +import org.jetbrains.kotlin.fir.symbols.* import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeTypeContext @@ -96,7 +93,7 @@ class FirClassUseSiteScope( } } - override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction { + override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction { val seen = mutableSetOf() if (!declaredMemberScope.processPropertiesByName(name) { seen += it diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirCompositeScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirCompositeScope.kt index d308f999ad7..2d8d719215c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirCompositeScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirCompositeScope.kt @@ -12,8 +12,8 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol +import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol import org.jetbrains.kotlin.name.Name class FirCompositeScope( @@ -53,7 +53,7 @@ class FirCompositeScope( return processComposite(FirScope::processFunctionsByName, name, processor) } - override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction { + override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction { return processComposite(FirScope::processPropertiesByName, name, processor) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTopLevelDeclaredMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTopLevelDeclaredMemberScope.kt index 882214922f2..3199e1d2a40 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTopLevelDeclaredMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTopLevelDeclaredMemberScope.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol +import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol import org.jetbrains.kotlin.name.Name class FirTopLevelDeclaredMemberScope( @@ -32,7 +33,7 @@ class FirTopLevelDeclaredMemberScope( return NEXT } - override fun processPropertiesByName(name: Name, processor: (ConePropertySymbol) -> ProcessorAction): ProcessorAction { + override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction { val symbols = provider.getCallableSymbols(CallableId(packageFqName, name)) for (symbol in symbols) { if (symbol is ConePropertySymbol && !processor(symbol)) { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedFunction.kt index 6f4e8d57999..05e11a16193 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedFunction.kt @@ -7,6 +7,8 @@ package org.jetbrains.kotlin.fir.declarations import org.jetbrains.kotlin.fir.BaseTransformedType import org.jetbrains.kotlin.fir.VisitedSupertype +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.visitors.FirVisitor @BaseTransformedType @@ -25,6 +27,8 @@ interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMemberDec override val isOverride: Boolean get() = status.isOverride + override val symbol: FirFunctionSymbol + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitNamedFunction(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractCallableMember.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractCallableMember.kt index 35433daa6c8..30ac4a76ecf 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractCallableMember.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractCallableMember.kt @@ -20,7 +20,7 @@ import org.jetbrains.kotlin.name.Name abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCallableMemberDeclaration { - final override val symbol: FirBasedSymbol +// final override val symbol: FirBasedSymbol final override var receiverTypeRef: FirTypeRef? final override var returnTypeRef: FirTypeRef @@ -31,13 +31,10 @@ abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCall constructor( session: FirSession, psi: PsiElement?, - symbol: FirBasedSymbol, name: Name, receiverTypeRef: FirTypeRef?, returnTypeRef: FirTypeRef ) : super(session, psi, name) { - this.symbol = symbol - symbol.bind(this) this.receiverTypeRef = receiverTypeRef this.returnTypeRef = returnTypeRef } @@ -45,7 +42,6 @@ abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCall constructor( session: FirSession, psi: PsiElement?, - symbol: FirBasedSymbol, name: Name, visibility: Visibility, modality: Modality?, @@ -55,8 +51,6 @@ abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCall receiverTypeRef: FirTypeRef?, returnTypeRef: FirTypeRef ) : super(session, psi, name, visibility, modality, isExpect, isActual) { - this.symbol = symbol - symbol.bind(this) this.receiverTypeRef = receiverTypeRef this.returnTypeRef = returnTypeRef status.isOverride = isOverride diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt index 4f64cfa0e12..cbbb3312ad5 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt @@ -10,10 +10,12 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirConstructor import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.transformSingle @@ -24,16 +26,21 @@ import org.jetbrains.kotlin.name.Name open class FirConstructorImpl( session: FirSession, psi: PsiElement?, - symbol: FirFunctionSymbol, + override val symbol: FirFunctionSymbol, visibility: Visibility, isExpect: Boolean, isActual: Boolean, delegatedSelfTypeRef: FirTypeRef, final override var delegatedConstructor: FirDelegatedConstructorCall? ) : FirAbstractCallableMember( - session, psi, symbol, NAME, visibility, Modality.FINAL, + session, psi, NAME, visibility, Modality.FINAL, isExpect, isActual, isOverride = false, receiverTypeRef = null, returnTypeRef = delegatedSelfTypeRef ), FirConstructor { + + init { + symbol.bind(this) + } + override val valueParameters = mutableListOf() override var body: FirBlock? = null diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt index f4d595b33fa..d6827e8b7ed 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt @@ -10,9 +10,11 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirNamedFunction import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.transformSingle @@ -22,6 +24,8 @@ import org.jetbrains.kotlin.name.Name open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction, FirModifiableFunction { + override val symbol: FirFunctionSymbol + constructor( session: FirSession, psi: PsiElement?, @@ -29,7 +33,10 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction, name: Name, receiverTypeRef: FirTypeRef?, returnTypeRef: FirTypeRef - ) : super(session, psi, symbol, name, receiverTypeRef, returnTypeRef) + ) : super(session, psi, name, receiverTypeRef, returnTypeRef) { + this.symbol = symbol + symbol.bind(this) + } constructor( session: FirSession, @@ -50,7 +57,7 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction, receiverTypeRef: FirTypeRef?, returnTypeRef: FirTypeRef ) : super( - session, psi, symbol, name, visibility, modality, + session, psi, name, visibility, modality, isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef ) { status.isOperator = isOperator @@ -59,6 +66,8 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction, status.isTailRec = isTailRec status.isExternal = isExternal status.isSuspend = isSuspend + this.symbol = symbol + symbol.bind(this) } override val valueParameters = mutableListOf() diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt index 8eea55044ec..fb4de09f3b0 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.name.Name class FirMemberPropertyImpl( session: FirSession, psi: PsiElement?, - symbol: FirPropertySymbol, + override val symbol: FirPropertySymbol, name: Name, visibility: Visibility, modality: Modality?, @@ -39,9 +39,10 @@ class FirMemberPropertyImpl( override var setter: FirPropertyAccessor, override var delegate: FirExpression? ) : FirAbstractCallableMember( - session, psi, symbol, name, visibility, modality, isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef + session, psi, name, visibility, modality, isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef ), FirProperty { init { + symbol.bind(this) status.isConst = isConst status.isLateInit = isLateInit } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirVariableImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirVariableImpl.kt index 11561922e77..0a159fd316e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirVariableImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirVariableImpl.kt @@ -25,7 +25,7 @@ class FirVariableImpl( override var returnTypeRef: FirTypeRef, override val isVar: Boolean, override var initializer: FirExpression?, - override val symbol: FirBasedSymbol = FirVariableSymbol(name), + override val symbol: FirVariableSymbol = FirVariableSymbol(name), override var delegate: FirExpression? = null ) : FirAbstractNamedAnnotatedDeclaration(session, psiElement, name), FirVariable { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariable.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariable.kt index dcfc7a875bf..41fddabf405 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariable.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariable.kt @@ -7,6 +7,8 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.visitors.FirVisitor interface FirVariable : @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirCallableDeclaration, FirNamedDeclaration, FirStatement { @@ -19,6 +21,8 @@ interface FirVariable : @VisitedSupertype FirDeclaration, FirTypedDeclaration, F val delegate: FirExpression? + override val symbol: FirVariableSymbol + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitVariable(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirScope.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirScope.kt index 0dabf3ac35b..a7bd2c28670 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirScope.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirScope.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.scopes import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol +import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol import org.jetbrains.kotlin.name.Name interface FirScope { @@ -25,7 +25,7 @@ interface FirScope { fun processPropertiesByName( name: Name, - processor: (ConePropertySymbol) -> ProcessorAction + processor: (ConeVariableSymbol) -> ProcessorAction ): ProcessorAction = NEXT } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirPropertySymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirPropertySymbol.kt index 34bcb4b7e8d..bb5cbbb7b4b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirPropertySymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirPropertySymbol.kt @@ -13,8 +13,8 @@ import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -class FirPropertySymbol(override val callableId: CallableId) : ConePropertySymbol, AbstractFirBasedSymbol() +class FirPropertySymbol(callableId: CallableId) : FirVariableSymbol(callableId), ConePropertySymbol -class FirVariableSymbol(override val callableId: CallableId) : ConeVariableSymbol, AbstractFirBasedSymbol() { +open class FirVariableSymbol(override val callableId: CallableId) : ConeVariableSymbol, AbstractFirBasedSymbol() { constructor(name: Name) : this(CallableId(FqName("var"), name)) // TODO? } \ No newline at end of file