[FIR] Add symbol to FirFunction and all it's inheritors
This commit is contained in:
@@ -9,4 +9,4 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
|
||||
class FirFunctionTarget(
|
||||
labelName: String?
|
||||
) : FirAbstractTarget<FirFunction>(labelName)
|
||||
) : FirAbstractTarget<FirFunction<*>>(labelName)
|
||||
@@ -127,7 +127,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
print(callableDeclaration.name)
|
||||
}
|
||||
|
||||
if (callableDeclaration is FirFunction) {
|
||||
if (callableDeclaration is FirFunction<*>) {
|
||||
callableDeclaration.valueParameters.renderParameters()
|
||||
}
|
||||
print(": ")
|
||||
@@ -382,7 +382,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
anonymousFunction.body?.renderBody()
|
||||
}
|
||||
|
||||
override fun visitFunction(function: FirFunction) {
|
||||
override fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>) {
|
||||
function.valueParameters.renderParameters()
|
||||
visitDeclarationWithBody(function)
|
||||
}
|
||||
|
||||
@@ -10,26 +10,24 @@ import org.jetbrains.kotlin.fir.FirLabeledElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
abstract class FirAnonymousFunction(
|
||||
final override val session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : @VisitedSupertype FirFunction, FirUnknownTypeExpression(psi), FirTypedDeclaration, FirLabeledElement {
|
||||
abstract val receiverTypeRef: FirTypeRef?
|
||||
) : @VisitedSupertype FirFunction<FirAnonymousFunction>, FirUnknownTypeExpression(psi), FirLabeledElement {
|
||||
abstract override val receiverTypeRef: FirTypeRef?
|
||||
|
||||
abstract override val symbol: FirAnonymousFunctionSymbol
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitAnonymousFunction(this, data)
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super<FirTypedDeclaration>.acceptChildren(visitor, data)
|
||||
super<FirFunction>.acceptChildren(visitor, data)
|
||||
super<FirLabeledElement>.acceptChildren(visitor, data)
|
||||
receiverTypeRef?.accept(visitor, data)
|
||||
for (parameter in valueParameters) {
|
||||
parameter.accept(visitor, data)
|
||||
}
|
||||
body?.accept(visitor, data)
|
||||
typeRef.accept(visitor, data)
|
||||
// Don't call super<FirExpression>.acceptChildren (annotations & typeRef are already processed)
|
||||
}
|
||||
|
||||
@@ -9,23 +9,29 @@ import org.jetbrains.kotlin.fir.FirTargetElement
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
// May be should inherit FirTypeParameterContainer
|
||||
interface FirFunction : @VisitedSupertype FirDeclarationWithBody, FirAnnotationContainer, FirTargetElement, FirStatement {
|
||||
interface FirFunction<F : FirFunction<F>> : @VisitedSupertype FirDeclarationWithBody, FirCallableDeclaration<F>, FirAnnotationContainer,
|
||||
FirTargetElement, FirStatement, FirSymbolOwner<F> {
|
||||
|
||||
val valueParameters: List<FirValueParameter>
|
||||
|
||||
override val symbol: FirFunctionSymbol<F>
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitFunction(this, data)
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
acceptAnnotations(visitor, data)
|
||||
super<FirCallableDeclaration>.acceptChildren(visitor, data)
|
||||
for (parameter in valueParameters) {
|
||||
parameter.accept(visitor, data)
|
||||
}
|
||||
super<FirDeclarationWithBody>.acceptChildren(visitor, data)
|
||||
}
|
||||
|
||||
fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction
|
||||
fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction<F>
|
||||
}
|
||||
@@ -6,12 +6,11 @@
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirMemberFunction<F : FirMemberFunction<F>> :
|
||||
@VisitedSupertype FirFunction, FirCallableMemberDeclaration<F> {
|
||||
@VisitedSupertype FirFunction<F>, FirCallableMemberDeclaration<F> {
|
||||
|
||||
override val symbol: FirFunctionSymbol<F>
|
||||
|
||||
|
||||
@@ -7,9 +7,10 @@ package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirPropertyAccessor : @VisitedSupertype FirFunction, FirTypedDeclaration {
|
||||
interface FirPropertyAccessor : @VisitedSupertype FirFunction<FirPropertyAccessor> {
|
||||
val isGetter: Boolean
|
||||
|
||||
val isSetter: Boolean get() = !isGetter
|
||||
@@ -18,15 +19,13 @@ interface FirPropertyAccessor : @VisitedSupertype FirFunction, FirTypedDeclarati
|
||||
|
||||
val visibility: Visibility get() = status.visibility
|
||||
|
||||
override val symbol: FirPropertyAccessorSymbol
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitPropertyAccessor(this, data)
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super<FirTypedDeclaration>.acceptChildren(visitor, data)
|
||||
for (parameter in valueParameters) {
|
||||
parameter.accept(visitor, data)
|
||||
}
|
||||
body?.accept(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
status.accept(visitor, data)
|
||||
}
|
||||
}
|
||||
+12
-13
@@ -8,25 +8,24 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
abstract class FirAbstractFunction(
|
||||
abstract class FirAbstractPropertyAccessor(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirAbstractAnnotatedDeclaration(session, psi), FirFunction {
|
||||
final override val valueParameters = mutableListOf<FirValueParameter>()
|
||||
psi: PsiElement?,
|
||||
final override val symbol: FirPropertyAccessorSymbol
|
||||
) : FirAbstractAnnotatedDeclaration(session, psi), @VisitedSupertype FirPropertyAccessor {
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
final override var body: FirBlock? = null
|
||||
final override val receiverTypeRef: FirTypeRef? get() = null
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
body = body?.transformSingle(transformer, data)
|
||||
|
||||
return super<FirAbstractAnnotatedDeclaration>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+8
-2
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
@@ -18,8 +19,13 @@ class FirAnonymousFunctionImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override var returnTypeRef: FirTypeRef,
|
||||
override var receiverTypeRef: FirTypeRef?
|
||||
) : FirAnonymousFunction(session, psi), FirModifiableFunction {
|
||||
override var receiverTypeRef: FirTypeRef?,
|
||||
override val symbol: FirAnonymousFunctionSymbol
|
||||
) : FirAnonymousFunction(session, psi), FirModifiableFunction<FirAnonymousFunction> {
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
override var label: FirLabel? = null
|
||||
|
||||
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||
|
||||
+14
-15
@@ -8,13 +8,13 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
@@ -25,20 +25,17 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
abstract class FirDefaultPropertyAccessor(
|
||||
final override val session: FirSession,
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
final override val isGetter: Boolean,
|
||||
visibility: Visibility
|
||||
) : FirAbstractElement(psi), FirPropertyAccessor {
|
||||
visibility: Visibility,
|
||||
symbol: FirPropertyAccessorSymbol
|
||||
) : FirAbstractPropertyAccessor(session, psi, symbol) {
|
||||
override var status = FirDeclarationStatusImpl(visibility, Modality.FINAL)
|
||||
|
||||
override var resolvePhase = FirResolvePhase.BODY_RESOLVE
|
||||
|
||||
final override val body: FirBlock? =
|
||||
null
|
||||
|
||||
final override val annotations: List<FirAnnotationCall>
|
||||
get() = emptyList()
|
||||
final override val body: FirBlock? = null
|
||||
|
||||
abstract override var returnTypeRef: FirTypeRef
|
||||
|
||||
@@ -55,8 +52,9 @@ class FirDefaultPropertyGetter(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
propertyTypeRef: FirTypeRef,
|
||||
visibility: Visibility
|
||||
) : FirDefaultPropertyAccessor(session, psi, isGetter = true, visibility = visibility) {
|
||||
visibility: Visibility,
|
||||
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
|
||||
) : FirDefaultPropertyAccessor(session, psi, isGetter = true, visibility = visibility, symbol = symbol) {
|
||||
override val valueParameters: List<FirValueParameter> = emptyList()
|
||||
|
||||
override var returnTypeRef: FirTypeRef = propertyTypeRef
|
||||
@@ -73,8 +71,9 @@ class FirDefaultPropertySetter(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
propertyTypeRef: FirTypeRef,
|
||||
visibility: Visibility
|
||||
) : FirDefaultPropertyAccessor(session, psi, isGetter = false, visibility = visibility) {
|
||||
visibility: Visibility,
|
||||
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
|
||||
) : FirDefaultPropertyAccessor(session, psi, isGetter = false, visibility = visibility, symbol = symbol) {
|
||||
override val valueParameters = mutableListOf(
|
||||
FirDefaultSetterValueParameter(
|
||||
session, psi, propertyTypeRef, FirVariableSymbol(
|
||||
|
||||
+18
-3
@@ -14,14 +14,27 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirErrorFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
class FirErrorFunction(
|
||||
override val session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val reason: String
|
||||
) : FirAbstractElement(psi), FirErrorDeclaration, FirFunction {
|
||||
override val reason: String,
|
||||
override val symbol: FirErrorFunctionSymbol = FirErrorFunctionSymbol()
|
||||
) : FirAbstractElement(psi), FirErrorDeclaration, FirFunction<FirErrorFunction>, FirSymbolOwner<FirErrorFunction> {
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
override val receiverTypeRef: FirTypeRef? get() = null
|
||||
|
||||
override val returnTypeRef: FirTypeRef
|
||||
get() = TODO("not implemented")
|
||||
|
||||
override val annotations: List<FirAnnotationCall>
|
||||
get() = emptyList()
|
||||
|
||||
@@ -36,7 +49,9 @@ class FirErrorFunction(
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
super<FirFunction>.accept(visitor, data)
|
||||
|
||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction {
|
||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirErrorFunction {
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {}
|
||||
}
|
||||
+4
-4
@@ -10,8 +10,8 @@ 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.FirFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
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.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>, FirNamedFunction, FirModifiableFunction {
|
||||
open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>, FirNamedFunction, FirModifiableFunction<FirNamedFunction> {
|
||||
|
||||
// NB: FirAccessorSymbol can be here
|
||||
override val symbol: FirFunctionSymbol<FirNamedFunction>
|
||||
@@ -81,7 +81,7 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>,
|
||||
return super<FirAbstractCallableMember>.transformChildren(transformer, data)
|
||||
}
|
||||
|
||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction {
|
||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirMemberFunctionImpl {
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
|
||||
interface FirModifiableFunction : FirFunction {
|
||||
interface FirModifiableFunction<F : FirFunction<F>> : FirFunction<F> {
|
||||
override var body: FirBlock?
|
||||
|
||||
override val valueParameters: MutableList<FirValueParameter>
|
||||
|
||||
+15
-6
@@ -10,8 +10,10 @@ 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.FirFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
@@ -21,22 +23,29 @@ class FirPropertyAccessorImpl(
|
||||
psi: PsiElement?,
|
||||
override val isGetter: Boolean,
|
||||
visibility: Visibility,
|
||||
override var returnTypeRef: FirTypeRef
|
||||
) : FirAbstractFunction(session, psi), FirPropertyAccessor {
|
||||
override var returnTypeRef: FirTypeRef,
|
||||
symbol: FirPropertyAccessorSymbol
|
||||
) : FirAbstractPropertyAccessor(session, psi, symbol) {
|
||||
override var status = FirDeclarationStatusImpl(visibility, Modality.FINAL)
|
||||
|
||||
override var body: FirBlock? = null
|
||||
|
||||
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
body = body?.transformSingle(transformer, data)
|
||||
status = status.transformSingle(transformer, data)
|
||||
|
||||
return super<FirAbstractFunction>.transformChildren(transformer, data)
|
||||
return super.transformChildren(transformer, data)
|
||||
}
|
||||
|
||||
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
|
||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||
}
|
||||
|
||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction {
|
||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
|
||||
return this
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
abstract class FirReturnExpression(psi: PsiElement?) : FirJump<FirFunction>(psi) {
|
||||
abstract class FirReturnExpression(psi: PsiElement?) : FirJump<FirFunction<*>>(psi) {
|
||||
abstract val result: FirExpression
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
|
||||
+4
-2
@@ -6,10 +6,12 @@
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirTarget
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
@@ -18,7 +20,7 @@ class FirReturnExpressionImpl(
|
||||
psi: PsiElement?,
|
||||
override var result: FirExpression
|
||||
) : FirReturnExpression(psi) {
|
||||
override lateinit var target: FirTarget<FirFunction>
|
||||
override lateinit var target: FirTarget<FirFunction<*>>
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
result = result.transformSingle(transformer, data)
|
||||
|
||||
@@ -6,18 +6,23 @@
|
||||
package org.jetbrains.kotlin.fir.symbols.impl
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirErrorFunction
|
||||
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.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
sealed class FirFunctionSymbol<D : FirMemberFunction<D>>(
|
||||
sealed class FirFunctionSymbol<D : FirFunction<D>>(
|
||||
override val callableId: CallableId
|
||||
) : ConeFunctionSymbol, FirCallableSymbol<D>() {
|
||||
override val parameters: List<ConeKotlinType>
|
||||
get() = emptyList()
|
||||
}
|
||||
|
||||
// ------------------------ named ------------------------
|
||||
|
||||
open class FirNamedFunctionSymbol(
|
||||
callableId: CallableId,
|
||||
val isFakeOverride: Boolean = false,
|
||||
@@ -32,4 +37,19 @@ class FirConstructorSymbol(
|
||||
class FirAccessorSymbol(
|
||||
callableId: CallableId,
|
||||
val accessorId: CallableId
|
||||
) : ConePropertySymbol, FirFunctionSymbol<FirNamedFunction>(callableId)
|
||||
) : ConePropertySymbol, FirFunctionSymbol<FirNamedFunction>(callableId)
|
||||
|
||||
// ------------------------ unnamed ------------------------
|
||||
|
||||
sealed class FirFunctionWithoutNameSymbol<F : FirFunction<F>>(
|
||||
stubName: Name
|
||||
) : FirFunctionSymbol<F>(CallableId(FqName("special"), stubName)) {
|
||||
override val parameters: List<ConeKotlinType>
|
||||
get() = emptyList()
|
||||
}
|
||||
|
||||
class FirAnonymousFunctionSymbol : FirFunctionWithoutNameSymbol<FirAnonymousFunction>(Name.identifier("anonymous"))
|
||||
|
||||
class FirPropertyAccessorSymbol : FirFunctionWithoutNameSymbol<FirPropertyAccessor>(Name.identifier("accessor"))
|
||||
|
||||
class FirErrorFunctionSymbol : FirFunctionWithoutNameSymbol<FirErrorFunction>(Name.identifier("error"))
|
||||
+5
-15
@@ -6,9 +6,7 @@ package org.jetbrains.kotlin.fir.visitors
|
||||
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
@@ -42,7 +40,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformDeclarationWithBody(anonymousInitializer, data)
|
||||
}
|
||||
|
||||
open fun transformFunction(function: FirFunction, data: D): CompositeTransformResult<FirDeclaration> {
|
||||
open fun <F : FirFunction<F>> transformFunction(function: FirFunction<F>, data: D): CompositeTransformResult<FirDeclaration> {
|
||||
return transformDeclarationWithBody(function, data)
|
||||
}
|
||||
|
||||
@@ -62,7 +60,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformMemberFunction(namedFunction, data)
|
||||
}
|
||||
|
||||
open fun transformModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): CompositeTransformResult<FirDeclaration> {
|
||||
open fun <F : FirFunction<F>> transformModifiableFunction(modifiableFunction: FirModifiableFunction<F>, data: D): CompositeTransformResult<FirDeclaration> {
|
||||
return transformFunction(modifiableFunction, data)
|
||||
}
|
||||
|
||||
@@ -70,10 +68,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformFunction(propertyAccessor, data)
|
||||
}
|
||||
|
||||
open fun transformDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: D): CompositeTransformResult<FirDeclaration> {
|
||||
return transformPropertyAccessor(defaultPropertyAccessor, data)
|
||||
}
|
||||
|
||||
open fun transformErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
|
||||
return transformDeclaration(errorDeclaration, data)
|
||||
}
|
||||
@@ -582,10 +576,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformDeclarationWithBody(declarationWithBody, data)
|
||||
}
|
||||
|
||||
final override fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformDefaultPropertyAccessor(defaultPropertyAccessor, data)
|
||||
}
|
||||
|
||||
final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformDelegateFieldReference(delegateFieldReference, data)
|
||||
}
|
||||
@@ -638,7 +628,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformFile(file, data)
|
||||
}
|
||||
|
||||
final override fun visitFunction(function: FirFunction, data: D): CompositeTransformResult<FirElement> {
|
||||
final override fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformFunction(function, data)
|
||||
}
|
||||
|
||||
@@ -698,7 +688,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformModifiableClass(modifiableClass, data)
|
||||
}
|
||||
|
||||
final override fun visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): CompositeTransformResult<FirElement> {
|
||||
final override fun <F : FirFunction<F>> visitModifiableFunction(modifiableFunction: FirModifiableFunction<F>, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformModifiableFunction(modifiableFunction, data)
|
||||
}
|
||||
|
||||
|
||||
@@ -6,9 +6,7 @@ package org.jetbrains.kotlin.fir.visitors
|
||||
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
@@ -42,7 +40,7 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitDeclarationWithBody(anonymousInitializer, data)
|
||||
}
|
||||
|
||||
open fun visitFunction(function: FirFunction, data: D): R {
|
||||
open fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>, data: D): R {
|
||||
return visitDeclarationWithBody(function, data)
|
||||
}
|
||||
|
||||
@@ -62,7 +60,7 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitMemberFunction(namedFunction, data)
|
||||
}
|
||||
|
||||
open fun visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): R {
|
||||
open fun <F : FirFunction<F>> visitModifiableFunction(modifiableFunction: FirModifiableFunction<F>, data: D): R {
|
||||
return visitFunction(modifiableFunction, data)
|
||||
}
|
||||
|
||||
@@ -70,10 +68,6 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitFunction(propertyAccessor, data)
|
||||
}
|
||||
|
||||
open fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: D): R {
|
||||
return visitPropertyAccessor(defaultPropertyAccessor, data)
|
||||
}
|
||||
|
||||
open fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): R {
|
||||
return visitDeclaration(errorDeclaration, data)
|
||||
}
|
||||
|
||||
+5
-15
@@ -6,9 +6,7 @@ package org.jetbrains.kotlin.fir.visitors
|
||||
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
@@ -42,7 +40,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitDeclarationWithBody(anonymousInitializer, null)
|
||||
}
|
||||
|
||||
open fun visitFunction(function: FirFunction) {
|
||||
open fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>) {
|
||||
visitDeclarationWithBody(function, null)
|
||||
}
|
||||
|
||||
@@ -62,7 +60,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitMemberFunction(namedFunction, null)
|
||||
}
|
||||
|
||||
open fun visitModifiableFunction(modifiableFunction: FirModifiableFunction) {
|
||||
open fun <F : FirFunction<F>> visitModifiableFunction(modifiableFunction: FirModifiableFunction<F>) {
|
||||
visitFunction(modifiableFunction, null)
|
||||
}
|
||||
|
||||
@@ -70,10 +68,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitFunction(propertyAccessor, null)
|
||||
}
|
||||
|
||||
open fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor) {
|
||||
visitPropertyAccessor(defaultPropertyAccessor, null)
|
||||
}
|
||||
|
||||
open fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration) {
|
||||
visitDeclaration(errorDeclaration, null)
|
||||
}
|
||||
@@ -582,10 +576,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitDeclarationWithBody(declarationWithBody)
|
||||
}
|
||||
|
||||
final override fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: Nothing?) {
|
||||
visitDefaultPropertyAccessor(defaultPropertyAccessor)
|
||||
}
|
||||
|
||||
final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: Nothing?) {
|
||||
visitDelegateFieldReference(delegateFieldReference)
|
||||
}
|
||||
@@ -638,7 +628,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitFile(file)
|
||||
}
|
||||
|
||||
final override fun visitFunction(function: FirFunction, data: Nothing?) {
|
||||
final override fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>, data: Nothing?) {
|
||||
visitFunction(function)
|
||||
}
|
||||
|
||||
@@ -698,7 +688,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitModifiableClass(modifiableClass)
|
||||
}
|
||||
|
||||
final override fun visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: Nothing?) {
|
||||
final override fun <F : FirFunction<F>> visitModifiableFunction(modifiableFunction: FirModifiableFunction<F>, data: Nothing?) {
|
||||
visitModifiableFunction(modifiableFunction)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user