[FIR] Fix transforming value parameters of anonymous functions

This commit is contained in:
Dmitriy Novozhilov
2019-08-19 18:24:14 +03:00
parent d841090866
commit e3e1f3c2aa
18 changed files with 117 additions and 35 deletions
@@ -33,4 +33,6 @@ abstract class FirAnonymousFunction(
typeRef.accept(visitor, data)
// Don't call super<FirExpression>.acceptChildren (annotations & typeRef are already processed)
}
abstract fun replaceReceiverTypeRef(receiverTypeRef: FirTypeRef)
}
@@ -9,6 +9,7 @@ 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.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
// May be should inherit FirTypeParameterContainer
@@ -25,4 +26,6 @@ interface FirFunction : @VisitedSupertype FirDeclarationWithBody, FirAnnotationC
}
super<FirDeclarationWithBody>.acceptChildren(visitor, data)
}
fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction
}
@@ -41,4 +41,13 @@ class FirAnonymousFunctionImpl(
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
}
override fun replaceReceiverTypeRef(receiverTypeRef: FirTypeRef) {
this.receiverTypeRef = receiverTypeRef
}
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirAnonymousFunction {
valueParameters.transformInplace(transformer, data)
return this
}
}
@@ -19,6 +19,7 @@ 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
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.Name
open class FirConstructorImpl : FirAbstractCallableMember<FirConstructor>, FirConstructor {
@@ -71,6 +72,20 @@ open class FirConstructorImpl : FirAbstractCallableMember<FirConstructor>, FirCo
return this
}
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
valueParameters.forEach { it.accept(visitor, data) }
returnTypeRef.accept(visitor, data)
status.accept(visitor, data)
delegatedConstructor?.accept(visitor, data)
body?.accept(visitor, data)
}
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirConstructorImpl {
valueParameters.transformInplace(transformer, data)
return this
}
companion object {
val NAME = Name.special("<init>")
}
@@ -45,6 +45,10 @@ abstract class FirDefaultPropertyAccessor(
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
}
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirDefaultPropertyAccessor {
return this
}
}
class FirDefaultPropertyGetter(
@@ -14,6 +14,7 @@ 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.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
class FirErrorFunction(
@@ -34,4 +35,8 @@ 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 {
return this
}
}
@@ -10,6 +10,7 @@ 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.expressions.FirBlock
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
@@ -79,4 +80,9 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>,
return super<FirAbstractCallableMember>.transformChildren(transformer, data)
}
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction {
valueParameters.transformInplace(transformer, data)
return this
}
}
@@ -10,6 +10,7 @@ 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.transformSingle
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -34,4 +35,8 @@ class FirPropertyAccessorImpl(
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
}
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction {
return this
}
}