[FIR] Add symbol to FirFunction and all it's inheritors

This commit is contained in:
Dmitriy Novozhilov
2019-08-21 15:45:55 +03:00
parent e3e1f3c2aa
commit 5846db4eab
35 changed files with 194 additions and 154 deletions
@@ -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)
}
}
@@ -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)
}
}
@@ -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>()
@@ -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(
@@ -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) {}
}
@@ -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
}
@@ -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>
@@ -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 =
@@ -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"))
@@ -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)
}
@@ -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)
}