FIR: Make possible to return variable symbols from scope

This commit is contained in:
Simon Ogorodnik
2019-03-06 18:04:02 +03:00
parent 02079bbeb5
commit 61eb19fbbf
16 changed files with 70 additions and 55 deletions
@@ -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 <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitNamedFunction(this, data)
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.name.Name
abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCallableMemberDeclaration {
final override val symbol: FirBasedSymbol<FirCallableDeclaration>
// final override val symbol: FirBasedSymbol<FirCallableDeclaration>
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<FirCallableDeclaration>,
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<FirCallableDeclaration>,
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
@@ -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<FirValueParameter>()
override var body: FirBlock? = null
@@ -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<FirValueParameter>()
@@ -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
}
@@ -25,7 +25,7 @@ class FirVariableImpl(
override var returnTypeRef: FirTypeRef,
override val isVar: Boolean,
override var initializer: FirExpression?,
override val symbol: FirBasedSymbol<FirCallableDeclaration> = FirVariableSymbol(name),
override val symbol: FirVariableSymbol = FirVariableSymbol(name),
override var delegate: FirExpression? = null
) : FirAbstractNamedAnnotatedDeclaration(session, psiElement, name), FirVariable {
@@ -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 <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitVariable(this, data)
@@ -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
}
@@ -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<FirCallableDeclaration>()
class FirPropertySymbol(callableId: CallableId) : FirVariableSymbol(callableId), ConePropertySymbol
class FirVariableSymbol(override val callableId: CallableId) : ConeVariableSymbol, AbstractFirBasedSymbol<FirCallableDeclaration>() {
open class FirVariableSymbol(override val callableId: CallableId) : ConeVariableSymbol, AbstractFirBasedSymbol<FirCallableDeclaration>() {
constructor(name: Name) : this(CallableId(FqName("var"), name)) // TODO?
}