FIR: Make possible to return variable symbols from scope
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
+1
-7
@@ -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
|
||||
|
||||
+9
-2
@@ -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
|
||||
|
||||
+11
-2
@@ -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>()
|
||||
|
||||
+3
-2
@@ -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?
|
||||
}
|
||||
Reference in New Issue
Block a user