[FIR] Add invocation kind to anonymous functions

This commit is contained in:
Dmitriy Novozhilov
2019-08-26 11:04:01 +03:00
parent e937e4b261
commit e72d8e675a
17 changed files with 110 additions and 44 deletions
@@ -373,6 +373,9 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
anonymousFunction.valueParameters.renderParameters()
print(": ")
anonymousFunction.returnTypeRef.accept(this)
if (anonymousFunction.invocationKind != null) {
print(" <kind=${anonymousFunction.invocationKind}> ")
}
anonymousFunction.body?.renderBody()
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.contracts.description.InvocationKind
import org.jetbrains.kotlin.fir.FirLabeledElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.VisitedSupertype
@@ -26,6 +27,8 @@ abstract class FirAnonymousFunction(
abstract override val controlFlowGraphReference: FirControlFlowGraphReference
abstract val invocationKind: InvocationKind?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitAnonymousFunction(this, data)
@@ -38,5 +41,7 @@ abstract class FirAnonymousFunction(
abstract fun replaceReceiverTypeRef(receiverTypeRef: FirTypeRef)
abstract fun replaceInvocationKind(invocationKind: InvocationKind)
abstract override fun <D> transformControlFlowGraphReference(transformer: FirTransformer<D>, data: D): FirAnonymousFunction
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.contracts.description.InvocationKind
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -38,6 +39,8 @@ class FirAnonymousFunctionImpl(
override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference()
override var invocationKind: InvocationKind? = null
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data)
@@ -66,4 +69,8 @@ class FirAnonymousFunctionImpl(
controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data)
return this
}
override fun replaceInvocationKind(invocationKind: InvocationKind) {
this.invocationKind = invocationKind
}
}