FIR: add & use hasExplicitParameterList to anonymous functions

#KT-49134 Fixed
This commit is contained in:
Mikhail Glukhikh
2021-10-15 16:26:37 +03:00
committed by teamcityserver
parent 9307757bb4
commit 29e4c299e7
20 changed files with 38 additions and 16 deletions
@@ -45,6 +45,7 @@ abstract class FirAnonymousFunction : FirFunction(), FirTypeParametersOwner {
abstract val invocationKind: EventOccurrencesRange?
abstract val inlineStatus: InlineStatus
abstract val isLambda: Boolean
abstract val hasExplicitParameterList: Boolean
abstract override val typeParameters: List<FirTypeParameter>
abstract val typeRef: FirTypeRef
@@ -59,6 +59,7 @@ class FirAnonymousFunctionBuilder : FirFunctionBuilder, FirAnnotationContainerBu
var invocationKind: EventOccurrencesRange? = null
var inlineStatus: InlineStatus = InlineStatus.Unknown
var isLambda: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
var hasExplicitParameterList: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
@@ -82,6 +83,7 @@ class FirAnonymousFunctionBuilder : FirFunctionBuilder, FirAnnotationContainerBu
invocationKind,
inlineStatus,
isLambda,
hasExplicitParameterList,
typeParameters,
typeRef,
)
@@ -52,6 +52,7 @@ internal class FirAnonymousFunctionImpl(
override var invocationKind: EventOccurrencesRange?,
override var inlineStatus: InlineStatus,
override val isLambda: Boolean,
override val hasExplicitParameterList: Boolean,
override val typeParameters: MutableList<FirTypeParameter>,
override var typeRef: FirTypeRef,
) : FirAnonymousFunction() {
@@ -626,6 +626,12 @@ open class FirRenderer(builder: StringBuilder, protected val mode: RenderMode =
print(".")
}
print("<anonymous>")
if (anonymousFunction.valueParameters.isEmpty() &&
anonymousFunction.hasExplicitParameterList &&
anonymousFunction.returnTypeRef is FirImplicitTypeRef
) {
print("(<no-parameters>)")
}
anonymousFunction.valueParameters.renderParameters()
print(": ")
anonymousFunction.returnTypeRef.accept(this)
@@ -282,6 +282,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
isMutable = true
}
+booleanField("isLambda")
+booleanField("hasExplicitParameterList")
+typeParameters
+field(typeRef, withReplace = true)
}